Added pixelRatio option to override canvas upscaling. Resolves #876, test included...
[dygraphs.git] / tests / interaction.js
index f4925da..6ce65a8 100644 (file)
@@ -1,6 +1,7 @@
-
+// Code for a variety of interaction models. Used in interaction.html, but split out from
+// that file so they can be tested in isolation.
+//
 function downV3(event, g, context) {
-  resetGraphScroll();
   context.initializeMouseDown(event, g, context);
   if (event.altKey || event.shiftKey) {
     Dygraph.startZoom(event, g, context);
@@ -10,7 +11,6 @@ function downV3(event, g, context) {
 }
 
 function moveV3(event, g, context) {
-  resetGraphScroll();
   if (context.isPanning) {
     Dygraph.movePan(event, g, context);
   } else if (context.isZooming) {
@@ -62,6 +62,12 @@ function offsetToPercentage(g, offsetX, offsetY) {
 function dblClickV3(event, g, context) {
   // Reducing by 20% makes it 80% the original size, which means
   // to restore to original size it must grow by 25%
+
+  if (!(event.offsetX && event.offsetY)){
+    event.offsetX = event.layerX - event.target.offsetLeft;
+    event.offsetY = event.layerY - event.target.offsetTop;
+  }
+
   var percentages = offsetToPercentage(g, event.offsetX, event.offsetY);
   var xPct = percentages[0];
   var yPct = percentages[1];
@@ -73,20 +79,16 @@ function dblClickV3(event, g, context) {
   }
 }
 
-var scrollTimeMillis = 0;
+var lastClickedGraph = null;
 
-function suspendGraphScroll() {
-  scrollTimeMillis = new Date().getTime();
-}
-
-function resetGraphscroll() {
-  scrollTimeMillis = 0;
+function clickV3(event, g, context) {
+  lastClickedGraph = g;
+  event.preventDefault();
+  event.stopPropagation();
 }
 
 function scrollV3(event, g, context) {
-  var millis = new Date().getTime();
-  if (millis - scrollTimeMillis < 250) {
-    suspendGraphScroll();
+  if (lastClickedGraph != g) {
     return;
   }
   var normal = event.detail ? event.detail * -1 : event.wheelDelta / 40;
@@ -94,12 +96,18 @@ function scrollV3(event, g, context) {
   // that verbatim, it would be a 7.5%.
   var percentage = normal / 50;
 
+  if (!(event.offsetX && event.offsetY)){
+    event.offsetX = event.layerX - event.target.offsetLeft;
+    event.offsetY = event.layerY - event.target.offsetTop;
+  }
+
   var percentages = offsetToPercentage(g, event.offsetX, event.offsetY);
   var xPct = percentages[0];
   var yPct = percentages[1];
 
   zoom(g, percentage, xPct, yPct);
-  Dygraph.cancelEvent(event);
+  event.preventDefault();
+  event.stopPropagation();
 }
 
 // Adjusts [x, y] toward each other by zoomInPercentage%
@@ -143,8 +151,9 @@ function moveV4(event, g, context) {
   var RANGE = 7;
 
   if (v4Active) {
-    var canvasx = Dygraph.pageX(event) - Dygraph.findPosX(g.graphDiv);
-    var canvasy = Dygraph.pageY(event) - Dygraph.findPosY(g.graphDiv);
+    var graphPos = Dygraph.findPos(g.graphDiv);
+    var canvasx = Dygraph.pageX(event) - graphPos.x;
+    var canvasy = Dygraph.pageY(event) - graphPos.y;
 
     var rows = g.numRows();
     // Row layout:
@@ -189,7 +198,7 @@ function upV4(event, g, context) {
 }
 
 function dblClickV4(event, g, context) {
-  restorePositioning(g4);
+  restorePositioning(g);
 }
 
 function drawV4(x, y) {