GUAC-1244: Replace timeout with better line/page constants. Reset scroll_delta so the delta doesn't have to evenly divide into scrollThreshold.

This commit is contained in:
Michael Jumper
2015-07-07 20:33:02 -07:00
parent 198951a3d9
commit 3d3149246a

View File

@@ -39,12 +39,6 @@ Guacamole.Mouse = function(element) {
*/ */
var guac_mouse = this; var guac_mouse = this;
/**
* Timeout before a single mouse scroll happens.
* @type Number
*/
var mouse_scroll_timeout = null;
/** /**
* The number of mousemove events to require before re-enabling mouse * The number of mousemove events to require before re-enabling mouse
* event handling after receiving a touch event. * event handling after receiving a touch event.
@@ -55,17 +49,17 @@ Guacamole.Mouse = function(element) {
* The minimum amount of pixels scrolled required for a single scroll button * The minimum amount of pixels scrolled required for a single scroll button
* click. * click.
*/ */
this.scrollThreshold = 120; this.scrollThreshold = 53;
/** /**
* The number of pixels to scroll per line. * The number of pixels to scroll per line.
*/ */
this.PIXELS_PER_LINE = 40; this.PIXELS_PER_LINE = 18;
/** /**
* The number of pixels to scroll per page. * The number of pixels to scroll per page.
*/ */
this.PIXELS_PER_PAGE = 640; this.PIXELS_PER_PAGE = this.PIXELS_PER_LINE * 16;
/** /**
* The current mouse state. The properties of this state are updated when * The current mouse state. The properties of this state are updated when
@@ -279,54 +273,54 @@ Guacamole.Mouse = function(element) {
// Update overall delta // Update overall delta
scroll_delta += delta; scroll_delta += delta;
if (mouse_scroll_timeout === null) { // Up
if (scroll_delta <= -guac_mouse.scrollThreshold) {
// Send actual mouse scroll event after a threshold // Repeatedly click the up button until insufficient delta remains
mouse_scroll_timeout = window.setTimeout(function () { do {
// Up if (guac_mouse.onmousedown) {
if (scroll_delta < 0) { guac_mouse.currentState.up = true;
do { guac_mouse.onmousedown(guac_mouse.currentState);
if (guac_mouse.onmousedown) {
guac_mouse.currentState.up = true;
guac_mouse.onmousedown(guac_mouse.currentState);
}
if (guac_mouse.onmouseup) {
guac_mouse.currentState.up = false;
guac_mouse.onmouseup(guac_mouse.currentState);
}
scroll_delta += guac_mouse.scrollThreshold;
} while (scroll_delta < 0);
} }
// Down if (guac_mouse.onmouseup) {
else if (scroll_delta > 0) { guac_mouse.currentState.up = false;
do { guac_mouse.onmouseup(guac_mouse.currentState);
if (guac_mouse.onmousedown) {
guac_mouse.currentState.down = true;
guac_mouse.onmousedown(guac_mouse.currentState);
}
if (guac_mouse.onmouseup) {
guac_mouse.currentState.down = false;
guac_mouse.onmouseup(guac_mouse.currentState);
}
scroll_delta -= guac_mouse.scrollThreshold;
} while (scroll_delta > 0);
} }
scroll_delta = 0; scroll_delta += guac_mouse.scrollThreshold;
window.clearTimeout(mouse_scroll_timeout);
mouse_scroll_timeout = null; } while (scroll_delta <= -guac_mouse.scrollThreshold);
// Reset delta
scroll_delta = 0;
}
// Down
if (scroll_delta >= guac_mouse.scrollThreshold) {
// Repeatedly click the down button until insufficient delta remains
do {
if (guac_mouse.onmousedown) {
guac_mouse.currentState.down = true;
guac_mouse.onmousedown(guac_mouse.currentState);
}
if (guac_mouse.onmouseup) {
guac_mouse.currentState.down = false;
guac_mouse.onmouseup(guac_mouse.currentState);
}
scroll_delta -= guac_mouse.scrollThreshold;
} while (scroll_delta >= guac_mouse.scrollThreshold);
// Reset delta
scroll_delta = 0;
}, 100);
} }
cancelEvent(e); cancelEvent(e);