in src/common/GestureView.tsx [430:498]
private _sendMultiTouchEvents(e: TouchEventBasic, gestureState: GestureStatePointVelocity,
initializeFromEvent: boolean, isComplete: boolean) {
const p = this._pendingGestureState as Types.MultiTouchGestureState;
let multiTouchEvent: Types.MultiTouchGestureState;
// If the user lifted up one or both fingers, the multitouch gesture
// is halted. Just return the existing gesture state.
if (!e.touches || e.touches.length !== 2) {
multiTouchEvent = p;
p.isComplete = isComplete;
} else {
const centerPageX = (e.touches[0].pageX + e.touches[1].pageX) / 2;
const centerPageY = (e.touches[0].pageY + e.touches[1].pageY) / 2;
const centerClientX = (e.touches[0].locationX + e.touches[1].locationX) / 2;
const centerClientY = (e.touches[0].locationY + e.touches[1].locationY) / 2;
const width = Math.abs(e.touches[0].pageX - e.touches[1].pageX);
const height = Math.abs(e.touches[0].pageY - e.touches[1].pageY);
const distance = this._calcDistance(width, height);
const angle = this._calcAngle(e.touches);
const initialCenterPageX = initializeFromEvent ? centerPageX : p.initialCenterPageX;
const initialCenterPageY = initializeFromEvent ? centerPageY : p.initialCenterPageY;
const initialCenterClientX = initializeFromEvent ? centerClientX : p.initialCenterClientX;
const initialCenterClientY = initializeFromEvent ? centerClientY : p.initialCenterClientY;
const initialWidth = initializeFromEvent ? width : p.initialWidth;
const initialHeight = initializeFromEvent ? height : p.initialHeight;
const initialDistance = initializeFromEvent ? distance : p.initialDistance;
const initialAngle = initializeFromEvent ? angle : p.initialAngle;
const velocityX = initializeFromEvent ? 0 : gestureState.vx;
const velocityY = initializeFromEvent ? 0 : gestureState.vy;
multiTouchEvent = {
initialCenterPageX: initialCenterPageX,
initialCenterPageY: initialCenterPageY,
initialCenterClientX: initialCenterClientX,
initialCenterClientY: initialCenterClientY,
initialWidth: initialWidth,
initialHeight: initialHeight,
initialDistance: initialDistance,
initialAngle: initialAngle,
centerPageX: centerPageX,
centerPageY: centerPageY,
centerClientX: centerClientX,
centerClientY: centerClientY,
velocityX: velocityX,
velocityY: velocityY,
width: width,
height: height,
distance: distance,
angle: angle,
isComplete: isComplete,
timeStamp: e.timeStamp,
isTouch: !GestureView._isActuallyMouseEvent(e),
};
}
if (this.props.onPinchZoom) {
this.props.onPinchZoom(multiTouchEvent);
}
if (this.props.onRotate) {
this.props.onRotate(multiTouchEvent);
}
return multiTouchEvent;
}