diff --git a/platform/features/plot/src/PlotController.js b/platform/features/plot/src/PlotController.js index 325efda885..10f67bc12a 100644 --- a/platform/features/plot/src/PlotController.js +++ b/platform/features/plot/src/PlotController.js @@ -8,9 +8,10 @@ define( "./PlotPreparer", "./PlotPalette", "./PlotPanZoomStack", + "./PlotPosition", "../lib/moment.min.js" ], - function (PlotPreparer, PlotPalette, PlotPanZoomStack) { + function (PlotPreparer, PlotPalette, PlotPanZoomStack, PlotPosition) { "use strict"; var AXIS_DEFAULTS = [ @@ -44,30 +45,15 @@ define( return (i ? formatRangeValue : formatDomainValue)(v); } - - function pixelToDomainRange(x, y, width, height, domainOffset) { - var panZoom = panZoomStack.getPanZoom(), - offset = [ domainOffset || 0, 0 ], - origin = panZoom.origin, - dimensions = panZoom.dimensions; - - if (!dimensions || !origin) { - return []; - } - - return [ x / width, (height - y) / height ].map(function (v, i) { - return v * dimensions[i] + origin[i] + offset[i]; - }); - } - function mousePositionToDomainRange(mousePosition, domainOffset) { - return pixelToDomainRange( + return new PlotPosition( mousePosition.x, mousePosition.y, mousePosition.width, mousePosition.height, + panZoomStack, domainOffset - ); + ).getPosition(); } function generateTicks(start, span, count, format) { diff --git a/platform/features/plot/src/PlotPosition.js b/platform/features/plot/src/PlotPosition.js new file mode 100644 index 0000000000..083c3a8347 --- /dev/null +++ b/platform/features/plot/src/PlotPosition.js @@ -0,0 +1,39 @@ +/*global define*/ + +define( + [], + function () { + "use strict"; + + function PlotPosition(x, y, width, height, panZoomStack, domainOffset) { + var panZoom = panZoomStack.getPanZoom(), + offset = [ domainOffset || 0, 0 ], + origin = panZoom.origin, + dimensions = panZoom.dimensions, + position; + + if (!dimensions || !origin) { + position = []; + } else { + position = [ x / width, (height - y) / height ].map(function (v, i) { + return v * dimensions[i] + origin[i] + offset[i]; + }); + } + + return { + getDomain: function () { + return position[0]; + }, + getRange: function () { + return position[1]; + }, + getPosition: function () { + return position; + } + }; + + } + + return PlotPosition; + } +); \ No newline at end of file