Skip to content

Commit f329890

Browse files
committed
fix: cursor alignment
1 parent 36bac41 commit f329890

File tree

1 file changed

+53
-23
lines changed

1 file changed

+53
-23
lines changed

src/components/Cursor.tsx

Lines changed: 53 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -73,13 +73,9 @@ export default function Cursor({ primary }) {
7373
if (axis.position === 'left') {
7474
x1 = siblingRange[0];
7575
x2 = siblingRange[1];
76-
alignPctX = -100;
77-
alignPctY = -50;
7876
} else {
7977
x1 = siblingRange[1];
8078
x2 = siblingRange[0];
81-
alignPctX = 0;
82-
alignPctY = -50;
8379
}
8480
} else {
8581
x = axis.scale(latestValue);
@@ -88,12 +84,62 @@ export default function Cursor({ primary }) {
8884
if (axis.position === 'top') {
8985
y1 = siblingRange[0];
9086
y2 = siblingRange[1];
91-
alignPctX = -500;
92-
alignPctY = -100;
9387
} else {
9488
y1 = siblingRange[1];
9589
y2 = siblingRange[0];
96-
alignPctX = -50;
90+
}
91+
}
92+
93+
const lineStartX = Math.min(x1, x2);
94+
const lineStartY = Math.min(y1, y2);
95+
const lineEndX = Math.max(x1, x2);
96+
const lineEndY = Math.max(y1, y2);
97+
const lineHeight = Math.max(lineEndY - lineStartY, 0);
98+
const lineWidth = Math.max(lineEndX - lineStartX, 0);
99+
100+
let bubbleX;
101+
let bubbleY;
102+
103+
// Bubble placement
104+
if (axis.vertical) {
105+
if (axis.position === 'left') {
106+
if (!axis.RTL) {
107+
bubbleX = lineStartX;
108+
} else {
109+
bubbleX = lineEndX;
110+
}
111+
} else {
112+
if (!axis.RTL) {
113+
bubbleX = lineEndX;
114+
} else {
115+
bubbleX = lineStartX;
116+
}
117+
}
118+
119+
bubbleY = lineStartY + lineHeight / 2;
120+
} else {
121+
bubbleX = lineStartX + lineWidth / 2;
122+
123+
if (axis.position === 'top') {
124+
bubbleY = lineStartY;
125+
} else {
126+
bubbleY = lineEndY;
127+
}
128+
}
129+
130+
// Bubble anchoring
131+
if (axis.vertical) {
132+
alignPctY = -50;
133+
if (axis.position === 'left') {
134+
alignPctX = -100;
135+
} else {
136+
alignPctX = 0;
137+
}
138+
} else {
139+
alignPctX = -50;
140+
if (axis.position === 'top') {
141+
alignPctY = -100;
142+
} else {
97143
alignPctY = 0;
98144
}
99145
}
@@ -118,26 +164,10 @@ export default function Cursor({ primary }) {
118164
: ''
119165
);
120166

121-
const lineStartX = Math.min(x1, x2);
122-
const lineStartY = Math.min(y1, y2);
123-
const lineEndX = Math.max(x1, x2);
124-
const lineEndY = Math.max(y1, y2);
125-
const bubbleX =
126-
axis.vertical && axis.RTL
127-
? lineEndX
128-
: x1 + (!axis.vertical ? (x2 - x1) / 2 : 0) + (!axis.vertical ? 1 : 0);
129-
const bubbleY =
130-
!axis.vertical && axis.RTL
131-
? lineStartY
132-
: y1 + (axis.vertical ? (y2 - y1) / 2 : 0) + (axis.vertical ? 1 : 0);
133-
134167
// if (!axis.vertical) {
135168
// console.log({ bubbleX, bubbleY });
136169
// }
137170

138-
const lineHeight = Math.max(lineEndY - lineStartY, 0);
139-
const lineWidth = Math.max(lineEndX - lineStartX, 0);
140-
141171
let animateCoords;
142172
if (previousShowRef.current === resolvedShow) {
143173
animateCoords = true;

0 commit comments

Comments
 (0)