Capture mouse events and filter irrelevant ones

This commit is contained in:
jalf 2013-01-30 11:48:33 +01:00
parent 0d0f754aad
commit b1b342a97e

View File

@ -486,7 +486,8 @@ function Mouse(defaults) {
"use strict"; "use strict";
var that = {}, // Public API methods var that = {}, // Public API methods
conf = {}; // Configuration attributes conf = {}, // Configuration attributes
mouseCaptured = false;
// Configuration attributes // Configuration attributes
Util.conf_defaults(conf, that, defaults, [ 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)'] ['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 // Private functions
// //
@ -536,11 +553,17 @@ function onMouseButton(e, down) {
} }
function onMouseDown(e) { function onMouseDown(e) {
captureMouse();
onMouseButton(e, 1); onMouseButton(e, 1);
} }
function onMouseUp(e) { function onMouseUp(e) {
if (!mouseCaptured) {
return;
}
onMouseButton(e, 0); onMouseButton(e, 0);
releaseMouse();
} }
function onMouseWheel(e) { function onMouseWheel(e) {