Skip to content

Commit 13cb0f0

Browse files
committed
replace Axex.expand -> findExtremes in annotations and shapes
1 parent a9cf2e1 commit 13cb0f0

File tree

2 files changed

+72
-61
lines changed

2 files changed

+72
-61
lines changed

src/components/annotations/calc_autorange.js

Lines changed: 65 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -34,63 +34,70 @@ function annAutorange(gd) {
3434
Lib.filterVisible(fullLayout.annotations).forEach(function(ann) {
3535
var xa = Axes.getFromId(gd, ann.xref);
3636
var ya = Axes.getFromId(gd, ann.yref);
37-
var headSize = 3 * ann.arrowsize * ann.arrowwidth || 0;
38-
var startHeadSize = 3 * ann.startarrowsize * ann.arrowwidth || 0;
39-
40-
var headPlus, headMinus, startHeadPlus, startHeadMinus;
41-
42-
if(xa) {
43-
headPlus = headSize + ann.xshift;
44-
headMinus = headSize - ann.xshift;
45-
startHeadPlus = startHeadSize + ann.xshift;
46-
startHeadMinus = startHeadSize - ann.xshift;
47-
48-
if(ann.axref === ann.xref) {
49-
// expand for the arrowhead (padded by arrowhead)
50-
Axes.expand(xa, [xa.r2c(ann.x)], {
51-
ppadplus: headPlus,
52-
ppadminus: headMinus
53-
});
54-
// again for the textbox (padded by textbox)
55-
Axes.expand(xa, [xa.r2c(ann.ax)], {
56-
ppadplus: Math.max(ann._xpadplus, startHeadPlus),
57-
ppadminus: Math.max(ann._xpadminus, startHeadMinus)
58-
});
59-
}
60-
else {
61-
startHeadPlus = ann.ax ? startHeadPlus + ann.ax : startHeadPlus;
62-
startHeadMinus = ann.ax ? startHeadMinus - ann.ax : startHeadMinus;
63-
Axes.expand(xa, [xa.r2c(ann.x)], {
64-
ppadplus: Math.max(ann._xpadplus, headPlus, startHeadPlus),
65-
ppadminus: Math.max(ann._xpadminus, headMinus, startHeadMinus)
66-
});
67-
}
68-
}
69-
70-
if(ya) {
71-
headPlus = headSize - ann.yshift;
72-
headMinus = headSize + ann.yshift;
73-
startHeadPlus = startHeadSize - ann.yshift;
74-
startHeadMinus = startHeadSize + ann.yshift;
75-
76-
if(ann.ayref === ann.yref) {
77-
Axes.expand(ya, [ya.r2c(ann.y)], {
78-
ppadplus: headPlus,
79-
ppadminus: headMinus
80-
});
81-
Axes.expand(ya, [ya.r2c(ann.ay)], {
82-
ppadplus: Math.max(ann._ypadplus, startHeadPlus),
83-
ppadminus: Math.max(ann._ypadminus, startHeadMinus)
84-
});
85-
}
86-
else {
87-
startHeadPlus = ann.ay ? startHeadPlus + ann.ay : startHeadPlus;
88-
startHeadMinus = ann.ay ? startHeadMinus - ann.ay : startHeadMinus;
89-
Axes.expand(ya, [ya.r2c(ann.y)], {
90-
ppadplus: Math.max(ann._ypadplus, headPlus, startHeadPlus),
91-
ppadminus: Math.max(ann._ypadminus, headMinus, startHeadMinus)
92-
});
93-
}
94-
}
37+
38+
ann._extremes = {};
39+
if(xa) calcAxisExpansion(ann, xa);
40+
if(ya) calcAxisExpansion(ann, ya);
9541
});
9642
}
43+
44+
function calcAxisExpansion(ann, ax) {
45+
var headSize = 3 * ann.arrowsize * ann.arrowwidth || 0;
46+
var startHeadSize = 3 * ann.startarrowsize * ann.arrowwidth || 0;
47+
48+
var axId = ax._id;
49+
var letter = axId.charAt(0);
50+
var pos = ann[letter];
51+
var apos = ann['a' + letter];
52+
var ref = ann[letter + 'ref'];
53+
var aref = ann['a' + letter + 'ref'];
54+
var shift = ann[letter + 'shift'];
55+
var padplus = ann['_' + letter + 'padplus'];
56+
var padminus = ann['_' + letter + 'padminus'];
57+
58+
var headPlus, headMinus;
59+
var startHeadPlus, startHeadMinus;
60+
61+
switch(letter) {
62+
case 'x':
63+
headPlus = headSize + shift;
64+
headMinus = headSize - shift;
65+
startHeadPlus = startHeadSize + shift;
66+
startHeadMinus = startHeadSize - shift;
67+
break;
68+
case 'y':
69+
headPlus = headSize - shift;
70+
headMinus = headSize + shift;
71+
startHeadPlus = startHeadSize - shift;
72+
startHeadMinus = startHeadSize + shift;
73+
break;
74+
}
75+
76+
var extremes;
77+
78+
if(aref === ref) {
79+
// expand for the arrowhead (padded by arrowhead)
80+
var extremeArrowHead = Axes.findExtremes(ax, [ax.r2c(pos)], {
81+
ppadplus: headPlus,
82+
ppadminus: headMinus
83+
});
84+
// again for the textbox (padded by textbox)
85+
var extremeText = Axes.findExtremes(ax, [ax.r2c(apos)], {
86+
ppadplus: Math.max(padplus, startHeadPlus),
87+
ppadminus: Math.max(padminus, startHeadMinus)
88+
});
89+
extremes = {
90+
min: [extremeArrowHead.min[0], extremeText.min[0]],
91+
max: [extremeArrowHead.max[0], extremeText.max[0]]
92+
};
93+
} else {
94+
startHeadPlus = apos ? startHeadPlus + apos : startHeadPlus;
95+
startHeadMinus = apos ? startHeadMinus - apos : startHeadMinus;
96+
extremes = Axes.findExtremes(ax, [ax.r2c(pos)], {
97+
ppadplus: Math.max(padplus, headPlus, startHeadPlus),
98+
ppadminus: Math.max(padminus, headMinus, startHeadMinus)
99+
});
100+
}
101+
102+
ann._extremes[axId] = extremes;
103+
}

src/components/shapes/calc_autorange.js

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ module.exports = function calcAutorange(gd) {
2424

2525
for(var i = 0; i < shapeList.length; i++) {
2626
var shape = shapeList[i];
27+
shape._extremes = {};
2728

2829
var ax, bounds;
2930

@@ -33,8 +34,9 @@ module.exports = function calcAutorange(gd) {
3334
ax = Axes.getFromId(gd, shape.xref);
3435

3536
bounds = shapeBounds(ax, vx0, vx1, shape.path, constants.paramIsX);
36-
37-
if(bounds) Axes.expand(ax, bounds, calcXPaddingOptions(shape));
37+
if(bounds) {
38+
shape._extremes[ax._id] = Axes.findExtremes(ax, bounds, calcXPaddingOptions(shape));
39+
}
3840
}
3941

4042
if(shape.yref !== 'paper') {
@@ -43,7 +45,9 @@ module.exports = function calcAutorange(gd) {
4345
ax = Axes.getFromId(gd, shape.yref);
4446

4547
bounds = shapeBounds(ax, vy0, vy1, shape.path, constants.paramIsY);
46-
if(bounds) Axes.expand(ax, bounds, calcYPaddingOptions(shape));
48+
if(bounds) {
49+
shape._extremes[ax._id] = Axes.findExtremes(ax, bounds, calcYPaddingOptions(shape));
50+
}
4751
}
4852
}
4953
};

0 commit comments

Comments
 (0)