Skip to content

Commit 82a68a0

Browse files
committed
Refactor text point scaling
1 parent bf600bc commit 82a68a0

File tree

3 files changed

+38
-32
lines changed

3 files changed

+38
-32
lines changed

src/components/drawing/index.js

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -692,6 +692,36 @@ drawing.setPointGroupScale = function(selection, x, y) {
692692
return scale;
693693
};
694694

695+
var TEXT_POINT_LAST_TRANSLATION_RE = /translate\([^)]*\)\s*$/;
696+
697+
drawing.setTextPointsScale = function(selection, xScale, yScale) {
698+
selection.each(function() {
699+
var transforms;
700+
var el = d3.select(this);
701+
var text = el.select('text');
702+
var x = parseFloat(text.attr('x'));
703+
var y = parseFloat(text.attr('y'));
704+
705+
var existingTransform = el.attr('transform').match(TEXT_POINT_LAST_TRANSLATION_RE);
706+
707+
if(xScale === 1 && yScale === 1) {
708+
transforms = [];
709+
} else {
710+
transforms = [
711+
'translate(' + x + ',' + y + ')',
712+
'scale(' + xScale + ',' + yScale + ')',
713+
'translate(' + (-x) + ',' + (-y) + ')',
714+
];
715+
}
716+
717+
if(existingTransform) {
718+
transforms.push(existingTransform);
719+
}
720+
721+
el.attr('transform', transforms.join(' '));
722+
});
723+
};
724+
695725
drawing.measureText = function(tester, text, font) {
696726
var dummyText = tester.append('text')
697727
.text(text)

src/plots/cartesian/dragbox.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@ var constants = require('./constants');
3030
var MINDRAG = constants.MINDRAG;
3131
var MINZOOM = constants.MINZOOM;
3232

33-
3433
// flag for showing "doubleclick to zoom out" only at the beginning
3534
var SHOWZOOMOUTTIP = true;
3635

@@ -747,6 +746,10 @@ module.exports = function dragBox(gd, plotinfo, x, y, w, h, ns, ew) {
747746
// as a whole:
748747
.select('.scatterlayer').selectAll('.points').selectAll('.point')
749748
.call(Drawing.setPointGroupScale, xScaleFactor2, yScaleFactor2);
749+
750+
subplot.plot.select('.scatterlayer')
751+
.selectAll('.points').selectAll('.textpoint')
752+
.call(Drawing.setTextPointsScale, xScaleFactor2, yScaleFactor2);
750753
}
751754
}
752755

src/plots/cartesian/transition_axes.js

Lines changed: 4 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,6 @@ var Drawing = require('../../components/drawing');
1717
var Axes = require('./axes');
1818
var axisRegex = /((x|y)([2-9]|[1-9][0-9]+)?)axis$/;
1919

20-
var LAST_TRANSLATION_RE = /translate\([^)]*\)\s*$/;
21-
2220
module.exports = function transitionAxes(gd, newLayout, transitionOpts, makeOnCompleteCallback) {
2321
var fullLayout = gd._fullLayout;
2422
var axes = [];
@@ -150,17 +148,11 @@ module.exports = function transitionAxes(gd, newLayout, transitionOpts, makeOnCo
150148
// This is specifically directed at scatter traces, applying an inverse
151149
// scale to individual points to counteract the scale of the trace
152150
// as a whole:
153-
.selectAll('.points').selectAll('.point')
151+
.select('.scatterlayer').selectAll('.points').selectAll('.point')
154152
.call(Drawing.setPointGroupScale, 1, 1);
155153

156-
subplot.plot.selectAll('.points').selectAll('.textpoint')
157-
.each(function() {
158-
var el = d3.select(this);
159-
var existingTransform = el.attr('transform').match(LAST_TRANSLATION_RE);
160-
el.attr('transform', existingTransform || '');
161-
});
162-
163-
154+
subplot.plot.select('.scatterlayer').selectAll('.points').selectAll('.textpoint')
155+
.call(Drawing.setTextPointsScale, 1, 1);
164156
}
165157

166158
function updateSubplot(subplot, progress) {
@@ -240,26 +232,7 @@ module.exports = function transitionAxes(gd, newLayout, transitionOpts, makeOnCo
240232
.call(Drawing.setPointGroupScale, 1 / xScaleFactor, 1 / yScaleFactor);
241233

242234
subplot.plot.selectAll('.points').selectAll('.textpoint')
243-
.each(function() {
244-
var el = d3.select(this);
245-
var text = el.select('text');
246-
var x = parseFloat(text.attr('x'));
247-
var y = parseFloat(text.attr('y'));
248-
249-
var existingTransform = el.attr('transform').match(LAST_TRANSLATION_RE);
250-
251-
var transforms = [
252-
'translate(' + x + ',' + y + ')',
253-
'scale(' + (1 / xScaleFactor) + ',' + (1 / yScaleFactor) + ')',
254-
'translate(' + (-x) + ',' + (-y) + ')',
255-
];
256-
257-
if(existingTransform) {
258-
transforms.push(existingTransform);
259-
}
260-
261-
el.attr('transform', transforms.join(' '));
262-
});
235+
.call(Drawing.setTextPointsScale, 1 / xScaleFactor, 1 / yScaleFactor);
263236
}
264237

265238
var onComplete;

0 commit comments

Comments
 (0)