From f63bb2a2af8c987feeb0511d92f73931a2968392 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Sun, 1 Apr 2012 18:20:18 -0700 Subject: [PATCH] Set scroll and click thresholds relative to screen pixel density (if readable) and size of gesture. --- src/main/resources/mouse.js | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/src/main/resources/mouse.js b/src/main/resources/mouse.js index d1217d4..5475793 100644 --- a/src/main/resources/mouse.js +++ b/src/main/resources/mouse.js @@ -59,10 +59,10 @@ Guacamole.Mouse = function(element) { var guac_mouse = this; /** - * The number of pixels a touch must move for it to be considered a scroll - * wheel event. + * The distance a two-finger touch must move per scrollwheel event, relative + * to the distance between the two touches. */ - this.scrollThreshold = 20; + this.scrollThreshold = 0.5; /** * The maximum number of milliseconds to wait for a touch to end for the @@ -74,7 +74,7 @@ Guacamole.Mouse = function(element) { * The maximum number of pixels to allow a touch to move for the gesture to * be considered a click. */ - this.clickMoveThreshold = 10; + this.clickMoveThreshold = 10 * (window.displayPixelRatio || 1); /** * The current mouse state. The properties of this state are updated when @@ -166,6 +166,7 @@ Guacamole.Mouse = function(element) { var last_touch_y = 0; var last_touch_time = 0; var pixels_moved = 0; + var touch_distance = 0; var touch_buttons = { 1: "left", @@ -262,6 +263,12 @@ Guacamole.Mouse = function(element) { } + else if (e.touches.length == 2) { + var diff_x = e.touches[0].screenX - e.touches[1].screenX; + var diff_y = e.touches[0].screenY - e.touches[1].screenY; + touch_distance = Math.sqrt(diff_x*diff_x + diff_y*diff_y); + } + }, false); element.addEventListener("touchmove", function(e) { @@ -305,11 +312,11 @@ Guacamole.Mouse = function(element) { } - // Otherwise, interpret as scrollwheel - else { + // Interpret two-finger touch as scrollwheel + else if (touch_count == 2) { // If change in location passes threshold for scroll - if (Math.abs(delta_y) >= guac_mouse.scrollThreshold) { + if (Math.abs(delta_y) >= touch_distance * guac_mouse.scrollThreshold) { // Decide button based on Y movement direction var button; -- 1.7.10.4