From 5860167d65ea4e5a9c2e4321565c2ea2c631c64c Mon Sep 17 00:00:00 2001 From: Mark Salsbery Date: Sun, 20 Apr 2014 18:19:32 -0700 Subject: [PATCH 1/4] MouseTracker Touch Fixes - Flick Defaults and Bubbling Flick gesture settings defaults set to better values. Removed touch event model bubble cancelling so viewer controls show on touch contact. --- src/mousetracker.js | 3 --- src/openseadragon.js | 24 ++++++++++++------------ 2 files changed, 12 insertions(+), 15 deletions(-) diff --git a/src/mousetracker.js b/src/mousetracker.js index 4405e93e..ddca3dfb 100644 --- a/src/mousetracker.js +++ b/src/mousetracker.js @@ -1627,7 +1627,6 @@ // Touch event model start, end, and move events are always captured so we don't need to capture explicitly } - $.stopEvent( event ); $.cancelEvent( event ); } @@ -1663,7 +1662,6 @@ updatePointersExit( tracker, event, gPoints ); } - $.stopEvent( event ); $.cancelEvent( event ); } @@ -1689,7 +1687,6 @@ updatePointersMove( tracker, event, gPoints ); - $.stopEvent( event ); $.cancelEvent( event ); } diff --git a/src/openseadragon.js b/src/openseadragon.js index c7f69749..ccf4e630 100644 --- a/src/openseadragon.js +++ b/src/openseadragon.js @@ -286,8 +286,8 @@ * @property {Boolean} [gestureSettingsMouse.clickToZoom=true] - Zoom on click gesture * @property {Boolean} [gestureSettingsMouse.pinchToZoom=false] - Zoom on pinch gesture * @property {Boolean} [gestureSettingsMouse.flickEnabled=false] - Enable flick gesture - * @property {Number} [gestureSettingsMouse.flickMinSpeed=20] - If flickEnabled is true, the minimum speed to initiate a flick gesture (pixels-per-second) - * @property {Number} [gestureSettingsMouse.flickMomentum=0.40] - If flickEnabled is true, the momentum factor for the flick gesture + * @property {Number} [gestureSettingsMouse.flickMinSpeed=120] - If flickEnabled is true, the minimum speed to initiate a flick gesture (pixels-per-second) + * @property {Number} [gestureSettingsMouse.flickMomentum=0.25] - If flickEnabled is true, the momentum factor for the flick gesture * * @property {OpenSeadragon.GestureSettings} [gestureSettingsTouch] * Settings for gestures generated by a touch pointer device. (See {@link OpenSeadragon.GestureSettings}) @@ -295,8 +295,8 @@ * @property {Boolean} [gestureSettingsTouch.clickToZoom=false] - Zoom on click gesture * @property {Boolean} [gestureSettingsTouch.pinchToZoom=true] - Zoom on pinch gesture * @property {Boolean} [gestureSettingsTouch.flickEnabled=true] - Enable flick gesture - * @property {Number} [gestureSettingsTouch.flickMinSpeed=20] - If flickEnabled is true, the minimum speed to initiate a flick gesture (pixels-per-second) - * @property {Number} [gestureSettingsTouch.flickMomentum=0.40] - If flickEnabled is true, the momentum factor for the flick gesture + * @property {Number} [gestureSettingsTouch.flickMinSpeed=120] - If flickEnabled is true, the minimum speed to initiate a flick gesture (pixels-per-second) + * @property {Number} [gestureSettingsTouch.flickMomentum=0.25] - If flickEnabled is true, the momentum factor for the flick gesture * * @property {OpenSeadragon.GestureSettings} [gestureSettingsPen] * Settings for gestures generated by a pen pointer device. (See {@link OpenSeadragon.GestureSettings}) @@ -304,8 +304,8 @@ * @property {Boolean} [gestureSettingsPen.clickToZoom=true] - Zoom on click gesture * @property {Boolean} [gestureSettingsPen.pinchToZoom=false] - Zoom on pinch gesture * @property {Boolean} [gestureSettingsPen.flickEnabled=false] - Enable flick gesture - * @property {Number} [gestureSettingsPen.flickMinSpeed=20] - If flickEnabled is true, the minimum speed to initiate a flick gesture (pixels-per-second) - * @property {Number} [gestureSettingsPen.flickMomentum=0.40] - If flickEnabled is true, the momentum factor for the flick gesture + * @property {Number} [gestureSettingsPen.flickMinSpeed=120] - If flickEnabled is true, the minimum speed to initiate a flick gesture (pixels-per-second) + * @property {Number} [gestureSettingsPen.flickMomentum=0.25] - If flickEnabled is true, the momentum factor for the flick gesture * * @property {OpenSeadragon.GestureSettings} [gestureSettingsUnknown] * Settings for gestures generated by unknown pointer devices. (See {@link OpenSeadragon.GestureSettings}) @@ -313,8 +313,8 @@ * @property {Boolean} [gestureSettingsUnknown.clickToZoom=false] - Zoom on click gesture * @property {Boolean} [gestureSettingsUnknown.pinchToZoom=true] - Zoom on pinch gesture * @property {Boolean} [gestureSettingsUnknown.flickEnabled=true] - Enable flick gesture - * @property {Number} [gestureSettingsUnknown.flickMinSpeed=20] - If flickEnabled is true, the minimum speed to initiate a flick gesture (pixels-per-second) - * @property {Number} [gestureSettingsUnknown.flickMomentum=0.40] - If flickEnabled is true, the momentum factor for the flick gesture + * @property {Number} [gestureSettingsUnknown.flickMinSpeed=120] - If flickEnabled is true, the minimum speed to initiate a flick gesture (pixels-per-second) + * @property {Number} [gestureSettingsUnknown.flickMomentum=0.25] - If flickEnabled is true, the momentum factor for the flick gesture * * @property {Number} [zoomPerClick=2.0] * The "zoom distance" per mouse click or touch tap. Note: Setting this to 1.0 effectively disables the click-to-zoom feature (also see gestureSettings[Mouse|Touch|Pen].clickToZoom). @@ -893,10 +893,10 @@ window.OpenSeadragon = window.OpenSeadragon || function( options ){ clickDistThreshold: 5, springStiffness: 5.0, animationTime: 1.2, - gestureSettingsMouse: { scrollToZoom: true, clickToZoom: true, pinchToZoom: false, flickEnabled: false, flickMinSpeed: 20, flickMomentum: 0.40 }, - gestureSettingsTouch: { scrollToZoom: false, clickToZoom: false, pinchToZoom: true, flickEnabled: true, flickMinSpeed: 20, flickMomentum: 0.40 }, - gestureSettingsPen: { scrollToZoom: false, clickToZoom: true, pinchToZoom: false, flickEnabled: false, flickMinSpeed: 20, flickMomentum: 0.40 }, - gestureSettingsUnknown: { scrollToZoom: false, clickToZoom: false, pinchToZoom: true, flickEnabled: true, flickMinSpeed: 20, flickMomentum: 0.40 }, + gestureSettingsMouse: { scrollToZoom: true, clickToZoom: true, pinchToZoom: false, flickEnabled: false, flickMinSpeed: 120, flickMomentum: 0.25 }, + gestureSettingsTouch: { scrollToZoom: false, clickToZoom: false, pinchToZoom: true, flickEnabled: true, flickMinSpeed: 120, flickMomentum: 0.25 }, + gestureSettingsPen: { scrollToZoom: false, clickToZoom: true, pinchToZoom: false, flickEnabled: false, flickMinSpeed: 120, flickMomentum: 0.25 }, + gestureSettingsUnknown: { scrollToZoom: false, clickToZoom: false, pinchToZoom: true, flickEnabled: true, flickMinSpeed: 120, flickMomentum: 0.25 }, zoomPerClick: 2, zoomPerScroll: 1.2, zoomPerSecond: 1.0, From 765df51bd3235f01c7f42a3ca30689de96a994b7 Mon Sep 17 00:00:00 2001 From: Mark Salsbery Date: Sun, 20 Apr 2014 21:25:29 -0700 Subject: [PATCH 2/4] Stiffened the spring --- src/openseadragon.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/openseadragon.js b/src/openseadragon.js index ccf4e630..289201ff 100644 --- a/src/openseadragon.js +++ b/src/openseadragon.js @@ -274,7 +274,7 @@ * If a mouse or touch drag occurs and the distance to the starting drag * point is less than this many pixels, ignore the drag event. * - * @property {Number} [springStiffness=5.0] + * @property {Number} [springStiffness=6.5] * * @property {Number} [animationTime=1.2] * Specifies the animation duration per each {@link OpenSeadragon.Spring} @@ -891,7 +891,7 @@ window.OpenSeadragon = window.OpenSeadragon || function( options ){ //UI RESPONSIVENESS AND FEEL clickTimeThreshold: 300, clickDistThreshold: 5, - springStiffness: 5.0, + springStiffness: 6.5, animationTime: 1.2, gestureSettingsMouse: { scrollToZoom: true, clickToZoom: true, pinchToZoom: false, flickEnabled: false, flickMinSpeed: 120, flickMomentum: 0.25 }, gestureSettingsTouch: { scrollToZoom: false, clickToZoom: false, pinchToZoom: true, flickEnabled: true, flickMinSpeed: 120, flickMomentum: 0.25 }, From d9dfd0a435ea93e3e01b76fac4e0f36c06a60fb8 Mon Sep 17 00:00:00 2001 From: Mark Salsbery Date: Wed, 23 Apr 2014 08:07:48 -0700 Subject: [PATCH 3/4] iOS touch enter/exit fix --- src/viewer.js | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/viewer.js b/src/viewer.js index bd01afe3..6bd8dad3 100644 --- a/src/viewer.js +++ b/src/viewer.js @@ -402,6 +402,7 @@ $.Viewer = function( options ) { clickDistThreshold: this.clickDistThreshold, enterHandler: $.delegate( this, onContainerEnter ), exitHandler: $.delegate( this, onContainerExit ), + pressHandler: $.delegate( this, onContainerPress ), releaseHandler: $.delegate( this, onContainerRelease ) }).setTracking( this.mouseNavEnabled ? true : false ); // always tracking @@ -2498,8 +2499,15 @@ function onContainerExit( event ) { }); } +function onContainerPress( event ) { + if ( event.pointerType === 'touch' && !$.MouseTracker.haveTouchEnter ) { + THIS[ this.hash ].mouseInside = true; + abortControlsAutoHide( this ); + } +} + function onContainerRelease( event ) { - if ( !event.insideElementReleased ) { + if ( !event.insideElementReleased || ( event.pointerType === 'touch' && !$.MouseTracker.haveTouchEnter ) ) { THIS[ this.hash ].mouseInside = false; if ( !THIS[ this.hash ].animating ) { beginControlsAutoHide( this ); From bd52f387883c0305c52f8aa4400273117db9bcd7 Mon Sep 17 00:00:00 2001 From: Mark Salsbery Date: Wed, 23 Apr 2014 08:38:55 -0700 Subject: [PATCH 4/4] iOS touch enter/exit fix for BUttonGroup --- src/buttongroup.js | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/buttongroup.js b/src/buttongroup.js index b8e92119..a05e9084 100644 --- a/src/buttongroup.js +++ b/src/buttongroup.js @@ -103,9 +103,17 @@ $.ButtonGroup = function( options ) { } } }, + pressHandler: function ( event ) { + if ( event.pointerType === 'touch' && !$.MouseTracker.haveTouchEnter ) { + var i; + for ( i = 0; i < _this.buttons.length; i++ ) { + _this.buttons[ i ].notifyGroupEnter(); + } + } + }, releaseHandler: function ( event ) { var i; - if ( !event.insideElementReleased ) { + if ( !event.insideElementReleased || ( event.pointerType === 'touch' && !$.MouseTracker.haveTouchEnter ) ) { for ( i = 0; i < _this.buttons.length; i++ ) { _this.buttons[ i ].notifyGroupExit(); }