Skip to content

Commit 3b83880

Browse files
author
Daniel Gröger
committed
Ignore very small overlap
1 parent 4c3438f commit 3b83880

File tree

1 file changed

+16
-12
lines changed

1 file changed

+16
-12
lines changed

src/components/fx/hover.js

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1560,7 +1560,8 @@ function hoverAvoidOverlaps(hoverLabels, rotateLabels, fullLayout, commonLabel)
15601560
var labelMin = d.crossPos + (axIsX ? offsetRectY : offsetRectX);
15611561
var labelMax = labelMin + (axIsX ? d.tx2width * fullLayout._invScaleX : (d.by + 2) * fullLayout._invScaleY);
15621562
if(axIsX) {
1563-
if(axisLabelMinY !== undefined && axisLabelMaxY !== undefined && Math.max(labelMin, axisLabelMinY) <= Math.min(labelMax, axisLabelMaxY)) {
1563+
// at least 1 pixel overlap
1564+
if(axisLabelMinY !== undefined && axisLabelMaxY !== undefined && Math.min(labelMax, axisLabelMaxY) - Math.max(labelMin, axisLabelMinY) > 1) {
15641565
// has overlap with axis label
15651566
if(crossAx.side === 'left') {
15661567
pmin = crossAx._mainLinePosition;
@@ -1570,7 +1571,8 @@ function hoverAvoidOverlaps(hoverLabels, rotateLabels, fullLayout, commonLabel)
15701571
}
15711572
}
15721573
} else {
1573-
if(axisLabelMinX !== undefined && axisLabelMaxX !== undefined && Math.max(labelMin, axisLabelMinX) <= Math.min(labelMax, axisLabelMaxX)) {
1574+
// at least 1 pixel overlap
1575+
if(axisLabelMinX !== undefined && axisLabelMaxX !== undefined && Math.min(labelMax, axisLabelMaxX) - Math.max(labelMin, axisLabelMinX) > 1) {
15741576
// has overlap with axis label
15751577
if(crossAx.side === 'top') {
15761578
pmin = crossAx._mainLinePosition;
@@ -1782,25 +1784,27 @@ function alignHoverText(hoverLabels, rotateLabels, scaleX, scaleY) {
17821784
var horzSign = anchor === 'end' ? -1 : 1;
17831785
var shiftX = getLabelShiftX(d);
17841786
var offsets = getHoverLabelOffsets(d, rotateLabels);
1787+
var offsetX = offsets.x;
1788+
var offsetY = offsets.y;
17851789

17861790
var isMiddle = anchor === 'middle';
17871791

17881792
g.select('path')
17891793
.attr('d', isMiddle ?
17901794
// middle aligned: rect centered on data
1791-
('M-' + pX(d.bx / 2 + d.tx2width / 2) + ',' + pY(offsets.y - d.by / 2) +
1795+
('M-' + pX(d.bx / 2 + d.tx2width / 2) + ',' + pY(offsetY - d.by / 2) +
17921796
'h' + pX(d.bx) + 'v' + pY(d.by) + 'h-' + pX(d.bx) + 'Z') :
17931797
// left or right aligned: side rect with arrow to data
1794-
('M0,0L' + pX(horzSign * HOVERARROWSIZE + offsets.x) + ',' + pY(HOVERARROWSIZE + offsets.y) +
1798+
('M0,0L' + pX(horzSign * HOVERARROWSIZE + offsetX) + ',' + pY(HOVERARROWSIZE + offsetY) +
17951799
'v' + pY(d.by / 2 - HOVERARROWSIZE) +
17961800
'h' + pX(horzSign * d.bx) +
17971801
'v-' + pY(d.by) +
1798-
'H' + pX(horzSign * HOVERARROWSIZE + offsets.x) +
1799-
'V' + pY(offsets.y - HOVERARROWSIZE) +
1802+
'H' + pX(horzSign * HOVERARROWSIZE + offsetX) +
1803+
'V' + pY(offsetY - HOVERARROWSIZE) +
18001804
'Z'));
18011805

1802-
var posX = offsets.x + shiftX.xx;
1803-
var posY = offsets.y + d.ty0 - d.by / 2 + HOVERTEXTPAD;
1806+
var posX = offsetX + shiftX.xx;
1807+
var posY = offsetY + d.ty0 - d.by / 2 + HOVERTEXTPAD;
18041808
var textAlign = d.textAlign || 'auto';
18051809

18061810
if(textAlign !== 'auto') {
@@ -1822,12 +1826,12 @@ function alignHoverText(hoverLabels, rotateLabels, scaleX, scaleY) {
18221826
if(d.tx2width) {
18231827
g.select('text.name')
18241828
.call(svgTextUtils.positionText,
1825-
pX(shiftX.x2x + shiftX.alignShift * HOVERTEXTPAD + offsets.x),
1826-
pY(offsets.y + d.ty0 - d.by / 2 + HOVERTEXTPAD));
1829+
pX(shiftX.x2x + shiftX.alignShift * HOVERTEXTPAD + offsetX),
1830+
pY(offsetY + d.ty0 - d.by / 2 + HOVERTEXTPAD));
18271831
g.select('rect')
18281832
.call(Drawing.setRect,
1829-
pX(shiftX.x2x + (shiftX.alignShift - 1) * d.tx2width / 2 + offsets.x),
1830-
pY(offsets.y - d.by / 2 - 1),
1833+
pX(shiftX.x2x + (shiftX.alignShift - 1) * d.tx2width / 2 + offsetX),
1834+
pY(offsetY - d.by / 2 - 1),
18311835
pX(d.tx2width), pY(d.by + 2));
18321836
}
18331837
});

0 commit comments

Comments
 (0)