Skip to content

Commit fbc67f2

Browse files
committed
fix: gestures
1 parent 591a753 commit fbc67f2

File tree

1 file changed

+65
-5
lines changed

1 file changed

+65
-5
lines changed

packages/canvas/Canvas/common.ts

Lines changed: 65 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -422,13 +422,75 @@ export abstract class CanvasBase extends View implements ICanvasBase {
422422
}
423423
break;
424424
case 'move':
425-
// NOOP
425+
if (event.state === GestureStateTypes.began || event.state === GestureStateTypes.changed) {
426+
const numberOfPointers = this._pointerCountFromEvent(event);
427+
if (numberOfPointers >= 2) {
428+
hasPointerMove = this.hasListeners('pointermove');
429+
hasTouchMove = this.hasListeners('touchmove');
430+
let data = {};
431+
432+
if (hasPointerMove || hasTouchMove) {
433+
const positions = this._positionsFromEvent(event);
434+
extraData = {
435+
numberOfPointers,
436+
positions,
437+
x: positions[0],
438+
y: positions[1]
439+
}
440+
441+
const dx = extraData.positions[2] - extraData.positions[0];
442+
const dy = extraData.positions[3] - extraData.positions[1];
443+
let delta = 0;
444+
445+
const distance = Math.sqrt(dx * dx + dy * dy);
446+
if (this._previousPinchDistance) {
447+
delta = this._previousPinchDistance - distance;
448+
}
449+
this._previousPinchDistance = distance;
450+
451+
const x = dx; //event.getFocusX();
452+
const y = dy; //event.getFocusY();
453+
const scale = event.scale;
454+
455+
data = {
456+
deltaMode: 0,
457+
clientX: x,
458+
clientY: y,
459+
screenX: x,
460+
screenY: y,
461+
deltaX: 0,
462+
deltaY: delta,
463+
deltaZ: 0,
464+
};
465+
}
466+
467+
if (hasPointerMove) {
468+
const count = extraData.numberOfPointers;
469+
const positions = extraData.positions;
470+
for (let i = 0; i < count; i++) {
471+
let x = positions[i] - extraData.x;
472+
let y = positions[i + 1] - extraData.y;
473+
this.notify({
474+
...this._createPointerEvent('pointermove', { ...extraData, x, y }),
475+
pointerId: this._pointers[i].id
476+
});
477+
}
478+
}
479+
480+
if (hasTouchMove) {
481+
this.notify(
482+
this._createTouchEvent('touchmove', { ...extraData, data })
483+
);
484+
}
485+
}
486+
}
487+
426488
break;
427489
default:
428490
break;
429491
}
430492
} else if (event.eventName === 'pinch') {
431-
const numberOfPointers = this._pointerCountFromEvent(event);
493+
/*const numberOfPointers = this._pointerCountFromEvent(event);
432494
if (!this._isPinching && numberOfPointers >= 2 && (event.state === GestureStateTypes.began || event.state === GestureStateTypes.changed)) {
433495
this._previousPinchDistance = 0;
434496
this._isPinching = true;
@@ -492,12 +554,10 @@ export abstract class CanvasBase extends View implements ICanvasBase {
492554
this._createTouchEvent('touchmove', { ...extraData, data })
493555
);
494556
}
495-
496-
497557
}
498558
if (event.state === GestureStateTypes.ended || event.state === GestureStateTypes.cancelled) {
499559
this._isPinching = false;
500-
}
560+
} */
501561
}
502562
else if (event.eventName === 'pan') {
503563
if (this._isPinching) {

0 commit comments

Comments
 (0)