Selaa lähdekoodia

Capture mouse events and filter irrelevant ones

jalf 12 vuotta sitten
vanhempi
commit
b1b342a97e
1 muutettua tiedostoa jossa 24 lisäystä ja 1 poistoa
  1. 24 1
      include/input.js

+ 24 - 1
include/input.js

@@ -486,7 +486,8 @@ function Mouse(defaults) {
 "use strict";
 
 var that           = {},  // Public API methods
-    conf           = {};  // Configuration attributes
+    conf           = {},  // Configuration attributes
+    mouseCaptured  = false;
 
 // Configuration attributes
 Util.conf_defaults(conf, that, defaults, [
@@ -499,7 +500,23 @@ Util.conf_defaults(conf, that, defaults, [
     ['touchButton',    'rw', 'int', 1, 'Button mask (1, 2, 4) for touch devices (0 means ignore clicks)']
     ]);
 
+function captureMouse() {
+    // capturing the mouse ensures we get the mouseup event
+    if (conf.target.setCapture) {
+        conf.target.setCapture();
+    }
+
+    // some browsers give us mouseup events regardless,
+    // so if we never captured the mouse, we can disregard the event
+    mouseCaptured = true;
+}
 
+function releaseMouse() {
+    if (conf.target.releaseCapture) {
+        conf.target.releaseCapture();
+    }
+    mouseCaptured = false;
+}
 // 
 // Private functions
 //
@@ -536,11 +553,17 @@ function onMouseButton(e, down) {
 }
 
 function onMouseDown(e) {
+    captureMouse();
     onMouseButton(e, 1);
 }
 
 function onMouseUp(e) {
+    if (!mouseCaptured) {
+        return;
+    }
+
     onMouseButton(e, 0);
+    releaseMouse();
 }
 
 function onMouseWheel(e) {