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
1 changed files with 24 additions and 1 deletions

View File

@ -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) {