@@ -2905,46 +2905,57 @@ export var Tegaki = {
2905
2905
} ,
2906
2906
2907
2907
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" ) ;
2910
2910
self . nuclearRemoveTouchHandlersBecauseSafariSucks ( obj ) ;
2911
2911
2912
2912
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 ;
2913
2923
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 ;
2916
2926
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
+ } ) ;
2918
2945
2919
2946
let scrollXStart = 0 ;
2920
2947
let scrollYStart = 0 ;
2921
2948
2922
- let pinchZoomStart = 0 ;
2923
-
2924
- self . hammerManager . on ( 'panstart' , ( event ) => {
2949
+ self . hammerManager . on ( 'panstart' , ( ) => {
2925
2950
Tegaki . isPainting = false ;
2926
2951
scrollXStart = obj . scrollLeft ;
2927
2952
scrollYStart = obj . scrollTop ;
2928
2953
} ) ;
2929
2954
2930
- self . hammerManager . on ( 'panmove' , ( event ) => {
2955
+ self . hammerManager . on ( 'panmove' , ( ev ) => {
2931
2956
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 ;
2948
2959
} ) ;
2949
2960
} ,
2950
2961
0 commit comments