diff --git a/geneit_app/src/widgets/simple_family_tree/SimpleFamilyTree.tsx b/geneit_app/src/widgets/simple_family_tree/SimpleFamilyTree.tsx index 0ae5815..e80fd27 100644 --- a/geneit_app/src/widgets/simple_family_tree/SimpleFamilyTree.tsx +++ b/geneit_app/src/widgets/simple_family_tree/SimpleFamilyTree.tsx @@ -241,6 +241,17 @@ function NodeArea(p: { }): React.ReactElement { let parent_x_offset: number; + let pers1 = p.node.member; + let pers2 = p.node.spouse?.member; + let didSwap = false; + + if (pers2?.sex === "M") { + let s = pers1; + pers1 = pers2; + pers2 = s; + didSwap = true; + } + parent_x_offset = p.x + center(p.node.width, p.node.parentWidth); let unusedChildrenWidth = p.node.width - p.node.childrenWidth; @@ -248,24 +259,22 @@ function NodeArea(p: { let endFirstFaceX = parent_x_offset + - Math.floor((memberCardWidth(p.node.member) - FACE_WIDTH) / 2) + + Math.floor((memberCardWidth(pers1) - FACE_WIDTH) / 2) + FACE_WIDTH; let beginingOfSecondCardX = - parent_x_offset + - p.node.parentWidth - - memberCardWidth(p.node.spouse?.member); + parent_x_offset + p.node.parentWidth - memberCardWidth(pers2); let beginSecondFaceX = p.node.spouse && - beginingOfSecondCardX + - (memberCardWidth(p.node.spouse.member) - FACE_WIDTH) / 2; + beginingOfSecondCardX + (memberCardWidth(pers2) - FACE_WIDTH) / 2; let middleParentFaceY = p.y + Math.floor(FACE_HEIGHT / 2); // Compute points for link between children and parent - let parentLinkX = - parent_x_offset + Math.floor(memberCardWidth(p.node.member) / 2); + let parentLinkX = didSwap + ? beginSecondFaceX! + Math.floor(FACE_WIDTH / 2) + : parent_x_offset + Math.floor(memberCardWidth(pers1) / 2); let parentLinkY = p.y; // Remove ugly little shifts @@ -279,8 +288,7 @@ function NodeArea(p: { childrenLinkX = Math.floor((endFirstFaceX + beginSecondFaceX!) / 2); childrenLinkY = middleParentFaceY; } else { - childrenLinkX = - parent_x_offset + Math.floor(memberCardWidth(p.node.member) / 2); + childrenLinkX = parent_x_offset + Math.floor(memberCardWidth(pers1) / 2); childrenLinkY = p.y + CARD_HEIGHT + 2; } @@ -298,7 +306,7 @@ function NodeArea(p: { > )} - + {p.node.spouse && ( <> @@ -310,11 +318,7 @@ function NodeArea(p: { d={`M${endFirstFaceX} ${middleParentFaceY} H ${beginSecondFaceX}`} > - + )}