Skip to content

Commit f3c03cd

Browse files
committed
888: assign scales at makePlotFramework
1 parent 435945b commit f3c03cd

File tree

7 files changed

+29
-23
lines changed

7 files changed

+29
-23
lines changed

src/components/fx/hover.js

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -192,7 +192,9 @@ exports.loneHover = function loneHover(hoverItems, opts) {
192192
d.offset -= anchor;
193193
});
194194

195-
alignHoverText(hoverLabel, fullOpts.rotateLabels, opts.gd._fullLayout._inverseTransform);
195+
var scaleX = opts.gd._fullLayout._inverseScaleX;
196+
var scaleY = opts.gd._fullLayout._inverseScaleY;
197+
alignHoverText(hoverLabel, fullOpts.rotateLabels, scaleX, scaleY);
196198

197199
return multiHover ? hoverLabel : hoverLabel.node();
198200
};
@@ -721,10 +723,8 @@ function _hover(gd, evt, subplot, noHoverEvent) {
721723

722724
if(!helpers.isUnifiedHover(hovermode)) {
723725
hoverAvoidOverlaps(hoverLabels, rotateLabels ? 'xa' : 'ya', fullLayout);
724-
alignHoverText(hoverLabels, rotateLabels, fullLayout._inverseTransform);
725-
}
726-
727-
// TODO: tagName hack is needed to appease geo.js's hack of using evt.target=true
726+
alignHoverText(hoverLabels, rotateLabels, fullLayout._inverseScaleX, fullLayout._inverseScaleY);
727+
} // TODO: tagName hack is needed to appease geo.js's hack of using evt.target=true
728728
// we should improve the "fx" API so other plots can use it without these hack.
729729
if(evt.target && evt.target.tagName) {
730730
var hasClickToShow = Registry.getComponentMethod('annotations', 'hasClickToShow')(gd, newhoverdata);
@@ -1482,10 +1482,7 @@ function hoverAvoidOverlaps(hoverLabels, axKey, fullLayout) {
14821482
}
14831483
}
14841484

1485-
function alignHoverText(hoverLabels, rotateLabels, inverseTransform) {
1486-
var m = inverseTransform;
1487-
var scaleX = Math.sqrt(m[0][0] * m[0][0] + m[0][1] * m[0][1]);
1488-
var scaleY = Math.sqrt(m[1][0] * m[1][0] + m[1][1] * m[1][1]);
1485+
function alignHoverText(hoverLabels, rotateLabels, scaleX, scaleY) {
14891486
var pX = function(x) { return x * scaleX; };
14901487
var pY = function(y) { return y * scaleY; };
14911488

src/plot_api/plot_api.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3716,6 +3716,9 @@ function makePlotFramework(gd) {
37163716
var fullLayout = gd._fullLayout;
37173717
if(fullLayout._inverseTransform === undefined) {
37183718
fullLayout._inverseTransform = Lib.inverseTransformMatrix(Lib.getFullTransformMatrix(gd));
3719+
var m = fullLayout._inverseTransform;
3720+
fullLayout._inverseScaleX = Math.sqrt(m[0][0] * m[0][0] + m[0][1] * m[0][1] + m[0][2] * m[0][2]);
3721+
fullLayout._inverseScaleY = Math.sqrt(m[1][0] * m[1][0] + m[1][1] * m[1][1] + m[1][2] * m[1][2]);
37193722
}
37203723

37213724
// Plot container

src/plots/cartesian/dragbox.js

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -164,9 +164,8 @@ function makeDragBox(gd, plotinfo, x, y, w, h, ns, ew) {
164164

165165
recomputeAxisLists();
166166

167-
var m = gd._fullLayout._inverseTransform;
168-
scaleX = Math.sqrt(m[0][0] * m[0][0] + m[0][1] * m[0][1]);
169-
scaleY = Math.sqrt(m[1][0] * m[1][0] + m[1][1] * m[1][1]);
167+
scaleX = gd._fullLayout._inverseScaleX;
168+
scaleY = gd._fullLayout._inverseScaleY;
170169

171170
if(!allFixedRanges) {
172171
if(isMainDrag) {

src/plots/cartesian/select.js

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -71,9 +71,8 @@ function prepSelect(e, startX, startY, dragOptions, mode) {
7171
var transformedCoords = Lib.apply3DTransform(fullLayout._inverseTransform)(x0, y0);
7272
x0 = transformedCoords[0];
7373
y0 = transformedCoords[1];
74-
var m = fullLayout._inverseTransform;
75-
var scaleX = Math.sqrt(m[0][0] * m[0][0] + m[0][1] * m[0][1] + m[0][2] * m[0][2]);
76-
var scaleY = Math.sqrt(m[1][0] * m[1][0] + m[1][1] * m[1][1] + m[1][2] * m[1][2]);
74+
var scaleX = fullLayout._inverseScaleX;
75+
var scaleY = fullLayout._inverseScaleY;
7776

7877
var x1 = x0;
7978
var y1 = y0;

src/plots/gl3d/scene.js

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -296,9 +296,8 @@ proto.render = function() {
296296
// update size of svg container
297297
var svgContainer = scene.svgContainer;
298298
var clientRect = scene.container.getBoundingClientRect();
299-
var m = gd._fullLayout._inverseTransform;
300-
var scaleX = Math.sqrt(m[0][0] * m[0][0] + m[0][1] * m[0][1]);
301-
var scaleY = Math.sqrt(m[1][0] * m[1][0] + m[1][1] * m[1][1]);
299+
var scaleX = gd._fullLayout._inverseScaleX;
300+
var scaleY = gd._fullLayout._inverseScaleY;
302301
var width = clientRect.width * scaleX;
303302
var height = clientRect.height * scaleY;
304303
svgContainer.setAttributeNS(null, 'viewBox', '0 0 ' + width + ' ' + height);

src/plots/polar/polar.js

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -678,9 +678,8 @@ proto.updateMainDrag = function(fullLayout) {
678678
var chw = constants.cornerHalfWidth;
679679
var chl = constants.cornerLen / 2;
680680

681-
var m = gd._fullLayout._inverseTransform;
682-
var scaleX = Math.sqrt(m[0][0] * m[0][0] + m[0][1] * m[0][1]);
683-
var scaleY = Math.sqrt(m[1][0] * m[1][0] + m[1][1] * m[1][1]);
681+
var scaleX = gd._fullLayout._inverseScaleX;
682+
var scaleY = gd._fullLayout._inverseScaleY;
684683

685684
var mainDrag = dragBox.makeDragger(layers, 'path', 'maindrag', 'crosshair');
686685

src/plots/ternary/ternary.js

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -502,6 +502,8 @@ proto.initInteractions = function() {
502502
var dragger = _this.layers.plotbg.select('path').node();
503503
var gd = _this.graphDiv;
504504
var zoomLayer = gd._fullLayout._zoomlayer;
505+
var scaleX;
506+
var scaleY;
505507

506508
// use plotbg for the main interactions
507509
this.dragOptions = {
@@ -520,6 +522,9 @@ proto.initInteractions = function() {
520522
_this.dragOptions.xaxes = [_this.xaxis];
521523
_this.dragOptions.yaxes = [_this.yaxis];
522524

525+
scaleX = gd._fullLayout._inverseScaleX;
526+
scaleY = gd._fullLayout._inverseScaleY;
527+
523528
var dragModeNow = _this.dragOptions.dragmode = gd._fullLayout.dragmode;
524529

525530
if(freeMode(dragModeNow)) _this.dragOptions.minDrag = 1;
@@ -573,8 +578,13 @@ proto.initInteractions = function() {
573578

574579
function zoomPrep(e, startX, startY) {
575580
var dragBBox = dragger.getBoundingClientRect();
581+
var inverse = gd._fullLayout._inverseTransform;
576582
x0 = startX - dragBBox.left;
577583
y0 = startY - dragBBox.top;
584+
var transformedCoords = Lib.apply3DTransform(inverse)(x0, y0);
585+
x0 = transformedCoords[0];
586+
y0 = transformedCoords[1];
587+
578588
mins0 = {
579589
a: _this.aaxis.range[0],
580590
b: _this.baxis.range[1],
@@ -614,8 +624,8 @@ proto.initInteractions = function() {
614624
function getCFrac(x, y) { return ((x - (_this.h - y) / Math.sqrt(3)) / _this.w); }
615625

616626
function zoomMove(dx0, dy0) {
617-
var x1 = x0 + dx0;
618-
var y1 = y0 + dy0;
627+
var x1 = x0 + dx0 * scaleX;
628+
var y1 = y0 + dy0 * scaleY;
619629
var afrac = Math.max(0, Math.min(1, getAFrac(x0, y0), getAFrac(x1, y1)));
620630
var bfrac = Math.max(0, Math.min(1, getBFrac(x0, y0), getBFrac(x1, y1)));
621631
var cfrac = Math.max(0, Math.min(1, getCFrac(x0, y0), getCFrac(x1, y1)));

0 commit comments

Comments
 (0)