Skip to content

Commit f57267b

Browse files
committed
fix: switch to panning with 2 fingers. make zooming a bit better too.
1 parent 5bc0a13 commit f57267b

File tree

1 file changed

+36
-25
lines changed

1 file changed

+36
-25
lines changed

PinkSea.Frontend/src/api/tegaki/tegaki.js

Lines changed: 36 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -2905,46 +2905,57 @@ export var Tegaki = {
29052905
},
29062906

29072907
initGestures: function() {
2908-
var self = Tegaki;
2909-
var obj = $T.id("tegaki-canvas-cnt");
2908+
const self = Tegaki;
2909+
const obj = $T.id("tegaki-canvas-cnt");
29102910
self.nuclearRemoveTouchHandlersBecauseSafariSucks(obj);
29112911

29122912
self.hammerManager = new Hammer(obj);
2913+
let pan = new Hammer.Pan({ enable: true, pointers: 2, threshold: 0 });
2914+
let pinch = new Hammer.Pinch({ enable: true, threshold: 0.2 });
2915+
pinch.recognizeWith(pan);
2916+
self.hammerManager.add([pan, pinch]);
2917+
2918+
let pinchZoomStart = 0;
2919+
let pinchScrollLeft = 0;
2920+
let pinchScrollTop = 0;
2921+
let pinchCenterX = 0;
2922+
let pinchCenterY = 0;
29132923

2914-
self.hammerManager.get('pinch').set({ enable: true, threshold: 0 });
2915-
self.hammerManager.get('pan').set({ enable: true, pointers: 3, threshold: 0 });
2924+
self.hammerManager.on('pinchstart', (ev) => {
2925+
pinchZoomStart = self.zoomFactor;
29162926

2917-
console.log("hammer init ", obj);
2927+
pinchScrollLeft = obj.scrollLeft;
2928+
pinchScrollTop = obj.scrollTop;
2929+
2930+
const rect = obj.getBoundingClientRect();
2931+
pinchCenterX = ev.center.x - rect.left + obj.scrollLeft;
2932+
pinchCenterY = ev.center.y - rect.top + obj.scrollTop;
2933+
});
2934+
2935+
self.hammerManager.on('pinchmove', (ev) => {
2936+
let newZoom = pinchZoomStart * ev.scale;
2937+
newZoom = Math.max(0.5, Math.min(10, newZoom));
2938+
let scaleRatio = newZoom / pinchZoomStart;
2939+
2940+
obj.scrollLeft = pinchScrollLeft + pinchCenterX * (scaleRatio - 1);
2941+
obj.scrollTop = pinchScrollTop + pinchCenterY * (scaleRatio - 1);
2942+
2943+
self.setZoomFactorRaw(newZoom);
2944+
});
29182945

29192946
let scrollXStart = 0;
29202947
let scrollYStart = 0;
29212948

2922-
let pinchZoomStart = 0;
2923-
2924-
self.hammerManager.on('panstart', (event) => {
2949+
self.hammerManager.on('panstart', () => {
29252950
Tegaki.isPainting = false;
29262951
scrollXStart = obj.scrollLeft;
29272952
scrollYStart = obj.scrollTop;
29282953
});
29292954

2930-
self.hammerManager.on('panmove', (event) => {
2955+
self.hammerManager.on('panmove', (ev) => {
29312956
Tegaki.isPainting = false;
2932-
obj.scrollLeft = scrollXStart - event.deltaX;
2933-
obj.scrollTop = scrollYStart - event.deltaY;
2934-
});
2935-
2936-
self.hammerManager.on('pinchstart', (event) => {
2937-
pinchZoomStart = self.zoomFactor;
2938-
});
2939-
2940-
self.hammerManager.on('pinchmove', (event) => {
2941-
let newZoom = pinchZoomStart * event.scale;
2942-
if (newZoom < 0.5) {
2943-
newZoom = 0.5;
2944-
} else if (newZoom > 10) {
2945-
newZoom = 10;
2946-
}
2947-
self.setZoomFactorRaw(newZoom);
2957+
obj.scrollLeft = scrollXStart - ev.deltaX;
2958+
obj.scrollTop = scrollYStart - ev.deltaY;
29482959
});
29492960
},
29502961

0 commit comments

Comments
 (0)