diff --git a/src/mousetracker.js b/src/mousetracker.js
index 27610fc8..879e1a0a 100644
--- a/src/mousetracker.js
+++ b/src/mousetracker.js
@@ -45,6 +45,37 @@
// dictionary from hash to private properties
THIS = {};
+
+ /**
+ * Represents a point of contact on the screen made by a mouse cursor, pen, touch, or other pointing device.
+ *
+ * @typedef {Object} GesturePoint
+ * @memberof OpenSeadragon.MouseTracker
+ *
+ * @property {Number} id
+ * Identifier unique from all other active GesturePoints for a given pointer device.
+ * @property {String} type
+ * "mouse", "touch", "pen", or "".
+ * @property {Boolean} isCaptured
+ * True if input for the pointer is captured to the tracked element.
+ * @property {Boolean} insideElementPressed
+ * True if mouse button pressed or contact point initiated inside the screen area of the tracked element.
+ * @property {Boolean} insideElement
+ * True if mouse cursor or contact point is currently inside the screen area of the tracked element.
+ * @property {OpenSeadragon.Point} startPos
+ * The initial pointer position, relative to the page including any scrolling.
+ * @property {Number} startTime
+ * The initial pointer contact time, in milliseconds.
+ * @property {OpenSeadragon.Point} lastPos
+ * The last pointer position, relative to the page including any scrolling.
+ * @property {Number} lastTime
+ * The last pointer contact time, in milliseconds.
+ * @property {OpenSeadragon.Point} currentPos
+ * The current pointer position, relative to the page including any scrolling.
+ * @property {Number} currentTime
+ * The current pointer contact time, in milliseconds.
+ */
+
/**
* @class MouseTracker
* @classdesc Provides simplified handling of common mouse, touch, and keyboard
@@ -173,37 +204,46 @@
keypress: function ( event ) { onKeyPress( _this, event ); },
focus: function ( event ) { onFocus( _this, event ); },
blur: function ( event ) { onBlur( _this, event ); },
+
wheel: function ( event ) { onWheel( _this, event ); },
mousewheel: function ( event ) { onMouseWheel( _this, event ); },
DOMMouseScroll: function ( event ) { onMouseWheel( _this, event ); },
MozMousePixelScroll: function ( event ) { onMouseWheel( _this, event ); },
- pointerover: function ( event ) { onPointerOver( _this, event ); },
- MSPointerOver: function ( event ) { onPointerOver( _this, event ); },
+
mouseover: function ( event ) { onMouseOver( _this, event ); },
- pointerout: function ( event ) { onPointerOut( _this, event ); },
- MSPointerOut: function ( event ) { onPointerOut( _this, event ); },
mouseout: function ( event ) { onMouseOut( _this, event ); },
- pointerdown: function ( event ) { onPointerDown( _this, event ); },
- MSPointerDown: function ( event ) { onPointerDown( _this, event ); },
mousedown: function ( event ) { onMouseDown( _this, event ); },
- pointerup: function ( event ) { onPointerUp( _this, event ); },
- MSPointerUp: function ( event ) { onPointerUp( _this, event ); },
mouseup: function ( event ) { onMouseUp( _this, event ); },
- pointermove: function ( event ) { onPointerMove( _this, event ); },
- MSPointerMove: function ( event ) { onPointerMove( _this, event ); },
- mousemove: function ( event ) { onMouseMove( _this, event ); },
- pointercancel: function ( event ) { onPointerCancel( _this, event ); },
- MSPointerCancel: function ( event ) { onPointerCancel( _this, event ); },
- mouseupcapturedie: function ( event ) { onMouseUpCapturedIE( _this, event ); },
- mousemovecapturedie: function ( event ) { onMouseMoveCapturedIE( _this, event ); },
mouseupcaptured: function ( event ) { onMouseUpCaptured( _this, event ); },
+ mouseupcapturedie: function ( event ) { onMouseUpCapturedIE( _this, event ); },
+ mousemove: function ( event ) { onMouseMove( _this, event ); },
mousemovecaptured: function ( event ) { onMouseMoveCaptured( _this, event ); },
+ mousemovecapturedie: function ( event ) { onMouseMoveCapturedIE( _this, event ); },
+
+ touchenter: function ( event ) { onTouchEnter( _this, event ); },
+ touchleave: function ( event ) { onTouchLeave( _this, event ); },
touchstart: function ( event ) { onTouchStart( _this, event ); },
- touchmove: function ( event ) { onTouchMove( _this, event ); },
touchend: function ( event ) { onTouchEnd( _this, event ); },
+ touchmove: function ( event ) { onTouchMove( _this, event ); },
+ touchcancel: function ( event ) { onTouchCancel( _this, event ); },
+
gesturestart: function ( event ) { onGestureStart( _this, event ); },
gesturechange: function ( event ) { onGestureChange( _this, event ); },
- tracking: false,
+
+ pointerover: function ( event ) { onPointerOver( _this, event ); },
+ MSPointerOver: function ( event ) { onPointerOver( _this, event ); },
+ pointerout: function ( event ) { onPointerOut( _this, event ); },
+ MSPointerOut: function ( event ) { onPointerOut( _this, event ); },
+ pointerdown: function ( event ) { onPointerDown( _this, event ); },
+ MSPointerDown: function ( event ) { onPointerDown( _this, event ); },
+ pointerup: function ( event ) { onPointerUp( _this, event ); },
+ MSPointerUp: function ( event ) { onPointerUp( _this, event ); },
+ pointermove: function ( event ) { onPointerMove( _this, event ); },
+ MSPointerMove: function ( event ) { onPointerMove( _this, event ); },
+ pointercancel: function ( event ) { onPointerCancel( _this, event ); },
+ MSPointerCancel: function ( event ) { onPointerCancel( _this, event ); },
+
+ tracking: false,
capturing: false,
// Contact Points
mousePoints: {},
@@ -213,7 +253,7 @@
penPoints: {},
penPointCount: 0,
// Tracking for pinch gesture
- pinchGesturePoints: [],
+ pinchGPoints: [],
lastPinchDist: 0,
currentPinchDist: 0,
lastPinchCenter: null,
@@ -273,6 +313,8 @@
* @param {Object} event
* @param {OpenSeadragon.MouseTracker} event.eventSource
* A reference to the tracker instance.
+ * @param {String} pointerType
+ * "mouse", "touch", "pen", or "".
* @param {OpenSeadragon.Point} event.position
* The position of the event relative to the tracked element.
* @param {Boolean} event.insideElementPressed
@@ -281,7 +323,7 @@
* @param {Boolean} event.buttonDownAny
* Was the button down anywhere in the screen during the event.
* @param {Boolean} event.isTouchEvent
- * True if the original event is a touch event, otherwise false. Deprecated. Examine originalEvent instead.
+ * True if the original event is a touch event, otherwise false. Deprecated. Use pointerType and/or originalEvent instead.
* @param {Object} event.originalEvent
* The original event object.
* @param {Boolean} event.preventDefaultAction
@@ -298,6 +340,8 @@
* @param {Object} event
* @param {OpenSeadragon.MouseTracker} event.eventSource
* A reference to the tracker instance.
+ * @param {String} pointerType
+ * "mouse", "touch", "pen", or "".
* @param {OpenSeadragon.Point} event.position
* The position of the event relative to the tracked element.
* @param {Boolean} event.insideElementPressed
@@ -306,7 +350,7 @@
* @param {Boolean} event.buttonDownAny
* Was the button down anywhere in the screen during the event.
* @param {Boolean} event.isTouchEvent
- * True if the original event is a touch event, otherwise false. Deprecated. Examine originalEvent instead.
+ * True if the original event is a touch event, otherwise false. Deprecated. Use pointerType and/or originalEvent instead.
* @param {Object} event.originalEvent
* The original event object.
* @param {Boolean} event.preventDefaultAction
@@ -323,10 +367,12 @@
* @param {Object} event
* @param {OpenSeadragon.MouseTracker} event.eventSource
* A reference to the tracker instance.
+ * @param {String} pointerType
+ * "mouse", "touch", "pen", or "".
* @param {OpenSeadragon.Point} event.position
* The position of the event relative to the tracked element.
* @param {Boolean} event.isTouchEvent
- * True if the original event is a touch event, otherwise false. Deprecated. Examine originalEvent instead.
+ * True if the original event is a touch event, otherwise false. Deprecated. Use pointerType and/or originalEvent instead.
* @param {Object} event.originalEvent
* The original event object.
* @param {Boolean} event.preventDefaultAction
@@ -343,6 +389,8 @@
* @param {Object} event
* @param {OpenSeadragon.MouseTracker} event.eventSource
* A reference to the tracker instance.
+ * @param {String} pointerType
+ * "mouse", "touch", "pen", or "".
* @param {OpenSeadragon.Point} event.position
* The position of the event relative to the tracked element.
* @param {Boolean} event.insideElementPressed
@@ -351,7 +399,7 @@
* @param {Boolean} event.insideElementReleased
* True if the cursor still inside the tracked element when the button was released.
* @param {Boolean} event.isTouchEvent
- * True if the original event is a touch event, otherwise false. Deprecated. Examine originalEvent instead.
+ * True if the original event is a touch event, otherwise false. Deprecated. Use pointerType and/or originalEvent instead.
* @param {Object} event.originalEvent
* The original event object.
* @param {Boolean} event.preventDefaultAction
@@ -368,10 +416,12 @@
* @param {Object} event
* @param {OpenSeadragon.MouseTracker} event.eventSource
* A reference to the tracker instance.
+ * @param {String} pointerType
+ * "mouse", "touch", "pen", or "".
* @param {OpenSeadragon.Point} event.position
* The position of the event relative to the tracked element.
* @param {Boolean} event.isTouchEvent
- * True if the original event is a touch event, otherwise false. Deprecated. Examine originalEvent instead.
+ * True if the original event is a touch event, otherwise false. Deprecated. Use pointerType and/or originalEvent instead.
* @param {Object} event.originalEvent
* The original event object.
* @param {Boolean} event.preventDefaultAction
@@ -388,6 +438,8 @@
* @param {Object} event
* @param {OpenSeadragon.MouseTracker} event.eventSource
* A reference to the tracker instance.
+ * @param {String} pointerType
+ * "mouse", "touch", "pen", or "".
* @param {OpenSeadragon.Point} event.position
* The position of the event relative to the tracked element.
* @param {Number} event.scroll
@@ -395,7 +447,7 @@
* @param {Boolean} event.shift
* True if the shift key was pressed during this event.
* @param {Boolean} event.isTouchEvent
- * True if the original event is a touch event, otherwise false. Deprecated. Examine originalEvent instead.
+ * True if the original event is a touch event, otherwise false. Deprecated. Use pointerType and/or originalEvent instead. Touch devices no longer generate scroll event.
* @param {Object} event.originalEvent
* The original event object.
* @param {Boolean} event.preventDefaultAction
@@ -412,6 +464,8 @@
* @param {Object} event
* @param {OpenSeadragon.MouseTracker} event.eventSource
* A reference to the tracker instance.
+ * @param {String} pointerType
+ * "mouse", "touch", "pen", or "".
* @param {OpenSeadragon.Point} event.position
* The position of the event relative to the tracked element.
* @param {Number} event.quick
@@ -419,7 +473,7 @@
* @param {Boolean} event.shift
* True if the shift key was pressed during this event.
* @param {Boolean} event.isTouchEvent
- * True if the original event is a touch event, otherwise false. Deprecated. Examine originalEvent instead.
+ * True if the original event is a touch event, otherwise false. Deprecated. Use pointerType and/or originalEvent instead.
* @param {Object} event.originalEvent
* The original event object.
* @param {Boolean} event.preventDefaultAction
@@ -436,6 +490,8 @@
* @param {Object} event
* @param {OpenSeadragon.MouseTracker} event.eventSource
* A reference to the tracker instance.
+ * @param {String} pointerType
+ * "mouse", "touch", "pen", or "".
* @param {OpenSeadragon.Point} event.position
* The position of the event relative to the tracked element.
* @param {OpenSeadragon.Point} event.delta
@@ -443,7 +499,7 @@
* @param {Boolean} event.shift
* True if the shift key was pressed during this event.
* @param {Boolean} event.isTouchEvent
- * True if the original event is a touch event, otherwise false. Deprecated. Examine originalEvent instead.
+ * True if the original event is a touch event, otherwise false. Deprecated. Use pointerType and/or originalEvent instead.
* @param {Object} event.originalEvent
* The original event object.
* @param {Boolean} event.preventDefaultAction
@@ -460,6 +516,8 @@
* @param {Object} event
* @param {OpenSeadragon.MouseTracker} event.eventSource
* A reference to the tracker instance.
+ * @param {String} pointerType
+ * "mouse", "touch", "pen", or "".
* @param {OpenSeadragon.Point} event.position
* The position of the event relative to the tracked element.
* @param {OpenSeadragon.Point} event.delta
@@ -467,7 +525,7 @@
* @param {Boolean} event.shift
* True if the shift key was pressed during this event.
* @param {Boolean} event.isTouchEvent
- * True if the original event is a touch event, otherwise false. Deprecated. Examine originalEvent instead.
+ * True if the original event is a touch event, otherwise false. Deprecated. Use pointerType and/or originalEvent instead.
* @param {Object} event.originalEvent
* The original event object.
* @param {Boolean} event.preventDefaultAction
@@ -484,6 +542,8 @@
* @param {Object} event
* @param {OpenSeadragon.MouseTracker} event.eventSource
* A reference to the tracker instance.
+ * @param {String} pointerType
+ * "mouse", "touch", "pen", or "".
* @param {OpenSeadragon.Point} event.position
* The position of the event relative to the tracked element.
* @param {OpenSeadragon.Point} event.delta
@@ -491,7 +551,7 @@
* @param {Boolean} event.shift
* True if the shift key was pressed during this event.
* @param {Boolean} event.isTouchEvent
- * True if the original event is a touch event, otherwise false. Deprecated. Examine originalEvent instead.
+ * True if the original event is a touch event, otherwise false. Deprecated. Use pointerType and/or originalEvent instead.
* @param {Object} event.originalEvent
* The original event object.
* @param {Boolean} event.preventDefaultAction
@@ -508,10 +568,12 @@
* @param {Object} event
* @param {OpenSeadragon.MouseTracker} event.eventSource
* A reference to the tracker instance.
+ * @param {String} pointerType
+ * "mouse", "touch", "pen", or "".
* @param {OpenSeadragon.Point} event.position
* The position of the event relative to the tracked element.
* @param {Boolean} event.isTouchEvent
- * True if the original event is a touch event, otherwise false. Deprecated. Examine originalEvent instead.
+ * True if the original event is a touch event, otherwise false. Deprecated. Use pointerType and/or originalEvent instead.
* @param {Object} event.originalEvent
* The original event object.
* @param {Boolean} event.preventDefaultAction
@@ -584,7 +646,7 @@
'DOMMouseScroll'; // Assume old Firefox
/**
- * Detect browser pointer/touch event model and build appropriate list of events to subscribe to.
+ * Detect browser pointer device event model and build appropriate list of events to subscribe to.
*/
$.MouseTracker.subscribeEvents = [ "click", "keypress", "focus", "blur", $.MouseTracker.wheelEventName ];
@@ -619,7 +681,12 @@
$.MouseTracker.subscribeEvents.push( "mouseover", "mouseout", "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", "touchmove", "touchend", "gesturestart", "gesturechange" );
+ $.MouseTracker.subscribeEvents.push( "touchenter", "touchleave", "touchstart", "touchend", "touchmove", "touchcancel" );
+ }
+ if ( 'ongesturestart' in window ) {
+ // iOS (see https://developer.apple.com/library/safari/documentation/UserExperience/Reference/GestureEventClassReference/GestureEvent/GestureEvent.html)
+ // Subscribe to these to prevent default gesture handling
+ $.MouseTracker.subscribeEvents.push( "gesturestart", "gesturechange" );
}
$.MouseTracker.mousePointerId = "legacy-mouse";
$.MouseTracker.maxTouchPoints = 10;
@@ -1000,95 +1067,35 @@
}
- /**
- * @private
- * @inner
- */
- function onPointerOver( tracker, event ) {
- var time,
- point,
- pointer;
-
- time = $.now();
- point = getMouseAbsolute( event );
-
- pointer = {
- id: event.pointerId,
- type: getPointerType( event ),
- //isCaptured: false,
- //insideElementPressed: true,
- insideElement: true,
- //startPos: point,
- //startTime: time,
- //lastPos: point,
- //lastTime: time,
- currentPos: point,
- currentTime: time
- };
-
- updatePointersOver( tracker, event, [pointer] );
- }
-
-
/**
* @private
* @inner
*/
function onMouseOver( tracker, event ) {
var time,
- point,
- pointer;
+ position,
+ gPoint;
event = $.getEvent(event);
time = $.now();
- point = getMouseAbsolute( event );
+ position = getMouseAbsolute( event );
- pointer = {
+ gPoint = {
id: $.MouseTracker.mousePointerId,
type: 'mouse',
//isCaptured: true,
//insideElementPressed: true,
insideElement: true,
- //startPos: point,
+ //startPos: position,
//startTime: time,
- //lastPos: point,
+ //lastPos: position,
//lastTime: time,
- currentPos: point,
+ currentPos: position,
currentTime: time
};
- updatePointersOver( tracker, event, [pointer] );
- }
-
-
- /**
- * @private
- * @inner
- */
- function onPointerOut( tracker, event ) {
- var time,
- point,
- pointer;
-
- time = $.now();
- point = getMouseAbsolute( event );
-
- pointer = {
- id: event.pointerId,
- type: getPointerType( event ),
- //isCaptured: false,
- //insideElementPressed: true,
- insideElement: false,
- //startPos: point,
- //startTime: time,
- //lastPos: point,
- //lastTime: time,
- currentPos: point,
- currentTime: time
- };
-
- updatePointersOut( tracker, event, [pointer] );
+ updatePointersOver( tracker, event, [gPoint] );
}
@@ -1098,120 +1105,31 @@
*/
function onMouseOut( tracker, event ) {
var time,
- point,
- pointer;
+ position,
+ gPoint;
event = $.getEvent(event);
var eventOrTouchPoint = event;//isTouch ? event.touches[ 0 ] : event;
time = $.now();
- point = getMouseAbsolute( event );
+ position = getMouseAbsolute( event );
- pointer = {
+ gPoint = {
id: $.MouseTracker.mousePointerId,
type: 'mouse',
//isCaptured: true,
//insideElementPressed: true,
insideElement: false,
- //startPos: point,
+ //startPos: position,
//startTime: time,
- //lastPos: point,
+ //lastPos: position,
//lastTime: time,
- currentPos: point,
+ currentPos: position,
currentTime: time
};
- updatePointersOut( tracker, event, [pointer] );
- }
-
-
-//$.MouseTracker.mousePointerId = "legacy-mouse";
-//$.MouseTracker.unprefixedPointerEvents = false;
-//$.MouseTracker.maxTouchPoints = 10;
-// function addPointers( tracker, event, pointers ) {
-// }
-// function updatePointersOver( tracker, event, pointers ) {
-// }
-// function updatePointersOut( tracker, event, pointers ) {
-// }
-// function updatePointers( tracker, event, pointers ) {
-// }
-// function removePointers( tracker, event, pointers ) {
-// }
-// function cancelPointers( tracker, event, pointers ) {
-// }
-//pointer = {
-// id: x, // getPointerType( event )
-// type: '', // 'mouse', 'touch', 'pen', ''
-// isCaptured: false,
-// insideElementPressed: true,
-// insideElement: true,
-// startPos: null, // $.Point getMouseAbsolute( eventOrTouchPoint ); getPointRelative( point, tracker.element )
-// startTime: 0xFFFFFFFF,
-// lastPos: null, // $.Point getMouseAbsolute( eventOrTouchPoint ); getPointRelative( point, tracker.element )
-// lastTime: 0xFFFFFFFF,
-// currentPos: null, // $.Point getMouseAbsolute( eventOrTouchPoint ); getPointRelative( point, tracker.element )
-// currentTime: 0xFFFFFFFF,
-//}
-//var delegate = THIS[ tracker.hash ]
-//delegate.mousePoints: {},
-//delegate.mousePointCount: 0,
-//delegate.touchPoints: {},
-//delegate.touchPointCount: 0,
-//delegate.penPoints: {},
-//delegate.penPointCount: 0
-//
-//var touchPoints = {};
-//touchPoints[event.pointerId] = "test";
-//touchPoints[12345] = "test12345";
-//delete touchPoints[event.pointerId];
- /**
- * @private
- * @inner
- */
- function onPointerDown( tracker, event ) {
- var delegate = THIS[ tracker.hash ],
- time,
- point,
- pointer;
-
- if ( event.button == 2 ) {
- return;
- }
-
- if ( $.MouseTracker.unprefixedPointerEvents ) {
- event.currentTarget.setPointerCapture(event.pointerId);
- }
- else {
- event.currentTarget.msSetPointerCapture(event.pointerId);
- }
-
- time = $.now();
- point = getMouseAbsolute( event );
-
- pointer = {
- id: event.pointerId,
- type: getPointerType( event ),
- isCaptured: true,
- insideElementPressed: true,
- insideElement: true,
- startPos: point,
- startTime: time,
- lastPos: point,
- lastTime: time,
- currentPos: point,
- currentTime: time
- };
-
- addPointers( tracker, event, [pointer] );
-
- //if ( tracker.pressHandler || tracker.dragHandler || tracker.pinchHandler || tracker.swipeHandler ) {
- // $.cancelEvent(event);
- event.stopPropagation();
- event.preventDefault();
- return false;
- //}
+ updatePointersOut( tracker, event, [gPoint] );
}
@@ -1222,8 +1140,8 @@
function onMouseDown( tracker, event ) {
var delegate = THIS[ tracker.hash ],
time,
- point,
- pointer;
+ position,
+ gPoint;
event = $.getEvent(event);
@@ -1232,23 +1150,23 @@
}
time = $.now();
- point = getMouseAbsolute( event );
+ position = getMouseAbsolute( event );
- pointer = {
+ gPoint = {
id: $.MouseTracker.mousePointerId,
type: 'mouse',
isCaptured: true,
insideElementPressed: true,
insideElement: true,
- startPos: point,
+ startPos: position,
startTime: time,
- lastPos: point,
+ lastPos: position,
lastTime: time,
- currentPos: point,
+ currentPos: position,
currentTime: time
};
- addPointers( tracker, event, [pointer] );
+ addPointers( tracker, event, [gPoint] );
if ( tracker.pressHandler || tracker.dragHandler || tracker.pinchHandler || tracker.swipeHandler ) {
$.cancelEvent( event );
@@ -1267,55 +1185,6 @@
}
- /**
- * @private
- * @inner
- */
- function onPointerUp( tracker, event ) {
- var delegate = THIS[ tracker.hash ],
- time,
- point,
- pointer;
-
- if ( event.button == 2 ) {
- return;
- }
-
- if ( $.MouseTracker.unprefixedPointerEvents ) {
- event.currentTarget.releasePointerCapture(event.pointerId);
- }
- else {
- event.currentTarget.msReleasePointerCapture(event.pointerId);
- }
-
- time = $.now();
- point = getMouseAbsolute( event );
-
- pointer = {
- id: event.pointerId,
- type: getPointerType( event ),
- isCaptured: false,
- //insideElementPressed: true,
- //insideElement: true,
- //startPos: point,
- //startTime: time,
- //lastPos: point,
- //lastTime: time,
- currentPos: point,
- currentTime: time
- };
-
- removePointers(tracker, event, [pointer]);
-
- //if ( tracker.pressHandler || tracker.dragHandler || tracker.pinchHandler || tracker.swipeHandler ) {
- // $.cancelEvent(event);
- event.stopPropagation();
- event.preventDefault();
- return false;
- //}
- }
-
-
/**
* @private
* @inner
@@ -1336,9 +1205,9 @@
*/
function onMouseUpCaptured( tracker, event ) {
var delegate = THIS[ tracker.hash ],
- pointer = delegate.mousePoints[ $.MouseTracker.mousePointerId ] || null;
+ gPoint = delegate.mousePoints[ $.MouseTracker.mousePointerId ] || null;
- if ( !pointer.insideElement ) {
+ if ( !gPoint.insideElement ) {
handleMouseUp( tracker, event );
}
@@ -1384,44 +1253,6 @@
}
- /**
- * @private
- * @inner
- */
- function onPointerMove( tracker, event ) {
- // Pointer changed coordinates, button state, pressure, tilt, or contact geometry (e.g. width and height)
- var time,
- point,
- pointer;
-
- time = $.now();
- point = getMouseAbsolute( event );
-
- pointer = {
- id: event.pointerId,
- type: getPointerType( event ),
- //isCaptured: false,
- //insideElementPressed: true,
- //insideElement: true,
- //startPos: point,
- //startTime: time,
- //lastPos: point,
- //lastTime: time,
- currentPos: point,
- currentTime: time
- };
-
- updatePointers(tracker, event, [pointer]);
-
- //if ( tracker.pressHandler || tracker.dragHandler || tracker.pinchHandler || tracker.swipeHandler ) {
- // $.cancelEvent(event);
- event.stopPropagation();
- event.preventDefault();
- return false;
- //}
- }
-
-
/**
* @private
* @inner
@@ -1463,29 +1294,69 @@
* @private
* @inner
*/
- function onPointerCancel( tracker, event ) {
- var //time,
- //point,
- pointer;
+ function onTouchEnter( tracker, event ) {
+ var time,
+ position,
+ i,
+ touchCount = event.changedTouches.length,
+ gPoints = [];
- //time = $.now();
- //point = getMouseAbsolute( event );
+ time = $.now();
- pointer = {
- id: event.pointerId,
- type: getPointerType( event ),
- //isCaptured: false,
- //insideElementPressed: true,
- //insideElement: true,
- //startPos: point,
- //startTime: time,
- //lastPos: point,
- //lastTime: time,
- //currentPos: point,
- //currentTime: time
- };
+ for ( i = 0; i < touchCount; i++ ) {
+ position = getMouseAbsolute( event.changedTouches[ i ] );
- cancelPointers( tracker, event, [pointer] );
+ gPoints.push( {
+ id: event.changedTouches[ i ].identifier,
+ type: 'touch',
+ //isCaptured: false,
+ //insideElementPressed: true,
+ insideElement: true,
+ //startPos: position,
+ //startTime: time,
+ //lastPos: position,
+ //lastTime: time,
+ currentPos: position,
+ currentTime: time
+ } );
+ }
+
+ updatePointersOver( tracker, event, gPoints );
+ }
+
+
+ /**
+ * @private
+ * @inner
+ */
+ function onTouchLeave( tracker, event ) {
+ var time,
+ position,
+ i,
+ touchCount = event.changedTouches.length,
+ gPoints = [];
+
+ time = $.now();
+
+ for ( i = 0; i < touchCount; i++ ) {
+ position = getMouseAbsolute( event.changedTouches[ i ] );
+
+ gPoints.push( {
+ id: event.changedTouches[ i ].identifier,
+ type: 'touch',
+ //isCaptured: false,
+ //insideElementPressed: true,
+ insideElement: false,
+ //startPos: position,
+ //startTime: time,
+ //lastPos: position,
+ //lastTime: time,
+ currentPos: position,
+ currentTime: time
+ } );
+ }
+
+ updatePointersOut( tracker, event, gPoints );
}
@@ -1496,54 +1367,56 @@
function onTouchStart( tracker, event ) {
var delegate = THIS[ tracker.hash ],
time,
- point,
- pointer,
+ position,
+ gPoint,
i,
touchCount = event.changedTouches.length,
- pointers = [];
+ gPoints = [];
time = $.now();
if ( touchCount > 0 && delegate.touchPointCount === 0 ) {
- pointer = {
+ gPoint = {
id: event.changedTouches[ 0 ].identifier,
type: 'touch',
//isCaptured: false,
//insideElementPressed: true,
insideElement: true,
- //startPos: point,
+ //startPos: position,
//startTime: time,
- //lastPos: point,
+ //lastPos: position,
//lastTime: time,
currentPos: getMouseAbsolute( event.changedTouches[ 0 ] ),
currentTime: time
};
- updatePointersOver( tracker, event, [pointer] );
+ updatePointersOver( tracker, event, [gPoint] );
}
for ( i = 0; i < touchCount; i++ ) {
- point = getMouseAbsolute( event.changedTouches[ i ] );
+ position = getMouseAbsolute( event.changedTouches[ i ] );
- pointers.push( {
+ gPoints.push( {
id: event.changedTouches[ i ].identifier,
type: 'touch',
isCaptured: false,
insideElementPressed: true,
insideElement: true,
- startPos: point,
+ startPos: position,
startTime: time,
- lastPos: point,
+ lastPos: position,
lastTime: time,
- currentPos: point,
+ currentPos: position,
currentTime: time
} );
}
- addPointers( tracker, event, pointers );
+ addPointers( tracker, event, gPoints );
- event.stopPropagation();
- event.preventDefault();
- return false;
+ if ( tracker.pressHandler || tracker.dragHandler || tracker.pinchHandler || tracker.swipeHandler ) {
+ $.stopEvent(event);
+ $.cancelEvent(event);
+ return false;
+ }
////****************************************************************
// var touchA,
// touchB;
@@ -1584,54 +1457,56 @@
function onTouchEnd( tracker, event ) {
var delegate = THIS[ tracker.hash ],
time,
- point,
- pointer,
+ position,
+ gPoint,
i,
touchCount = event.changedTouches.length,
- pointers = [];
+ gPoints = [];
time = $.now();
for ( i = 0; i < touchCount; i++ ) {
- point = getMouseAbsolute( event.changedTouches[ i ] );
+ position = getMouseAbsolute( event.changedTouches[ i ] );
- pointers.push( {
+ gPoints.push( {
id: event.changedTouches[ i ].identifier,
type: 'touch',
isCaptured: false,
//insideElementPressed: true,
//insideElement: true,
- //startPos: point,
+ //startPos: position,
//startTime: time,
- //lastPos: point,
+ //lastPos: position,
//lastTime: time,
- currentPos: point,
+ currentPos: position,
currentTime: time
} );
}
- removePointers( tracker, event, pointers );
+ removePointers( tracker, event, gPoints );
if ( touchCount > 0 && delegate.touchPointCount === 0 ) {
- pointer = {
+ gPoint = {
id: event.changedTouches[ 0 ].identifier,
type: 'touch',
//isCaptured: false,
//insideElementPressed: true,
insideElement: false,
- //startPos: point,
+ //startPos: position,
//startTime: time,
- //lastPos: point,
+ //lastPos: position,
//lastTime: time,
currentPos: getMouseAbsolute( event.changedTouches[ 0 ] ),
currentTime: time
};
- updatePointersOut( tracker, event, [pointer] );
+ updatePointersOut( tracker, event, [gPoint] );
}
- event.stopPropagation();
- event.preventDefault();
- return false;
+ if ( tracker.pressHandler || tracker.dragHandler || tracker.pinchHandler || tracker.swipeHandler ) {
+ $.stopEvent(event);
+ $.cancelEvent(event);
+ return false;
+ }
//****************************************************************************************
// if ( event.touches.length === 0 &&
// event.targetTouches.length === 0 &&
@@ -1659,36 +1534,38 @@
*/
function onTouchMove( tracker, event ) {
var time,
- point,
+ position,
i,
touchCount = event.changedTouches.length,
- pointers = [];
+ gPoints = [];
time = $.now();
for ( i = 0; i < touchCount; i++ ) {
- point = getMouseAbsolute( event.changedTouches[ i ] );
+ position = getMouseAbsolute( event.changedTouches[ i ] );
- pointers.push( {
+ gPoints.push( {
id: event.changedTouches[ i ].identifier,
type: 'touch',
//isCaptured: false,
//insideElementPressed: true,
//insideElement: true,
- //startPos: point,
+ //startPos: position,
//startTime: time,
- //lastPos: point,
+ //lastPos: position,
//lastTime: time,
- currentPos: point,
+ currentPos: position,
currentTime: time
} );
}
- updatePointers( tracker, event, pointers );
+ updatePointers( tracker, event, gPoints );
- event.stopPropagation();
- event.preventDefault();
- return false;
+ if ( tracker.pressHandler || tracker.dragHandler || tracker.pinchHandler || tracker.swipeHandler ) {
+ $.stopEvent(event);
+ $.cancelEvent(event);
+ return false;
+ }
//*******************************************************************************
// var touchA,
// touchB,
@@ -1741,6 +1618,41 @@
}
+ /**
+ * @private
+ * @inner
+ */
+ function onTouchCancel( tracker, event ) {
+ var //time,
+ //position,
+ i,
+ touchCount = event.changedTouches.length,
+ gPoints = [];
+
+ //time = $.now();
+
+ for ( i = 0; i < touchCount; i++ ) {
+ //position = getMouseAbsolute( event.changedTouches[ i ] );
+
+ gPoints.push( {
+ id: event.changedTouches[ i ].identifier,
+ type: 'touch',
+ //isCaptured: false,
+ //insideElementPressed: true,
+ //insideElement: true,
+ //startPos: position,
+ //startTime: time,
+ //lastPos: position,
+ //lastTime: time,
+ //currentPos: position,
+ //currentTime: time
+ } );
+ }
+
+ cancelPointers( tracker, event, gPoints );
+ }
+
+
/**
* @private
* @inner
@@ -1763,6 +1675,269 @@
}
+ /**
+ * @private
+ * @inner
+ */
+ function onPointerOver( tracker, event ) {
+ var time,
+ position,
+ gPoint;
+
+ time = $.now();
+ position = getMouseAbsolute( event );
+
+ gPoint = {
+ id: event.pointerId,
+ type: getPointerType( event ),
+ //isCaptured: false,
+ //insideElementPressed: true,
+ insideElement: true,
+ //startPos: position,
+ //startTime: time,
+ //lastPos: position,
+ //lastTime: time,
+ currentPos: position,
+ currentTime: time
+ };
+
+ updatePointersOver( tracker, event, [gPoint] );
+ }
+
+
+ /**
+ * @private
+ * @inner
+ */
+ function onPointerOut( tracker, event ) {
+ var time,
+ position,
+ gPoint;
+
+ time = $.now();
+ position = getMouseAbsolute( event );
+
+ gPoint = {
+ id: event.pointerId,
+ type: getPointerType( event ),
+ //isCaptured: false,
+ //insideElementPressed: true,
+ insideElement: false,
+ //startPos: position,
+ //startTime: time,
+ //lastPos: position,
+ //lastTime: time,
+ currentPos: position,
+ currentTime: time
+ };
+
+ updatePointersOut( tracker, event, [gPoint] );
+ }
+
+
+//$.MouseTracker.mousePointerId = "legacy-mouse";
+//$.MouseTracker.unprefixedPointerEvents = false;
+//$.MouseTracker.maxTouchPoints = 10;
+// function addPointers( tracker, event, gPoints ) {
+// }
+// function updatePointersOver( tracker, event, gPoints ) {
+// }
+// function updatePointersOut( tracker, event, gPoints ) {
+// }
+// function updatePointers( tracker, event, gPoints ) {
+// }
+// function removePointers( tracker, event, gPoints ) {
+// }
+// function cancelPointers( tracker, event, gPoints ) {
+// }
+//pointer = {
+// id: x, // getPointerType( event )
+// type: '', // 'mouse', 'touch', 'pen', ''
+// isCaptured: false,
+// insideElementPressed: true,
+// insideElement: true,
+// startPos: null, // $.Point getMouseAbsolute( eventOrTouchPoint ); getPointRelative( point, tracker.element )
+// startTime: 0xFFFFFFFF,
+// lastPos: null, // $.Point getMouseAbsolute( eventOrTouchPoint ); getPointRelative( point, tracker.element )
+// lastTime: 0xFFFFFFFF,
+// currentPos: null, // $.Point getMouseAbsolute( eventOrTouchPoint ); getPointRelative( point, tracker.element )
+// currentTime: 0xFFFFFFFF,
+//}
+//var delegate = THIS[ tracker.hash ]
+//delegate.mousePoints: {},
+//delegate.mousePointCount: 0,
+//delegate.touchPoints: {},
+//delegate.touchPointCount: 0,
+//delegate.penPoints: {},
+//delegate.penPointCount: 0
+//
+//var touchPoints = {};
+//touchPoints[event.pointerId] = "test";
+//touchPoints[12345] = "test12345";
+//delete touchPoints[event.pointerId];
+ /**
+ * @private
+ * @inner
+ */
+ function onPointerDown( tracker, event ) {
+ var delegate = THIS[ tracker.hash ],
+ time,
+ position,
+ gPoint;
+
+ if ( event.button == 2 ) {
+ return;
+ }
+
+ if ( $.MouseTracker.unprefixedPointerEvents ) {
+ event.currentTarget.setPointerCapture(event.pointerId);
+ }
+ else {
+ event.currentTarget.msSetPointerCapture(event.pointerId);
+ }
+
+ time = $.now();
+ position = getMouseAbsolute( event );
+
+ gPoint = {
+ id: event.pointerId,
+ type: getPointerType( event ),
+ isCaptured: true,
+ insideElementPressed: true,
+ insideElement: true,
+ startPos: position,
+ startTime: time,
+ lastPos: position,
+ lastTime: time,
+ currentPos: position,
+ currentTime: time
+ };
+
+ addPointers( tracker, event, [gPoint] );
+
+ if ( tracker.pressHandler || tracker.dragHandler || tracker.pinchHandler || tracker.swipeHandler ) {
+ $.stopEvent(event);
+ $.cancelEvent(event);
+ return false;
+ }
+ }
+
+
+ /**
+ * @private
+ * @inner
+ */
+ function onPointerUp( tracker, event ) {
+ var delegate = THIS[ tracker.hash ],
+ time,
+ position,
+ gPoint;
+
+ if ( event.button == 2 ) {
+ return;
+ }
+
+ if ( $.MouseTracker.unprefixedPointerEvents ) {
+ event.currentTarget.releasePointerCapture(event.pointerId);
+ }
+ else {
+ event.currentTarget.msReleasePointerCapture(event.pointerId);
+ }
+
+ time = $.now();
+ position = getMouseAbsolute( event );
+
+ gPoint = {
+ id: event.pointerId,
+ type: getPointerType( event ),
+ isCaptured: false,
+ //insideElementPressed: true,
+ //insideElement: true,
+ //startPos: position,
+ //startTime: time,
+ //lastPos: position,
+ //lastTime: time,
+ currentPos: position,
+ currentTime: time
+ };
+
+ removePointers(tracker, event, [gPoint]);
+
+ if ( tracker.pressHandler || tracker.dragHandler || tracker.pinchHandler || tracker.swipeHandler ) {
+ $.stopEvent(event);
+ $.cancelEvent(event);
+ return false;
+ }
+ }
+
+
+ /**
+ * @private
+ * @inner
+ */
+ function onPointerMove( tracker, event ) {
+ // Pointer changed coordinates, button state, pressure, tilt, or contact geometry (e.g. width and height)
+ var time,
+ position,
+ gPoint;
+
+ time = $.now();
+ position = getMouseAbsolute( event );
+
+ gPoint = {
+ id: event.pointerId,
+ type: getPointerType( event ),
+ //isCaptured: false,
+ //insideElementPressed: true,
+ //insideElement: true,
+ //startPos: position,
+ //startTime: time,
+ //lastPos: position,
+ //lastTime: time,
+ currentPos: position,
+ currentTime: time
+ };
+
+ updatePointers(tracker, event, [gPoint]);
+
+ if ( tracker.pressHandler || tracker.dragHandler || tracker.pinchHandler || tracker.swipeHandler ) {
+ $.stopEvent(event);
+ $.cancelEvent(event);
+ return false;
+ }
+ }
+
+
+ /**
+ * @private
+ * @inner
+ */
+ function onPointerCancel( tracker, event ) {
+ var //time,
+ //position,
+ gPoint;
+
+ //time = $.now();
+ //position = getMouseAbsolute( event );
+
+ gPoint = {
+ id: event.pointerId,
+ type: getPointerType( event ),
+ //isCaptured: false,
+ //insideElementPressed: true,
+ //insideElement: true,
+ //startPos: position,
+ //startTime: time,
+ //lastPos: position,
+ //lastTime: time,
+ //currentPos: position,
+ //currentTime: time
+ };
+
+ cancelPointers( tracker, event, [gPoint] );
+ }
+
+
//*******************************************************************************************************************************************
//** Event Processing Functions
@@ -1789,6 +1964,7 @@
propagate = tracker.scrollHandler(
{
eventSource: tracker,
+ pointerType: 'mouse',
position: getMouseRelative( event, tracker.element ),
scroll: nDelta,
shift: event.shiftKey,
@@ -1811,29 +1987,29 @@
*/
function handleMouseMove( tracker, event ) {
var time,
- point,
- pointer;
+ position,
+ gPoint;
event = $.getEvent(event);
time = $.now();
- point = getMouseAbsolute( event );
+ position = getMouseAbsolute( event );
- pointer = {
+ gPoint = {
id: $.MouseTracker.mousePointerId,
type: 'mouse',
//isCaptured: false,
//insideElementPressed: true,
//insideElement: true,
- //startPos: point,
+ //startPos: position,
//startTime: time,
- //lastPos: point,
+ //lastPos: position,
//lastTime: time,
- currentPos: point,
+ currentPos: position,
currentTime: time
};
- updatePointers( tracker, event, [pointer] );
+ updatePointers( tracker, event, [gPoint] );
}
@@ -1843,8 +2019,8 @@
*/
function handleMouseUp( tracker, event ) {
var time,
- point,
- pointer;
+ position,
+ gPoint;
event = $.getEvent(event);
@@ -1853,23 +2029,23 @@
}
time = $.now();
- point = getMouseAbsolute( event );
+ position = getMouseAbsolute( event );
- pointer = {
+ gPoint = {
id: $.MouseTracker.mousePointerId,
type: 'mouse',
isCaptured: false,
//insideElementPressed: true,
//insideElement: true,
- //startPos: point,
+ //startPos: position,
//startTime: time,
- //lastPos: point,
+ //lastPos: position,
//lastTime: time,
- currentPos: point,
+ currentPos: position,
currentTime: time
};
- removePointers( tracker, event, [pointer] );
+ removePointers( tracker, event, [gPoint] );
}
@@ -1881,6 +2057,7 @@
if ( tracker.stopHandler ) {
tracker.stopHandler( {
eventSource: tracker,
+ pointerType: '',
position: getMouseRelative( originalMoveEvent, tracker.element ),
isTouchEvent: false,
originalEvent: originalMoveEvent,
@@ -1894,17 +2071,17 @@
//$.MouseTracker.mousePointerId = "legacy-mouse";
//$.MouseTracker.unprefixedPointerEvents = false;
//$.MouseTracker.maxTouchPoints = 10;
-// function addPointers( tracker, event, pointers ) {
+// function addPointers( tracker, event, gPoints ) {
// }
-// function updatePointersOver( tracker, event, pointers ) {
+// function updatePointersOver( tracker, event, gPoints ) {
// }
-// function updatePointersOut( tracker, event, pointers ) {
+// function updatePointersOut( tracker, event, gPoints ) {
// }
-// function updatePointers( tracker, event, pointers ) {
+// function updatePointers( tracker, event, gPoints ) {
// }
-// function removePointers( tracker, event, pointers ) {
+// function removePointers( tracker, event, gPoints ) {
// }
-// function cancelPointers( tracker, event, pointers ) {
+// function cancelPointers( tracker, event, gPoints ) {
// }
//pointer = {
// id: x, // getPointerType( event )
@@ -1936,44 +2113,44 @@
* @private
* @inner
*/
- function addPointers( tracker, event, pointers ) {
+ function addPointers( tracker, event, gPoints ) {
var delegate = THIS[ tracker.hash ],
propagate,
dispatchPress = false,
i,
- pointerCount = pointers.length,
- curPointer;
+ gPointCount = gPoints.length,
+ curGPoint;
- for ( i = 0; i < pointerCount; i++ ) {
- curPointer = pointers[ i ];
- if ( curPointer.type === 'mouse' ) {
+ for ( i = 0; i < gPointCount; i++ ) {
+ curGPoint = gPoints[ i ];
+ if ( curGPoint.type === 'mouse' ) {
if ( !delegate.mousePointCount ) {
- delegate.mousePoints[ curPointer.id ] = curPointer;
+ delegate.mousePoints[ curGPoint.id ] = curGPoint;
delegate.mousePointCount++;
dispatchPress = true;
}
}
- else if ( curPointer.type === 'touch' ) {
+ else if ( curGPoint.type === 'touch' ) {
if ( !delegate.touchPointCount ) {
dispatchPress = true;
}
- if ( !delegate.touchPoints[ curPointer.id ] ) {
- delegate.touchPoints[ curPointer.id ] = curPointer;
+ if ( !delegate.touchPoints[ curGPoint.id ] ) {
+ delegate.touchPoints[ curGPoint.id ] = curGPoint;
delegate.touchPointCount++;
if ( delegate.touchPointCount == 2 && tracker.pinchHandler ) {
// Initialize for pinch gesture tracking
- delegate.pinchGesturePoints = [];
+ delegate.pinchGPoints = [];
for ( var p in delegate.touchPoints ) {
- delegate.pinchGesturePoints.push( delegate.touchPoints[ p ] );
+ delegate.pinchGPoints.push( delegate.touchPoints[ p ] );
}
- delegate.lastPinchDist = delegate.currentPinchDist = delegate.pinchGesturePoints[0].currentPos.distanceTo( delegate.pinchGesturePoints[1].currentPos );
- delegate.lastPinchCenter = delegate.currentPinchCenter = getCenterPoint( delegate.pinchGesturePoints[0].currentPos, delegate.pinchGesturePoints[1].currentPos );
+ delegate.lastPinchDist = delegate.currentPinchDist = delegate.pinchGPoints[0].currentPos.distanceTo( delegate.pinchGPoints[1].currentPos );
+ delegate.lastPinchCenter = delegate.currentPinchCenter = getCenterPoint( delegate.pinchGPoints[0].currentPos, delegate.pinchGPoints[1].currentPos );
}
}
}
- else if ( curPointer.type === 'pen' ) {
+ else if ( curGPoint.type === 'pen' ) {
if ( !delegate.penPointCount ) {
- delegate.penPoints[ curPointer.id ] = curPointer;
+ delegate.penPoints[ curGPoint.id ] = curGPoint;
delegate.penPointCount++;
dispatchPress = true;
}
@@ -1983,8 +2160,9 @@
propagate = tracker.pressHandler(
{
eventSource: tracker,
- position: getPointRelative( curPointer.startPos, tracker.element ),
- isTouchEvent: curPointer.type === 'touch',
+ pointerType: curGPoint.type,
+ position: getPointRelative( curGPoint.startPos, tracker.element ),
+ isTouchEvent: curGPoint.type === 'touch',
originalEvent: event,
preventDefaultAction: false,
userData: tracker.userData
@@ -2002,37 +2180,37 @@
* @private
* @inner
*/
- function updatePointersOver( tracker, event, pointers ) {
+ function updatePointersOver( tracker, event, gPoints ) {
var delegate = THIS[ tracker.hash ],
i,
- pointerCount = pointers.length,
- curPointer,
- updatePointer,
+ gPointCount = gPoints.length,
+ curGPoint,
+ updateGPoint,
insideElementPressed,
propagate;
- for ( i = 0; i < pointerCount; i++ ) {
- curPointer = pointers[ i ];
- if ( curPointer.type === 'mouse' ) {
- updatePointer = delegate.mousePoints[ curPointer.id ] || null;
+ for ( i = 0; i < gPointCount; i++ ) {
+ curGPoint = gPoints[ i ];
+ if ( curGPoint.type === 'mouse' ) {
+ updateGPoint = delegate.mousePoints[ curGPoint.id ] || null;
}
- else if ( curPointer.type === 'touch' ) {
- updatePointer = delegate.touchPoints[ curPointer.id ] || null;
+ else if ( curGPoint.type === 'touch' ) {
+ updateGPoint = delegate.touchPoints[ curGPoint.id ] || null;
}
- else if ( curPointer.type === 'pen' ) {
- updatePointer = delegate.penPoints[ curPointer.id ] || null;
+ else if ( curGPoint.type === 'pen' ) {
+ updateGPoint = delegate.penPoints[ curGPoint.id ] || null;
}
else {
- updatePointer = null;
+ updateGPoint = null;
}
- if ( updatePointer ) {
- updatePointer.insideElement = true;
- updatePointer.lastPos = updatePointer.currentPos;
- updatePointer.lastTime = updatePointer.currentTime;
- updatePointer.currentPos = curPointer.currentPos;
- updatePointer.currentTime = curPointer.currentTime;
- insideElementPressed = updatePointer.insideElementPressed;
+ if ( updateGPoint ) {
+ updateGPoint.insideElement = true;
+ updateGPoint.lastPos = updateGPoint.currentPos;
+ updateGPoint.lastTime = updateGPoint.currentTime;
+ updateGPoint.currentPos = curGPoint.currentPos;
+ updateGPoint.currentTime = curGPoint.currentTime;
+ insideElementPressed = updateGPoint.insideElementPressed;
}
else {
insideElementPressed = false;
@@ -2042,10 +2220,11 @@
propagate = tracker.enterHandler(
{
eventSource: tracker,
- position: getPointRelative( curPointer.currentPos, tracker.element ),
+ pointerType: curGPoint.type,
+ position: getPointRelative( curGPoint.currentPos, tracker.element ),
insideElementPressed: insideElementPressed,
buttonDownAny: IS_BUTTON_DOWN,
- isTouchEvent: curPointer.type === 'touch',
+ isTouchEvent: curGPoint.type === 'touch',
originalEvent: event,
preventDefaultAction: false,
userData: tracker.userData
@@ -2063,37 +2242,37 @@
* @private
* @inner
*/
- function updatePointersOut( tracker, event, pointers ) {
+ function updatePointersOut( tracker, event, gPoints ) {
var delegate = THIS[ tracker.hash ],
i,
- pointerCount = pointers.length,
- curPointer,
- updatePointer,
+ gPointCount = gPoints.length,
+ curGPoint,
+ updateGPoint,
insideElementPressed,
propagate;
- for ( i = 0; i < pointerCount; i++ ) {
- curPointer = pointers[ i ];
- if ( curPointer.type === 'mouse' ) {
- updatePointer = delegate.mousePoints[ curPointer.id ] || null;
+ for ( i = 0; i < gPointCount; i++ ) {
+ curGPoint = gPoints[ i ];
+ if ( curGPoint.type === 'mouse' ) {
+ updateGPoint = delegate.mousePoints[ curGPoint.id ] || null;
}
- else if ( curPointer.type === 'touch' ) {
- updatePointer = delegate.touchPoints[ curPointer.id ] || null;
+ else if ( curGPoint.type === 'touch' ) {
+ updateGPoint = delegate.touchPoints[ curGPoint.id ] || null;
}
- else if ( curPointer.type === 'pen' ) {
- updatePointer = delegate.penPoints[ curPointer.id ] || null;
+ else if ( curGPoint.type === 'pen' ) {
+ updateGPoint = delegate.penPoints[ curGPoint.id ] || null;
}
else {
- updatePointer = null;
+ updateGPoint = null;
}
- if ( updatePointer ) {
- updatePointer.insideElement = false;
- updatePointer.lastPos = updatePointer.currentPos;
- updatePointer.lastTime = updatePointer.currentTime;
- updatePointer.currentPos = curPointer.currentPos;
- updatePointer.currentTime = curPointer.currentTime;
- insideElementPressed = updatePointer.insideElementPressed;
+ if ( updateGPoint ) {
+ updateGPoint.insideElement = false;
+ updateGPoint.lastPos = updateGPoint.currentPos;
+ updateGPoint.lastTime = updateGPoint.currentTime;
+ updateGPoint.currentPos = curGPoint.currentPos;
+ updateGPoint.currentTime = curGPoint.currentTime;
+ insideElementPressed = updateGPoint.insideElementPressed;
}
else {
insideElementPressed = false;
@@ -2103,10 +2282,11 @@
propagate = tracker.exitHandler(
{
eventSource: tracker,
- position: getPointRelative( curPointer.currentPos, tracker.element ),
+ pointerType: curGPoint.type,
+ position: getPointRelative( curGPoint.currentPos, tracker.element ),
insideElementPressed: insideElementPressed,
buttonDownAny: IS_BUTTON_DOWN,
- isTouchEvent: curPointer.type === 'touch',
+ isTouchEvent: curGPoint.type === 'touch',
originalEvent: event,
preventDefaultAction: false,
userData: tracker.userData
@@ -2125,27 +2305,27 @@
* @private
* @inner
*/
- function updatePointers( tracker, event, pointers ) {
+ function updatePointers( tracker, event, gPoints ) {
// Pointer(s) changed coordinates, button state, pressure, tilt, or contact geometry (e.g. width and height)
var delegate = THIS[ tracker.hash ],
i,
- pointerCount = pointers.length,
- curPointer,
- updatePointer,
+ gPointCount = gPoints.length,
+ curGPoint,
+ updateGPoint,
points,
pointCount,
delta,
propagate;
- if ( pointers[ 0 ].type === 'mouse' ) {
+ if ( gPoints[ 0 ].type === 'mouse' ) {
points = delegate.mousePoints;
pointCount = delegate.mousePointCount;
}
- else if ( pointers[ 0 ].type === 'touch' ) {
+ else if ( gPoints[ 0 ].type === 'touch' ) {
points = delegate.touchPoints;
pointCount = delegate.touchPointCount;
}
- else if ( pointers[ 0 ].type === 'pen' ) {
+ else if ( gPoints[ 0 ].type === 'pen' ) {
points = delegate.penPoints;
pointCount = delegate.penPointCount;
}
@@ -2153,26 +2333,27 @@
points = null;
}
- for ( i = 0; i < pointerCount; i++ ) {
- curPointer = pointers[ i ];
- updatePointer = points ? ( points[ curPointer.id ] || null ) : null;
+ for ( i = 0; i < gPointCount; i++ ) {
+ curGPoint = gPoints[ i ];
+ updateGPoint = points ? ( points[ curGPoint.id ] || null ) : null;
- if ( updatePointer ) {
- updatePointer.lastPos = updatePointer.currentPos;
- updatePointer.lastTime = updatePointer.currentTime;
- updatePointer.currentPos = curPointer.currentPos;
- updatePointer.currentTime = curPointer.currentTime;
+ if ( updateGPoint ) {
+ updateGPoint.lastPos = updateGPoint.currentPos;
+ updateGPoint.lastTime = updateGPoint.currentTime;
+ updateGPoint.currentPos = curGPoint.currentPos;
+ updateGPoint.currentTime = curGPoint.currentTime;
// Drag Gesture
- if ( pointCount == 1 && tracker.dragHandler && !updatePointer.currentPos.equals( updatePointer.lastPos ) ) {
- delta = updatePointer.currentPos.minus( updatePointer.lastPos );
+ if ( pointCount == 1 && tracker.dragHandler && !updateGPoint.currentPos.equals( updateGPoint.lastPos ) ) {
+ delta = updateGPoint.currentPos.minus( updateGPoint.lastPos );
propagate = tracker.dragHandler(
{
eventSource: tracker,
- position: getPointRelative( updatePointer.currentPos, tracker.element ),
+ pointerType: curGPoint.type,
+ position: getPointRelative( updateGPoint.currentPos, tracker.element ),
delta: delta,
shift: event.shiftKey,
- isTouchEvent: curPointer.type === 'touch',
+ isTouchEvent: curGPoint.type === 'touch',
originalEvent: event,
preventDefaultAction: false,
userData: tracker.userData
@@ -2188,8 +2369,9 @@
propagate = tracker.moveHandler(
{
eventSource: tracker,
- position: getPointRelative( curPointer.currentPos, tracker.element ),
- isTouchEvent: curPointer.type === 'touch',
+ pointerType: curGPoint.type,
+ position: getPointRelative( curGPoint.currentPos, tracker.element ),
+ isTouchEvent: curGPoint.type === 'touch',
originalEvent: event,
preventDefaultAction: false,
userData: tracker.userData
@@ -2208,25 +2390,25 @@
}
// Pinch Gesture
- if ( pointers[ 0 ].type === 'touch' && delegate.touchPointCount == 2 && tracker.pinchHandler ) {
+ if ( gPoints[ 0 ].type === 'touch' && delegate.touchPointCount == 2 && tracker.pinchHandler ) {
//gesturePoints = [];
//for ( var p in delegate.touchPoints ) {
// gesturePoints.push( delegate.touchPoints[ p ] );
//}
- delta = delegate.pinchGesturePoints[0].currentPos.distanceTo( delegate.pinchGesturePoints[1].currentPos );
+ delta = delegate.pinchGPoints[0].currentPos.distanceTo( delegate.pinchGPoints[1].currentPos );
if ( delta != delegate.currentPinchDist ) {
delegate.lastPinchDist = delegate.currentPinchDist;
delegate.currentPinchDist = delta;
delegate.lastPinchCenter = delegate.currentPinchCenter;
- delegate.currentPinchCenter = getCenterPoint( delegate.pinchGesturePoints[0].currentPos, delegate.pinchGesturePoints[1].currentPos );
+ delegate.currentPinchCenter = getCenterPoint( delegate.pinchGPoints[0].currentPos, delegate.pinchGPoints[1].currentPos );
propagate = tracker.pinchHandler(
{
eventSource: tracker,
- gesturePoints: delegate.pinchGesturePoints,
+ gesturePoints: delegate.pinchGPoints,
lastCenter: getPointRelative( delegate.lastPinchCenter, tracker.element ),
center: getPointRelative( delegate.currentPinchCenter, tracker.element ),
lastDistance: delegate.lastPinchDist,
- currentDistance: delegate.currentPinchDist,
+ distance: delegate.currentPinchDist,
originalEvent: event,
preventDefaultAction: false,
userData: tracker.userData
@@ -2244,7 +2426,7 @@
* @private
* @inner
*/
- function removePointers( tracker, event, pointers ) {
+ function removePointers( tracker, event, gPoints ) {
var delegate = THIS[ tracker.hash ],
propagate,
//were we inside the tracked element when we were pressed
@@ -2256,59 +2438,59 @@
pressTime,
releasePoint,
i,
- pointerCount = pointers.length,
- curPointer,
- updatePointer;
+ gPointCount = gPoints.length,
+ curGPoint,
+ updateGPoint;
- for ( i = 0; i < pointerCount; i++ ) {
- curPointer = pointers[ i ];
+ for ( i = 0; i < gPointCount; i++ ) {
+ curGPoint = gPoints[ i ];
dispatchRelease = false;
- if ( curPointer.type === 'mouse' ) {
- updatePointer = delegate.mousePoints[ curPointer.id ] || null;
- if ( updatePointer ) {
- pressPoint = updatePointer.startPos;
- pressTime = updatePointer.startTime;
- delete delegate.mousePoints[ curPointer.id ];
+ if ( curGPoint.type === 'mouse' ) {
+ updateGPoint = delegate.mousePoints[ curGPoint.id ] || null;
+ if ( updateGPoint ) {
+ pressPoint = updateGPoint.startPos;
+ pressTime = updateGPoint.startTime;
+ delete delegate.mousePoints[ curGPoint.id ];
delegate.mousePointCount--;
if ( !delegate.mousePointCount ) {
dispatchRelease = true;
- releasePoint = curPointer.currentPos;
+ releasePoint = curGPoint.currentPos;
}
}
}
- else if ( curPointer.type === 'touch' ) {
- updatePointer = delegate.touchPoints[ curPointer.id ] || null;
- if ( updatePointer ) {
- pressPoint = updatePointer.startPos;
- pressTime = updatePointer.startTime;
- delete delegate.touchPoints[ curPointer.id ];
+ else if ( curGPoint.type === 'touch' ) {
+ updateGPoint = delegate.touchPoints[ curGPoint.id ] || null;
+ if ( updateGPoint ) {
+ pressPoint = updateGPoint.startPos;
+ pressTime = updateGPoint.startTime;
+ delete delegate.touchPoints[ curGPoint.id ];
delegate.touchPointCount--;
if ( !delegate.touchPointCount ) {
dispatchRelease = true;
- releasePoint = curPointer.currentPos;
+ releasePoint = curGPoint.currentPos;
}
}
}
- else if ( curPointer.type === 'pen' ) {
- updatePointer = delegate.penPoints[ curPointer.id ] || null;
- if ( updatePointer ) {
- pressPoint = updatePointer.startPos;
- pressTime = updatePointer.startTime;
- delete delegate.penPoints[ curPointer.id ];
+ else if ( curGPoint.type === 'pen' ) {
+ updateGPoint = delegate.penPoints[ curGPoint.id ] || null;
+ if ( updateGPoint ) {
+ pressPoint = updateGPoint.startPos;
+ pressTime = updateGPoint.startTime;
+ delete delegate.penPoints[ curGPoint.id ];
delegate.penPointCount--;
if ( !delegate.penPointCount ) {
dispatchRelease = true;
- releasePoint = curPointer.currentPos;
+ releasePoint = curGPoint.currentPos;
}
}
}
else {
- updatePointer = null;
+ updateGPoint = null;
}
if ( dispatchRelease ) {
- if ( updatePointer ) {
- insideElementPressed = updatePointer.insideElementPressed;
+ if ( updateGPoint ) {
+ insideElementPressed = updateGPoint.insideElementPressed;
insideElementReleased = $.pointInElement( tracker.element, releasePoint );
}
else {
@@ -2320,10 +2502,11 @@
propagate = tracker.releaseHandler(
{
eventSource: tracker,
+ pointerType: curGPoint.type,
position: getPointRelative( releasePoint, tracker.element ),
insideElementPressed: insideElementPressed,
insideElementReleased: insideElementReleased,
- isTouchEvent: curPointer.type === 'touch',
+ isTouchEvent: curGPoint.type === 'touch',
originalEvent: event,
preventDefaultAction: false,
userData: tracker.userData
@@ -2336,18 +2519,19 @@
// Click Gesture
if ( insideElementPressed && insideElementReleased && tracker.clickHandler ) {
- var time = curPointer.currentTime - pressTime,
- distance = pressPoint.distanceTo( curPointer.currentPos ),
+ var time = curGPoint.currentTime - pressTime,
+ distance = pressPoint.distanceTo( curGPoint.currentPos ),
quick = time <= tracker.clickTimeThreshold &&
distance <= tracker.clickDistThreshold;
propagate = tracker.clickHandler(
{
eventSource: tracker,
- position: getPointRelative( curPointer.currentPos, tracker.element ),
+ pointerType: curGPoint.type,
+ position: getPointRelative( curGPoint.currentPos, tracker.element ),
quick: quick,
shift: event.shiftKey,
- isTouchEvent: curPointer.type === 'touch',
+ isTouchEvent: curGPoint.type === 'touch',
originalEvent: event,
preventDefaultAction: false,
userData: tracker.userData
@@ -2366,29 +2550,29 @@
* @private
* @inner
*/
- function cancelPointers( tracker, event, pointers ) {
+ function cancelPointers( tracker, event, gPoints ) {
var delegate = THIS[ tracker.hash ],
i,
- pointerCount = pointers.length,
- curPointer;
+ gPointCount = gPoints.length,
+ curGPoint;
- for ( i = 0; i < pointerCount; i++ ) {
- curPointer = pointers[ i ];
- if ( curPointer.type === 'mouse' ) {
- if ( delegate.mousePoints[ curPointer.id ] ) {
- delete delegate.mousePoints[ curPointer.id ];
+ for ( i = 0; i < gPointCount; i++ ) {
+ curGPoint = gPoints[ i ];
+ if ( curGPoint.type === 'mouse' ) {
+ if ( delegate.mousePoints[ curGPoint.id ] ) {
+ delete delegate.mousePoints[ curGPoint.id ];
delegate.mousePointCount--;
}
}
- else if ( curPointer.type === 'touch' ) {
- if ( delegate.touchPoints[ curPointer.id ] ) {
- delete delegate.touchPoints[ curPointer.id ];
+ else if ( curGPoint.type === 'touch' ) {
+ if ( delegate.touchPoints[ curGPoint.id ] ) {
+ delete delegate.touchPoints[ curGPoint.id ];
delegate.touchPointCount--;
}
}
- else if ( curPointer.type === 'pen' ) {
- if ( delegate.penPoints[ curPointer.id ] ) {
- delete delegate.penPoints[ curPointer.id ];
+ else if ( curGPoint.type === 'pen' ) {
+ if ( delegate.penPoints[ curGPoint.id ] ) {
+ delete delegate.penPoints[ curGPoint.id ];
delegate.penPointCount--;
}
}
diff --git a/src/viewer.js b/src/viewer.js
index 0620866f..790942d0 100644
--- a/src/viewer.js
+++ b/src/viewer.js
@@ -1755,11 +1755,7 @@ function onCanvasDrag( event ) {
if( !this.panVertical ){
event.delta.y = 0;
}
- this.viewport.panBy(
- this.viewport.deltaPointsFromPixels(
- event.delta.negate()
- )
- );
+ this.viewport.panBy( this.viewport.deltaPointsFromPixels( event.delta.negate() ), true );
if( this.constrainDuringPan ){
this.viewport.applyConstraints();
}
@@ -1856,7 +1852,7 @@ function onCanvasPinch(event) {
// lastCenter:
// center:
// lastDistance:
-// currentDistance:
+// distance:
// originalEvent:
// preventDefaultAction:
// userData:
@@ -1864,8 +1860,8 @@ function onCanvasPinch(event) {
if (!event.preventDefaultAction && this.viewport) {
var centerPt = this.viewport.pointFromPixel( event.center, true ),
lastCenterPt = this.viewport.pointFromPixel( event.lastCenter, true );
- this.viewport.zoomBy( event.currentDistance / event.lastDistance, centerPt, true );
- this.viewport.panBy( lastCenterPt.minus( centerPt ), false );
+ this.viewport.zoomBy( event.distance / event.lastDistance, centerPt, true );
+ this.viewport.panBy( lastCenterPt.minus( centerPt ), true );
this.viewport.applyConstraints();
}
/**
@@ -1879,13 +1875,12 @@ function onCanvasPinch(event) {
* @property {OpenSeadragon.Point} position - The position of the event relative to the tracked element.
* @property {Number} delta - The pinch delta for the event.
* @property {Boolean} shift - True if the shift key was pressed during this event.
+ * @property {OpenSeadragon.GesturePoint[]} gesturePoints -
* @property {Object} originalEvent - The original DOM event.
* @property {?Object} userData - Arbitrary subscriber-defined object.
*/
this.raiseEvent('canvas-pinch', {
tracker: event.eventSource,
- position: event.position,
- delta: event.delta,
shift: event.shift,
originalEvent: event.originalEvent
});