try to use stopPropagation to make sure touch events aren't handled by the browser...
[lantea.git] / js / map.js
index ce664298e6c478fd3c08576f26b99fe7565c87ac..361420b7e1e91088f204f932d678d6d0bf5e911d 100644 (file)
--- a/js/map.js
+++ b/js/map.js
@@ -163,13 +163,17 @@ function loadPrefs(aEvent) {
     });
     gWaitCounter++;
     var trackLoadStarted = false;
+    var redrawBase = 100;
     gTrackStore.getListStepped(function(aTPoint) {
       if (aTPoint) {
         // Add in front and return new length.
         var tracklen = gTrack.unshift(aTPoint);
-        // Redraw track every 100 values (initial paint will do first anyhow).
-        if (tracklen % 100 == 0)
+        // Redraw track periodically, larger distance the longer it gets.
+        // Initial paint will do initial track drawing.
+        if (tracklen % redrawBase == 0) {
           drawTrack();
+          redrawBase = tracklen;
+        }
       }
       else {
         // Last point received.
@@ -458,6 +462,10 @@ var mapEvHandler = {
   handleEvent: function(aEvent) {
     var touchEvent = aEvent.type.indexOf('touch') != -1;
 
+    if (touchEvent) {
+      aEvent.stopPropagation();
+    }
+
     // Bail out if the event is happening on an input.
     if (aEvent.target.tagName.toLowerCase() == "input")
       return;
@@ -512,7 +520,9 @@ var mapEvHandler = {
               Math.pow(aEvent.targetTouches.item(1).clientY -
                        aEvent.targetTouches.item(0).clientY, 2)
           );
-          console.log(gPinchStartWidth + ' <?> ' + curPinchStartWidth);
+          if (!gPinchStartWidth)
+            gPinchStartWidth = curPinchStartWidth;
+
           if (gPinchStartWidth / curPinchStartWidth > 1.7 ||
               gPinchStartWidth / curPinchStartWidth < 0.6) {
             var newZoomLevel = gPos.z + (gPinchStartWidth < curPinchStartWidth ? 1 : -1);
@@ -536,8 +546,12 @@ var mapEvHandler = {
                 zoomIn();
               else
                 zoomOut();
+
+              // Reset pinch start width and start another pinch gesture.
+              gPinchStartWidth = null;
             }
           }
+          // If we are in a pinch, do not drag.
           break;
         }
         var x = coordObj.clientX - gMapCanvas.offsetLeft;
@@ -568,6 +582,7 @@ var mapEvHandler = {
         break;
       case "mouseup":
       case "touchend":
+        gPinchStartWidth = null;
         gDragging = false;
         showUI();
         break;