From 0d6fca35c114e620d40252df7ad0fb9c46444fc5 Mon Sep 17 00:00:00 2001 From: Mark Salsbery <msalsbery@hotmail.com> Date: Mon, 12 Jan 2015 16:08:26 -0800 Subject: [PATCH] Fix pointer type passed to capturePointer/releasePointer in pointer events model. Remembered to change the test shim as well. --- src/mousetracker.js | 27 ++++++++++++++++----------- test/legacy.mouse.shim.js | 12 ++++++++++-- 2 files changed, 26 insertions(+), 13 deletions(-) diff --git a/src/mousetracker.js b/src/mousetracker.js index 86e23f70..09b3c751 100644 --- a/src/mousetracker.js +++ b/src/mousetracker.js @@ -880,6 +880,7 @@ if ( window.PointerEvent ) { // IE11 and other W3C Pointer Event implementations (see http://www.w3.org/TR/pointerevents) + $.MouseTracker.havePointerEvents = true; $.MouseTracker.subscribeEvents.push( "pointerover", "pointerout", "pointerdown", "pointerup", "pointermove", "pointercancel" ); $.MouseTracker.unprefixedPointerEvents = true; if( navigator.maxTouchPoints ) { @@ -891,6 +892,7 @@ $.MouseTracker.haveMouseEnter = false; } else if ( window.MSPointerEvent ) { // IE10 + $.MouseTracker.havePointerEvents = true; $.MouseTracker.subscribeEvents.push( "MSPointerOver", "MSPointerOut", "MSPointerDown", "MSPointerUp", "MSPointerMove", "MSPointerCancel" ); $.MouseTracker.unprefixedPointerEvents = false; if( navigator.msMaxTouchPoints ) { @@ -902,6 +904,7 @@ $.MouseTracker.haveMouseEnter = false; } else { // Legacy W3C mouse events + $.MouseTracker.havePointerEvents = false; if ( $.Browser.vendor === $.BROWSERS.IE && $.Browser.version < 9 ) { $.MouseTracker.subscribeEvents.push( "mouseenter", "mouseleave" ); $.MouseTracker.haveMouseEnter = true; @@ -1221,7 +1224,14 @@ function getCaptureEventParams( tracker, pointerType ) { var delegate = THIS[ tracker.hash ]; - if ( pointerType === 'mouse' ) { + if ( pointerType === 'pointerevent' ) { + return { + upName: $.MouseTracker.unprefixedPointerEvents ? 'pointerup' : 'MSPointerUp', + upHandler: delegate.pointerupcaptured, + moveName: $.MouseTracker.unprefixedPointerEvents ? 'pointermove' : 'MSPointerMove', + moveHandler: delegate.pointermovecaptured + }; + } else if ( pointerType === 'mouse' ) { return { upName: 'mouseup', upHandler: delegate.mouseupcaptured, @@ -1236,12 +1246,7 @@ moveHandler: delegate.touchmovecaptured }; } else { - return { - upName: $.MouseTracker.unprefixedPointerEvents ? 'pointerup' : 'MSPointerUp', - upHandler: delegate.pointerupcaptured, - moveName: $.MouseTracker.unprefixedPointerEvents ? 'pointermove' : 'MSPointerMove', - moveHandler: delegate.pointermovecaptured - }; + throw new Error( "MouseTracker.getCaptureEventParams: Unknown pointer type." ); } } @@ -1260,7 +1265,7 @@ if ( $.Browser.vendor === $.BROWSERS.IE && $.Browser.version < 9 ) { tracker.element.setCapture( true ); } else { - eventParams = getCaptureEventParams( tracker, pointerType ); + eventParams = getCaptureEventParams( tracker, $.MouseTracker.havePointerEvents ? 'pointerevent' : pointerType ); // We emulate mouse capture by hanging listeners on the document object. // (Note we listen on the capture phase so the captured handlers will get called first) $.addEvent( @@ -1295,7 +1300,7 @@ if ( $.Browser.vendor === $.BROWSERS.IE && $.Browser.version < 9 ) { tracker.element.releaseCapture(); } else { - eventParams = getCaptureEventParams( tracker, pointerType ); + eventParams = getCaptureEventParams( tracker, $.MouseTracker.havePointerEvents ? 'pointerevent' : pointerType ); // We emulate mouse capture by hanging listeners on the document object. // (Note we listen on the capture phase so the captured handlers will get called first) $.removeEvent( @@ -2104,7 +2109,7 @@ if ( updatePointersDown( tracker, event, [ gPoint ], event.button ) ) { $.stopEvent( event ); - capturePointer( tracker, 'pointer' ); + capturePointer( tracker, gPoint.type ); } if ( tracker.clickHandler || tracker.dblClickHandler || tracker.pressHandler || tracker.dragHandler || tracker.dragEndHandler || tracker.pinchHandler ) { @@ -2154,7 +2159,7 @@ }; if ( updatePointersUp( tracker, event, [ gPoint ], event.button ) ) { - releasePointer( tracker, 'pointer' ); + releasePointer( tracker, gPoint.type ); } } diff --git a/test/legacy.mouse.shim.js b/test/legacy.mouse.shim.js index 7a8ff7cc..535f8815 100644 --- a/test/legacy.mouse.shim.js +++ b/test/legacy.mouse.shim.js @@ -11,8 +11,15 @@ $.MouseTracker.subscribeEvents.push( "MozMousePixelScroll" ); } - $.MouseTracker.subscribeEvents.push( "mouseover", "mouseout", "mousedown", "mouseup", "mousemove" ); - $.MouseTracker.haveMouseEnter = false; + $.MouseTracker.havePointerEvents = false; + if ( $.Browser.vendor === $.BROWSERS.IE && $.Browser.version < 9 ) { + $.MouseTracker.subscribeEvents.push( "mouseenter", "mouseleave" ); + $.MouseTracker.haveMouseEnter = true; + } else { + $.MouseTracker.subscribeEvents.push( "mouseover", "mouseout" ); + $.MouseTracker.haveMouseEnter = false; + } + $.MouseTracker.subscribeEvents.push( "mousedown", "mouseup", "mousemove" ); if ( 'ontouchstart' in window ) { // iOS, Android, and other W3c Touch Event implementations (see http://www.w3.org/TR/2011/WD-touch-events-20110505) $.MouseTracker.subscribeEvents.push( "touchstart", "touchend", "touchmove", "touchcancel" ); @@ -33,4 +40,5 @@ $.MouseTracker.mousePointerId = "legacy-mouse"; $.MouseTracker.maxTouchPoints = 10; + }(OpenSeadragon));