Multi-Touch MouseTracker Update

This commit is contained in:
Mark Salsbery 2014-03-14 10:42:22 -07:00
parent c7ea247baa
commit 38cae86659
2 changed files with 79 additions and 24 deletions

View File

@ -201,7 +201,9 @@
touchstart: function ( event ) { onTouchStart( _this, event ); },
touchmove: function ( event ) { onTouchMove( _this, event ); },
touchend: function ( event ) { onTouchEnd( _this, event ); },
tracking: false,
gesturestart: function ( event ) { onGestureStart( _this, event ); },
gesturechange: function ( event ) { onGestureChange( _this, event ); },
tracking: false,
capturing: false,
// Contact Points
mousePoints: {},
@ -614,7 +616,7 @@
$.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" );
$.MouseTracker.subscribeEvents.push( "touchstart", "touchmove", "touchend", "gesturestart", "gesturechange" );
}
$.MouseTracker.mousePointerId = "legacy-mouse";
$.MouseTracker.maxTouchPoints = 10;
@ -1168,10 +1170,10 @@
}
if ( $.MouseTracker.unprefixedPointerEvents ) {
event.target.setPointerCapture(event.pointerId);
event.currentTarget.setPointerCapture(event.pointerId);
}
else {
event.target.msSetPointerCapture(event.pointerId);
event.currentTarget.msSetPointerCapture(event.pointerId);
}
time = $.now();
@ -1193,9 +1195,12 @@
addPointers( tracker, event, [pointer] );
if ( tracker.pressHandler || tracker.dragHandler || tracker.pinchHandler || tracker.swipeHandler ) {
$.cancelEvent( event );
}
//if ( tracker.pressHandler || tracker.dragHandler || tracker.pinchHandler || tracker.swipeHandler ) {
// $.cancelEvent(event);
event.stopPropagation();
event.preventDefault();
return false;
//}
}
@ -1266,10 +1271,10 @@
}
if ( $.MouseTracker.unprefixedPointerEvents ) {
event.target.releasePointerCapture(event.pointerId);
event.currentTarget.releasePointerCapture(event.pointerId);
}
else {
event.target.msReleasePointerCapture(event.pointerId);
event.currentTarget.msReleasePointerCapture(event.pointerId);
}
time = $.now();
@ -1289,7 +1294,14 @@
currentTime: time
};
removePointers( tracker, event, [pointer] );
removePointers(tracker, event, [pointer]);
//if ( tracker.pressHandler || tracker.dragHandler || tracker.pinchHandler || tracker.swipeHandler ) {
// $.cancelEvent(event);
event.stopPropagation();
event.preventDefault();
return false;
//}
}
@ -1388,7 +1400,14 @@
currentTime: time
};
updatePointers( tracker, event, [pointer] );
updatePointers(tracker, event, [pointer]);
//if ( tracker.pressHandler || tracker.dragHandler || tracker.pinchHandler || tracker.swipeHandler ) {
// $.cancelEvent(event);
event.stopPropagation();
event.preventDefault();
return false;
//}
}
@ -1511,7 +1530,9 @@
addPointers( tracker, event, pointers );
event.stopPropagation();
event.preventDefault();
return false;
////****************************************************************
// var touchA,
// touchB;
@ -1597,7 +1618,9 @@
updatePointersOut( tracker, event, [pointer] );
}
event.stopPropagation();
event.preventDefault();
return false;
//****************************************************************************************
// if ( event.touches.length === 0 &&
// event.targetTouches.length === 0 &&
@ -1652,7 +1675,9 @@
updatePointers( tracker, event, pointers );
event.stopPropagation();
event.preventDefault();
return false;
//*******************************************************************************
// var touchA,
// touchB,
@ -1705,6 +1730,28 @@
}
/**
* @private
* @inner
*/
function onGestureStart( tracker, event ) {
event.stopPropagation();
event.preventDefault();
return false;
}
/**
* @private
* @inner
*/
function onGestureChange( tracker, event ) {
event.stopPropagation();
event.preventDefault();
return false;
}
//*******************************************************************************************************************************************
//** Event Processing Functions
@ -2157,18 +2204,17 @@
gesturePoints.push( delegate.touchPoints[ p ] );
}
delta = gesturePoints[0].currentPos.distanceTo( gesturePoints[1].currentPos );
//if ( delta != delegate.currentPinchDist ) {
if (delta != delegate.currentPinchDist && Math.abs(delta - delegate.lastPinchDist) > 75) {
if ( delta != delegate.currentPinchDist ) {
delegate.lastPinchDist = delegate.currentPinchDist;
delegate.currentPinchDist = delta;
propagate = tracker.pinchHandler(
{
eventSource: tracker,
position: getPointRelative( updatePointer.currentPos, tracker.element ),
delta: delegate.currentPinchDist - delegate.lastPinchDist,
shift: event.shiftKey,
isTouchEvent: curPointer.type === 'touch',
gesturePoints: gesturePoints,
center: getPointRelative( new $.Point( ( gesturePoints[0].currentPos.x + gesturePoints[1].currentPos.x ) / 2,
( gesturePoints[0].currentPos.y + gesturePoints[1].currentPos.y ) / 2 ) ),
lastDistance: delegate.lastPinchDist,
currentDistance: delegate.currentPinchDist,
originalEvent: event,
preventDefaultAction: false,
userData: tracker.userData

View File

@ -1850,12 +1850,21 @@ function onCanvasScroll( event ) {
}
function onCanvasPinch(event) {
//{
// eventSource: tracker,
// gesturePoints: gesturePoints,
// center: getPointRelative( new $.Point( ( gesturePoints[0].currentPos.x + gesturePoints[1].currentPos.x ) / 2,
// ( gesturePoints[0].currentPos.y + gesturePoints[1].currentPos.y ) / 2 ) ),
// lastDistance: delegate.lastPinchDist,
// currentDistance: delegate.currentPinchDist,
// originalEvent: event,
// preventDefaultAction: false,
// userData: tracker.userData
//}
if (!event.preventDefaultAction && this.viewport) {
//TODO This is temporary for testing. Zoom should track pinch gesture one-to-one, around center point!
this.viewport.zoomBy(
( event.delta > 0 ) ? 1.2 : 0.8,
this.viewport.pointFromPixel(event.position, true)
);
//TODO This is temporary for testing. Zoom should track pinch gesture one-to-one!
this.viewport.zoomBy( event.currentDistance / event.lastDistance,
this.viewport.pointFromPixel( event.center, true ) );
this.viewport.applyConstraints();
}
/**
@ -1883,7 +1892,7 @@ function onCanvasPinch(event) {
return false;
}
function onContainerExit(event) {
function onContainerExit( event ) {
if ( !event.insideElementPressed ) {
THIS[ this.hash ].mouseInside = false;
if ( !THIS[ this.hash ].animating ) {