Experimental working touch-based mouse.
authorMichael Jumper <zhangmaike@users.sourceforge.net>
Thu, 9 Jun 2011 16:25:47 +0000 (09:25 -0700)
committerMichael Jumper <zhangmaike@users.sourceforge.net>
Thu, 9 Jun 2011 16:25:47 +0000 (09:25 -0700)
src/main/resources/mouse.js

index fb86005..745b50c 100644 (file)
@@ -46,15 +46,10 @@ function GuacamoleMouse(element) {
     }
 
 
-    // Block context menu so right-click gets sent properly
-    element.oncontextmenu = function(e) {return false;};
-
-    element.onmousemove = function(e) {
-
-        e.stopPropagation();
+    function moveMouse(pageX, pageY) {
 
-        absoluteMouseX = e.pageX;
-        absoluteMouseY = e.pageY;
+        absoluteMouseX = pageX;
+        absoluteMouseY = pageY;
 
         mouseX = absoluteMouseX - element.offsetLeft;
         mouseY = absoluteMouseY - element.offsetTop;
@@ -70,6 +65,68 @@ function GuacamoleMouse(element) {
         }
 
         movementHandler(getMouseState(0, 0));
+
+    }
+
+
+    // Block context menu so right-click gets sent properly
+    element.oncontextmenu = function(e) {return false;};
+
+    element.onmousemove = function(e) {
+
+        e.stopPropagation();
+
+        moveMouse(e.pageX, e.pageY);
+
+    };
+
+    element.ontouchend = function(e) {
+        
+        e.stopPropagation();
+        e.preventDefault();
+
+        // Release all buttons (FIXME: for now...)
+        if (mouseLeftButton || mouseMiddleButton || mouseRightButton) {
+            mouseLeftButton = 0;
+            mouseMiddleButton = 0;
+            mouseRightButton = 0;
+
+            buttonReleasedHandler(getMouseState(0, 0));
+        }
+
+    }
+
+    element.ontouchstart = function(e) {
+
+        e.stopPropagation();
+        e.preventDefault();
+
+        if (e.touches.length == 1)
+            element.ontouchmove(e);
+
+        else {
+            
+            var button = e.touches[0];
+            var pointer = e.touches[1];
+
+            if (pointer.pageX < button.pageX)
+                mouseLeftButton = 1;
+            else
+                mouseRightButton = 1;
+
+            buttonPressedHandler(getMouseState(0, 0));
+        }
+
+    };
+
+    element.ontouchmove = function(e) {
+
+        e.stopPropagation();
+        e.preventDefault();
+
+        var touch = e.touches[0];
+        moveMouse(touch.pageX, touch.pageY);
+
     };