react-native-gesture-handler 2.15.0 → 2.16.0
Sign up to get free protection for your applications and to get access to all the features.
- package/RNGestureHandler.podspec +2 -23
- package/android/build.gradle +1 -1
- package/android/noreanimated/src/main/java/com/swmansion/gesturehandler/ReanimatedEventDispatcher.kt +2 -0
- package/android/paper/src/main/java/com/facebook/react/viewmanagers/RNGestureHandlerButtonManagerDelegate.java +9 -0
- package/android/paper/src/main/java/com/facebook/react/viewmanagers/RNGestureHandlerButtonManagerInterface.java +3 -0
- package/android/src/main/java/com/swmansion/gesturehandler/RNGestureHandlerPackage.kt +11 -6
- package/android/src/main/java/com/swmansion/gesturehandler/core/DiagonalDirections.kt +8 -0
- package/android/src/main/java/com/swmansion/gesturehandler/core/FlingGestureHandler.kt +65 -24
- package/android/src/main/java/com/swmansion/gesturehandler/core/GestureHandler.kt +86 -22
- package/android/src/main/java/com/swmansion/gesturehandler/core/GestureHandlerOrchestrator.kt +54 -29
- package/android/src/main/java/com/swmansion/gesturehandler/core/GestureUtils.kt +3 -0
- package/android/src/main/java/com/swmansion/gesturehandler/core/LongPressGestureHandler.kt +5 -1
- package/android/src/main/java/com/swmansion/gesturehandler/core/PanGestureHandler.kt +5 -1
- package/android/src/main/java/com/swmansion/gesturehandler/core/TapGestureHandler.kt +7 -3
- package/android/src/main/java/com/swmansion/gesturehandler/core/Vector.kt +66 -0
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerButtonViewManager.kt +119 -19
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEnabledRootView.kt +2 -2
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEvent.kt +1 -4
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerModule.kt +8 -5
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootHelper.kt +7 -4
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootView.kt +1 -1
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerStateChangeEvent.kt +1 -4
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerTouchEvent.kt +4 -7
- package/android/src/main/java/com/swmansion/gesturehandler/react/eventbuilders/GestureHandlerEventDataBuilder.kt +3 -0
- package/android/src/main/jni/cpp-adapter.cpp +18 -22
- package/apple/Handlers/RNFlingHandler.m +5 -4
- package/apple/Handlers/RNForceTouchHandler.m +3 -1
- package/apple/Handlers/RNHoverHandler.m +2 -1
- package/apple/Handlers/RNLongPressHandler.m +8 -14
- package/apple/Handlers/RNManualHandler.m +1 -0
- package/apple/Handlers/RNNativeViewHandler.mm +9 -7
- package/apple/Handlers/RNPanHandler.m +7 -2
- package/apple/Handlers/RNPinchHandler.m +50 -26
- package/apple/Handlers/RNRotationHandler.m +43 -29
- package/apple/Handlers/RNTapHandler.m +6 -4
- package/apple/RNGestureHandler.h +9 -0
- package/apple/RNGestureHandler.m +41 -4
- package/apple/RNGestureHandlerEvents.h +18 -9
- package/apple/RNGestureHandlerEvents.m +29 -11
- package/apple/RNGestureHandlerManager.h +5 -0
- package/apple/RNGestureHandlerManager.mm +32 -6
- package/apple/RNGestureHandlerModule.h +5 -3
- package/apple/RNGestureHandlerModule.mm +33 -19
- package/apple/RNGestureHandlerPointerType.h +8 -0
- package/lib/commonjs/Directions.js +19 -6
- package/lib/commonjs/Directions.js.map +1 -1
- package/lib/commonjs/PointerType.js +16 -0
- package/lib/commonjs/PointerType.js.map +1 -0
- package/lib/commonjs/RNGestureHandlerModule.web.js +7 -61
- package/lib/commonjs/RNGestureHandlerModule.web.js.map +1 -1
- package/lib/commonjs/components/DrawerLayout.js.map +1 -1
- package/lib/commonjs/components/GestureHandlerRootView.android.js +17 -2
- package/lib/commonjs/components/GestureHandlerRootView.android.js.map +1 -1
- package/lib/commonjs/components/GestureHandlerRootView.js +15 -2
- package/lib/commonjs/components/GestureHandlerRootView.js.map +1 -1
- package/lib/commonjs/components/GestureHandlerRootView.web.js +15 -2
- package/lib/commonjs/components/GestureHandlerRootView.web.js.map +1 -1
- package/lib/commonjs/components/Swipeable.js +3 -1
- package/lib/commonjs/components/Swipeable.js.map +1 -1
- package/lib/commonjs/components/touchables/GenericTouchable.js +1 -0
- package/lib/commonjs/components/touchables/GenericTouchable.js.map +1 -1
- package/lib/commonjs/getShadowNodeFromRef.js +19 -2
- package/lib/commonjs/getShadowNodeFromRef.js.map +1 -1
- package/lib/commonjs/handlers/createHandler.js +5 -0
- package/lib/commonjs/handlers/createHandler.js.map +1 -1
- package/lib/commonjs/handlers/customDirectEventTypes.js +14 -0
- package/lib/commonjs/handlers/customDirectEventTypes.js.map +1 -0
- package/lib/commonjs/handlers/customDirectEventTypes.web.js +11 -0
- package/lib/commonjs/handlers/customDirectEventTypes.web.js.map +1 -0
- package/lib/commonjs/handlers/gestureHandlerCommon.js +13 -2
- package/lib/commonjs/handlers/gestureHandlerCommon.js.map +1 -1
- package/lib/commonjs/handlers/gestures/GestureDetector.js +10 -0
- package/lib/commonjs/handlers/gestures/GestureDetector.js.map +1 -1
- package/lib/commonjs/handlers/gestures/gesture.js.map +1 -1
- package/lib/commonjs/index.js +11 -3
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/mocks.js +2 -0
- package/lib/commonjs/mocks.js.map +1 -1
- package/lib/commonjs/specs/NativeRNGestureHandlerModule.js.map +1 -1
- package/lib/commonjs/specs/RNGestureHandlerButtonNativeComponent.js.map +1 -1
- package/lib/commonjs/web/Gestures.js +66 -0
- package/lib/commonjs/web/Gestures.js.map +1 -0
- package/lib/commonjs/web/constants.js +3 -8
- package/lib/commonjs/web/constants.js.map +1 -1
- package/lib/commonjs/web/handlers/FlingGestureHandler.js +36 -12
- package/lib/commonjs/web/handlers/FlingGestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/GestureHandler.js +10 -5
- package/lib/commonjs/web/handlers/GestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/IGestureHandler.js +2 -0
- package/lib/commonjs/web/handlers/IGestureHandler.js.map +1 -0
- package/lib/commonjs/web/handlers/NativeViewGestureHandler.js +5 -6
- package/lib/commonjs/web/handlers/NativeViewGestureHandler.js.map +1 -1
- package/lib/commonjs/web/interfaces.js +1 -23
- package/lib/commonjs/web/interfaces.js.map +1 -1
- package/lib/commonjs/web/tools/EventManager.js.map +1 -1
- package/lib/commonjs/web/tools/GestureHandlerOrchestrator.js +117 -118
- package/lib/commonjs/web/tools/GestureHandlerOrchestrator.js.map +1 -1
- package/lib/commonjs/web/tools/GestureHandlerWebDelegate.js +10 -5
- package/lib/commonjs/web/tools/GestureHandlerWebDelegate.js.map +1 -1
- package/lib/commonjs/web/tools/InteractionManager.js +12 -3
- package/lib/commonjs/web/tools/InteractionManager.js.map +1 -1
- package/lib/commonjs/web/tools/NodeManager.js.map +1 -1
- package/lib/commonjs/web/tools/PointerEventManager.js +77 -27
- package/lib/commonjs/web/tools/PointerEventManager.js.map +1 -1
- package/lib/commonjs/web/tools/TouchEventManager.js +29 -6
- package/lib/commonjs/web/tools/TouchEventManager.js.map +1 -1
- package/lib/commonjs/web/tools/Vector.js +58 -0
- package/lib/commonjs/web/tools/Vector.js.map +1 -0
- package/lib/commonjs/web/utils.js +14 -0
- package/lib/commonjs/web/utils.js.map +1 -1
- package/lib/commonjs/web_hammer/NodeManager.js.map +1 -1
- package/lib/module/Directions.js +16 -4
- package/lib/module/Directions.js.map +1 -1
- package/lib/module/PointerType.js +9 -0
- package/lib/module/PointerType.js.map +1 -0
- package/lib/module/RNGestureHandlerModule.web.js +2 -39
- package/lib/module/RNGestureHandlerModule.web.js.map +1 -1
- package/lib/module/components/DrawerLayout.js.map +1 -1
- package/lib/module/components/GestureHandlerRootView.android.js +15 -2
- package/lib/module/components/GestureHandlerRootView.android.js.map +1 -1
- package/lib/module/components/GestureHandlerRootView.js +15 -3
- package/lib/module/components/GestureHandlerRootView.js.map +1 -1
- package/lib/module/components/GestureHandlerRootView.web.js +15 -3
- package/lib/module/components/GestureHandlerRootView.web.js.map +1 -1
- package/lib/module/components/Swipeable.js +3 -1
- package/lib/module/components/Swipeable.js.map +1 -1
- package/lib/module/components/touchables/GenericTouchable.js +1 -0
- package/lib/module/components/touchables/GenericTouchable.js.map +1 -1
- package/lib/module/getShadowNodeFromRef.js +19 -2
- package/lib/module/getShadowNodeFromRef.js.map +1 -1
- package/lib/module/handlers/createHandler.js +5 -1
- package/lib/module/handlers/createHandler.js.map +1 -1
- package/lib/module/handlers/customDirectEventTypes.js +3 -0
- package/lib/module/handlers/customDirectEventTypes.js.map +1 -0
- package/lib/module/handlers/customDirectEventTypes.web.js +5 -0
- package/lib/module/handlers/customDirectEventTypes.web.js.map +1 -0
- package/lib/module/handlers/gestureHandlerCommon.js +11 -1
- package/lib/module/handlers/gestureHandlerCommon.js.map +1 -1
- package/lib/module/handlers/gestures/GestureDetector.js +10 -0
- package/lib/module/handlers/gestures/GestureDetector.js.map +1 -1
- package/lib/module/handlers/gestures/gesture.js.map +1 -1
- package/lib/module/index.js +2 -1
- package/lib/module/index.js.map +1 -1
- package/lib/module/mocks.js +2 -0
- package/lib/module/mocks.js.map +1 -1
- package/lib/module/specs/NativeRNGestureHandlerModule.js.map +1 -1
- package/lib/module/specs/RNGestureHandlerButtonNativeComponent.js.map +1 -1
- package/lib/module/web/Gestures.js +39 -0
- package/lib/module/web/Gestures.js.map +1 -0
- package/lib/module/web/constants.js +1 -6
- package/lib/module/web/constants.js.map +1 -1
- package/lib/module/web/handlers/FlingGestureHandler.js +34 -12
- package/lib/module/web/handlers/FlingGestureHandler.js.map +1 -1
- package/lib/module/web/handlers/GestureHandler.js +7 -4
- package/lib/module/web/handlers/GestureHandler.js.map +1 -1
- package/lib/module/web/handlers/IGestureHandler.js +2 -0
- package/lib/module/web/handlers/IGestureHandler.js.map +1 -0
- package/lib/module/web/handlers/NativeViewGestureHandler.js +5 -6
- package/lib/module/web/handlers/NativeViewGestureHandler.js.map +1 -1
- package/lib/module/web/interfaces.js +0 -20
- package/lib/module/web/interfaces.js.map +1 -1
- package/lib/module/web/tools/EventManager.js.map +1 -1
- package/lib/module/web/tools/GestureHandlerOrchestrator.js +116 -117
- package/lib/module/web/tools/GestureHandlerOrchestrator.js.map +1 -1
- package/lib/module/web/tools/GestureHandlerWebDelegate.js +9 -4
- package/lib/module/web/tools/GestureHandlerWebDelegate.js.map +1 -1
- package/lib/module/web/tools/InteractionManager.js +9 -3
- package/lib/module/web/tools/InteractionManager.js.map +1 -1
- package/lib/module/web/tools/NodeManager.js.map +1 -1
- package/lib/module/web/tools/PointerEventManager.js +75 -27
- package/lib/module/web/tools/PointerEventManager.js.map +1 -1
- package/lib/module/web/tools/TouchEventManager.js +28 -6
- package/lib/module/web/tools/TouchEventManager.js.map +1 -1
- package/lib/module/web/tools/Vector.js +47 -0
- package/lib/module/web/tools/Vector.js.map +1 -0
- package/lib/module/web/utils.js +4 -0
- package/lib/module/web/utils.js.map +1 -1
- package/lib/module/web_hammer/NodeManager.js.map +1 -1
- package/lib/typescript/Directions.d.ts +7 -0
- package/lib/typescript/PointerType.d.ts +6 -0
- package/lib/typescript/RNGestureHandlerModule.web.d.ts +4 -39
- package/lib/typescript/components/DrawerLayout.d.ts +1 -2
- package/lib/typescript/components/GestureHandlerRootView.android.d.ts +1 -1
- package/lib/typescript/components/GestureHandlerRootView.d.ts +1 -1
- package/lib/typescript/components/GestureHandlerRootView.web.d.ts +1 -1
- package/lib/typescript/components/touchables/GenericTouchable.d.ts +2 -1
- package/lib/typescript/getShadowNodeFromRef.d.ts +1 -1
- package/lib/typescript/handlers/NativeViewGestureHandler.d.ts +1 -1
- package/lib/typescript/handlers/customDirectEventTypes.d.ts +1 -0
- package/lib/typescript/handlers/customDirectEventTypes.web.d.ts +2 -0
- package/lib/typescript/handlers/gestureHandlerCommon.d.ts +13 -2
- package/lib/typescript/handlers/gestures/GestureDetector.d.ts +2 -1
- package/lib/typescript/handlers/gestures/gesture.d.ts +1 -2
- package/lib/typescript/index.d.ts +2 -1
- package/lib/typescript/mocks.d.ts +1 -0
- package/lib/typescript/specs/NativeRNGestureHandlerModule.d.ts +6 -6
- package/lib/typescript/specs/RNGestureHandlerButtonNativeComponent.d.ts +4 -1
- package/lib/typescript/web/Gestures.d.ts +36 -0
- package/lib/typescript/web/constants.d.ts +1 -6
- package/lib/typescript/web/handlers/FlingGestureHandler.d.ts +3 -3
- package/lib/typescript/web/handlers/GestureHandler.d.ts +12 -9
- package/lib/typescript/web/handlers/IGestureHandler.d.ts +38 -0
- package/lib/typescript/web/handlers/NativeViewGestureHandler.d.ts +1 -0
- package/lib/typescript/web/interfaces.d.ts +9 -16
- package/lib/typescript/web/tools/EventManager.d.ts +15 -12
- package/lib/typescript/web/tools/GestureHandlerDelegate.d.ts +3 -4
- package/lib/typescript/web/tools/GestureHandlerOrchestrator.d.ts +7 -5
- package/lib/typescript/web/tools/GestureHandlerWebDelegate.d.ts +3 -3
- package/lib/typescript/web/tools/InteractionManager.d.ts +6 -6
- package/lib/typescript/web/tools/NodeManager.d.ts +4 -3
- package/lib/typescript/web/tools/PointerEventManager.d.ts +11 -2
- package/lib/typescript/web/tools/TouchEventManager.d.ts +6 -1
- package/lib/typescript/web/tools/Vector.d.ts +15 -0
- package/lib/typescript/web/utils.d.ts +6 -4
- package/lib/typescript/web_hammer/NodeManager.d.ts +1 -1
- package/package.json +2 -1
- package/src/Directions.ts +21 -4
- package/src/PointerType.ts +6 -0
- package/src/RNGestureHandlerModule.web.ts +3 -44
- package/src/components/DrawerLayout.tsx +1 -1
- package/src/components/GestureHandlerRootView.android.tsx +13 -5
- package/src/components/GestureHandlerRootView.tsx +10 -5
- package/src/components/GestureHandlerRootView.web.tsx +10 -5
- package/src/components/Swipeable.tsx +2 -0
- package/src/components/touchables/GenericTouchable.tsx +3 -0
- package/src/getShadowNodeFromRef.ts +28 -6
- package/src/handlers/createHandler.tsx +14 -2
- package/src/handlers/customDirectEventTypes.ts +2 -0
- package/src/handlers/customDirectEventTypes.web.ts +5 -0
- package/src/handlers/gestureHandlerCommon.ts +30 -1
- package/src/handlers/gestures/GestureDetector.tsx +15 -0
- package/src/handlers/gestures/gesture.ts +1 -1
- package/src/index.ts +2 -1
- package/src/mocks.ts +2 -0
- package/src/specs/NativeRNGestureHandlerModule.ts +8 -8
- package/src/specs/RNGestureHandlerButtonNativeComponent.ts +4 -0
- package/src/web/Gestures.ts +41 -0
- package/src/web/constants.ts +1 -7
- package/src/web/handlers/FlingGestureHandler.ts +54 -24
- package/src/web/handlers/GestureHandler.ts +17 -12
- package/src/web/handlers/IGestureHandler.ts +50 -0
- package/src/web/handlers/NativeViewGestureHandler.ts +5 -6
- package/src/web/interfaces.ts +15 -17
- package/src/web/tools/EventManager.ts +16 -14
- package/src/web/tools/GestureHandlerDelegate.ts +3 -4
- package/src/web/tools/GestureHandlerOrchestrator.ts +162 -147
- package/src/web/tools/GestureHandlerWebDelegate.ts +14 -9
- package/src/web/tools/InteractionManager.ts +18 -12
- package/src/web/tools/NodeManager.ts +4 -3
- package/src/web/tools/PointerEventManager.ts +189 -154
- package/src/web/tools/TouchEventManager.ts +128 -120
- package/src/web/tools/Vector.ts +60 -0
- package/src/web/utils.ts +16 -4
- package/src/web_hammer/NodeManager.ts +1 -1
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["EventManager.ts"],"names":["EventManager","constructor","view","activePointersCounter","onPointerDown","_event","onPointerAdd","onPointerUp","onPointerRemove","onPointerMove","onPointerLeave","onPointerEnter","onPointerCancel","onPointerOutOfBounds","onPointerMoveOver","onPointerMoveOut","setOnPointerDown","callback","setOnPointerAdd","setOnPointerUp","setOnPointerRemove","setOnPointerMove","setOnPointerLeave","setOnPointerEnter","setOnPointerCancel","setOnPointerOutOfBounds","setOnPointerMoveOver","setOnPointerMoveOut","markAsInBounds","pointerId","pointersInBounds","indexOf","push","markAsOutOfBounds","index","splice","resetManager"],"mappings":";;;;;;;;;AAAA;
|
1
|
+
{"version":3,"sources":["EventManager.ts"],"names":["EventManager","constructor","view","activePointersCounter","onPointerDown","_event","onPointerAdd","onPointerUp","onPointerRemove","onPointerMove","onPointerLeave","onPointerEnter","onPointerCancel","onPointerOutOfBounds","onPointerMoveOver","onPointerMoveOut","setOnPointerDown","callback","setOnPointerAdd","setOnPointerUp","setOnPointerRemove","setOnPointerMove","setOnPointerLeave","setOnPointerEnter","setOnPointerCancel","setOnPointerOutOfBounds","setOnPointerMoveOver","setOnPointerMoveOut","markAsInBounds","pointerId","pointersInBounds","indexOf","push","markAsOutOfBounds","index","splice","resetManager"],"mappings":";;;;;;;;;AAAA;AAKe,MAAeA,YAAf,CAA+B;AAK5CC,EAAAA,WAAW,CAACC,IAAD,EAAU;AAAA;;AAAA,8CAHkB,EAGlB;;AAAA;;AACnB,SAAKA,IAAL,GAAYA,IAAZ;AACA,SAAKC,qBAAL,GAA6B,CAA7B;AACD;;AAYSC,EAAAA,aAAa,CAACC,MAAD,EAA6B,CAAE;;AAC5CC,EAAAA,YAAY,CAACD,MAAD,EAA6B,CAAE;;AAC3CE,EAAAA,WAAW,CAACF,MAAD,EAA6B,CAAE;;AAC1CG,EAAAA,eAAe,CAACH,MAAD,EAA6B,CAAE;;AAC9CI,EAAAA,aAAa,CAACJ,MAAD,EAA6B,CAAE;;AAC5CK,EAAAA,cAAc,CAACL,MAAD,EAA6B,CAAE,CAzBX,CAyBY;;;AAC9CM,EAAAA,cAAc,CAACN,MAAD,EAA6B,CAAE,CA1BX,CA0BY;;;AAC9CO,EAAAA,eAAe,CAACP,MAAD,EAA6B,CACpD;AACA;AACA;AACA;AACD;;AACSQ,EAAAA,oBAAoB,CAACR,MAAD,EAA6B,CAAE;;AACnDS,EAAAA,iBAAiB,CAACT,MAAD,EAA6B,CAAE;;AAChDU,EAAAA,gBAAgB,CAACV,MAAD,EAA6B,CAAE;;AAElDW,EAAAA,gBAAgB,CAACC,QAAD,EAAuC;AAC5D,SAAKb,aAAL,GAAqBa,QAArB;AACD;;AACMC,EAAAA,eAAe,CAACD,QAAD,EAAuC;AAC3D,SAAKX,YAAL,GAAoBW,QAApB;AACD;;AACME,EAAAA,cAAc,CAACF,QAAD,EAAuC;AAC1D,SAAKV,WAAL,GAAmBU,QAAnB;AACD;;AACMG,EAAAA,kBAAkB,CAACH,QAAD,EAAuC;AAC9D,SAAKT,eAAL,GAAuBS,QAAvB;AACD;;AACMI,EAAAA,gBAAgB,CAACJ,QAAD,EAAuC;AAC5D,SAAKR,aAAL,GAAqBQ,QAArB;AACD;;AACMK,EAAAA,iBAAiB,CAACL,QAAD,EAAuC;AAC7D,SAAKP,cAAL,GAAsBO,QAAtB;AACD;;AACMM,EAAAA,iBAAiB,CAACN,QAAD,EAAuC;AAC7D,SAAKN,cAAL,GAAsBM,QAAtB;AACD;;AACMO,EAAAA,kBAAkB,CAACP,QAAD,EAAuC;AAC9D,SAAKL,eAAL,GAAuBK,QAAvB;AACD;;AACMQ,EAAAA,uBAAuB,CAACR,QAAD,EAAuC;AACnE,SAAKJ,oBAAL,GAA4BI,QAA5B;AACD;;AACMS,EAAAA,oBAAoB,CAACT,QAAD,EAAuC;AAChE,SAAKH,iBAAL,GAAyBG,QAAzB;AACD;;AACMU,EAAAA,mBAAmB,CAACV,QAAD,EAAuC;AAC/D,SAAKF,gBAAL,GAAwBE,QAAxB;AACD;;AAESW,EAAAA,cAAc,CAACC,SAAD,EAA0B;AAChD,QAAI,KAAKC,gBAAL,CAAsBC,OAAtB,CAA8BF,SAA9B,KAA4C,CAAhD,EAAmD;AACjD;AACD;;AAED,SAAKC,gBAAL,CAAsBE,IAAtB,CAA2BH,SAA3B;AACD;;AAESI,EAAAA,iBAAiB,CAACJ,SAAD,EAA0B;AACnD,UAAMK,KAAa,GAAG,KAAKJ,gBAAL,CAAsBC,OAAtB,CAA8BF,SAA9B,CAAtB;;AAEA,QAAIK,KAAK,GAAG,CAAZ,EAAe;AACb;AACD;;AAED,SAAKJ,gBAAL,CAAsBK,MAAtB,CAA6BD,KAA7B,EAAoC,CAApC;AACD;;AAEME,EAAAA,YAAY,GAAS;AAC1B;AACA;AACA;AACA;AACA;AACA;AAEA,SAAKjC,qBAAL,GAA6B,CAA7B;AACA,SAAK2B,gBAAL,GAAwB,EAAxB;AACD;;AAnG2C","sourcesContent":["/* eslint-disable @typescript-eslint/no-empty-function */\nimport { AdaptedEvent, EventTypes, TouchEventType } from '../interfaces';\n\ntype PointerEventCallback = (event: AdaptedEvent) => void;\n\nexport default abstract class EventManager<T> {\n protected readonly view: T;\n protected pointersInBounds: number[] = [];\n protected activePointersCounter: number;\n\n constructor(view: T) {\n this.view = view;\n this.activePointersCounter = 0;\n }\n\n public abstract registerListeners(): void;\n public abstract unregisterListeners(): void;\n\n protected abstract mapEvent(\n event: Event,\n eventType: EventTypes,\n index?: number,\n touchEventType?: TouchEventType\n ): AdaptedEvent;\n\n protected onPointerDown(_event: AdaptedEvent): void {}\n protected onPointerAdd(_event: AdaptedEvent): void {}\n protected onPointerUp(_event: AdaptedEvent): void {}\n protected onPointerRemove(_event: AdaptedEvent): void {}\n protected onPointerMove(_event: AdaptedEvent): void {}\n protected onPointerLeave(_event: AdaptedEvent): void {} // called only when pointer is pressed (or touching)\n protected onPointerEnter(_event: AdaptedEvent): void {} // called only when pointer is pressed (or touching)\n protected onPointerCancel(_event: AdaptedEvent): void {\n // When pointer cancel is triggered and there are more pointers on the view, only one pointer is cancelled\n // Because we want all pointers to be cancelled by that event, we are doing it manually by reseting handler and changing activePointersCounter to 0\n // Events that correspond to removing the pointer (pointerup, touchend) have condition, that they don't perform any action when activePointersCounter\n // is equal to 0. This prevents counter from going to negative values, when pointers are removed from view after one of them has been cancelled\n }\n protected onPointerOutOfBounds(_event: AdaptedEvent): void {}\n protected onPointerMoveOver(_event: AdaptedEvent): void {}\n protected onPointerMoveOut(_event: AdaptedEvent): void {}\n\n public setOnPointerDown(callback: PointerEventCallback): void {\n this.onPointerDown = callback;\n }\n public setOnPointerAdd(callback: PointerEventCallback): void {\n this.onPointerAdd = callback;\n }\n public setOnPointerUp(callback: PointerEventCallback): void {\n this.onPointerUp = callback;\n }\n public setOnPointerRemove(callback: PointerEventCallback): void {\n this.onPointerRemove = callback;\n }\n public setOnPointerMove(callback: PointerEventCallback): void {\n this.onPointerMove = callback;\n }\n public setOnPointerLeave(callback: PointerEventCallback): void {\n this.onPointerLeave = callback;\n }\n public setOnPointerEnter(callback: PointerEventCallback): void {\n this.onPointerEnter = callback;\n }\n public setOnPointerCancel(callback: PointerEventCallback): void {\n this.onPointerCancel = callback;\n }\n public setOnPointerOutOfBounds(callback: PointerEventCallback): void {\n this.onPointerOutOfBounds = callback;\n }\n public setOnPointerMoveOver(callback: PointerEventCallback): void {\n this.onPointerMoveOver = callback;\n }\n public setOnPointerMoveOut(callback: PointerEventCallback): void {\n this.onPointerMoveOut = callback;\n }\n\n protected markAsInBounds(pointerId: number): void {\n if (this.pointersInBounds.indexOf(pointerId) >= 0) {\n return;\n }\n\n this.pointersInBounds.push(pointerId);\n }\n\n protected markAsOutOfBounds(pointerId: number): void {\n const index: number = this.pointersInBounds.indexOf(pointerId);\n\n if (index < 0) {\n return;\n }\n\n this.pointersInBounds.splice(index, 1);\n }\n\n public resetManager(): void {\n // Reseting activePointersCounter is necessary to make gestures such as pinch work properly\n // There are gestures that end when there is still one active pointer (like pinch/rotation)\n // When these gestures end, they are reset, but they still receive events from pointer that is active\n // This causes trouble, since only onPointerDown registers gesture in orchestrator, and while gestures receive\n // Events from active pointer after they finished, next pointerdown event will be registered as additional pointer, not the first one\n // This casues trouble like gestures getting stuck in END state, even though they should have gone to UNDETERMINED\n\n this.activePointersCounter = 0;\n this.pointersInBounds = [];\n }\n}\n"]}
|
@@ -5,9 +5,9 @@ Object.defineProperty(exports, "__esModule", {
|
|
5
5
|
});
|
6
6
|
exports.default = void 0;
|
7
7
|
|
8
|
-
var
|
8
|
+
var _PointerType = require("../../PointerType");
|
9
9
|
|
10
|
-
var
|
10
|
+
var _State = require("../../State");
|
11
11
|
|
12
12
|
var _PointerTracker = _interopRequireDefault(require("./PointerTracker"));
|
13
13
|
|
@@ -23,6 +23,8 @@ class GestureHandlerOrchestrator {
|
|
23
23
|
|
24
24
|
_defineProperty(this, "awaitingHandlers", []);
|
25
25
|
|
26
|
+
_defineProperty(this, "awaitingHandlersTags", new Set());
|
27
|
+
|
26
28
|
_defineProperty(this, "handlingChangeSemaphore", 0);
|
27
29
|
|
28
30
|
_defineProperty(this, "activationIndex", 0);
|
@@ -42,72 +44,103 @@ class GestureHandlerOrchestrator {
|
|
42
44
|
}
|
43
45
|
|
44
46
|
removeHandlerFromOrchestrator(handler) {
|
45
|
-
this.gestureHandlers.
|
46
|
-
this.awaitingHandlers.
|
47
|
+
const indexInGestureHandlers = this.gestureHandlers.indexOf(handler);
|
48
|
+
const indexInAwaitingHandlers = this.awaitingHandlers.indexOf(handler);
|
49
|
+
|
50
|
+
if (indexInGestureHandlers >= 0) {
|
51
|
+
this.gestureHandlers.splice(indexInGestureHandlers, 1);
|
52
|
+
}
|
53
|
+
|
54
|
+
if (indexInAwaitingHandlers >= 0) {
|
55
|
+
this.awaitingHandlers.splice(indexInAwaitingHandlers, 1);
|
56
|
+
this.awaitingHandlersTags.delete(handler.getTag());
|
57
|
+
}
|
47
58
|
}
|
48
59
|
|
49
60
|
cleanupFinishedHandlers() {
|
61
|
+
const handlersToRemove = new Set();
|
62
|
+
|
50
63
|
for (let i = this.gestureHandlers.length - 1; i >= 0; --i) {
|
51
64
|
const handler = this.gestureHandlers[i];
|
52
65
|
|
53
|
-
if (!handler) {
|
54
|
-
continue;
|
55
|
-
}
|
56
|
-
|
57
66
|
if (this.isFinished(handler.getState()) && !handler.isAwaiting()) {
|
58
|
-
this.gestureHandlers.splice(i, 1);
|
59
67
|
this.cleanHandler(handler);
|
68
|
+
handlersToRemove.add(handler);
|
60
69
|
}
|
61
70
|
}
|
71
|
+
|
72
|
+
this.gestureHandlers = this.gestureHandlers.filter(handler => !handlersToRemove.has(handler));
|
62
73
|
}
|
63
74
|
|
64
75
|
hasOtherHandlerToWaitFor(handler) {
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
76
|
+
const hasToWaitFor = otherHandler => {
|
77
|
+
return !this.isFinished(otherHandler.getState()) && this.shouldHandlerWaitForOther(handler, otherHandler);
|
78
|
+
};
|
79
|
+
|
80
|
+
return this.gestureHandlers.some(hasToWaitFor);
|
81
|
+
}
|
82
|
+
|
83
|
+
shouldBeCancelledByFinishedHandler(handler) {
|
84
|
+
const shouldBeCancelled = otherHandler => {
|
85
|
+
return this.shouldHandlerWaitForOther(handler, otherHandler) && otherHandler.getState() === _State.State.END;
|
86
|
+
};
|
87
|
+
|
88
|
+
return this.gestureHandlers.some(shouldBeCancelled);
|
73
89
|
}
|
74
90
|
|
75
91
|
tryActivate(handler) {
|
92
|
+
if (this.shouldBeCancelledByFinishedHandler(handler)) {
|
93
|
+
handler.cancel();
|
94
|
+
return;
|
95
|
+
}
|
96
|
+
|
76
97
|
if (this.hasOtherHandlerToWaitFor(handler)) {
|
77
98
|
this.addAwaitingHandler(handler);
|
78
|
-
|
79
|
-
|
80
|
-
this.makeActive(handler);
|
81
|
-
} else {
|
82
|
-
switch (handler.getState()) {
|
83
|
-
case _State.State.ACTIVE:
|
84
|
-
handler.fail();
|
85
|
-
break;
|
99
|
+
return;
|
100
|
+
}
|
86
101
|
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
102
|
+
const handlerState = handler.getState();
|
103
|
+
|
104
|
+
if (handlerState === _State.State.CANCELLED || handlerState === _State.State.FAILED) {
|
105
|
+
return;
|
106
|
+
}
|
107
|
+
|
108
|
+
if (this.shouldActivate(handler)) {
|
109
|
+
this.makeActive(handler);
|
110
|
+
return;
|
111
|
+
}
|
112
|
+
|
113
|
+
if (handlerState === _State.State.ACTIVE) {
|
114
|
+
handler.fail();
|
115
|
+
return;
|
116
|
+
}
|
117
|
+
|
118
|
+
if (handlerState === _State.State.BEGAN) {
|
119
|
+
handler.cancel();
|
91
120
|
}
|
92
121
|
}
|
93
122
|
|
94
123
|
shouldActivate(handler) {
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
}
|
99
|
-
}
|
124
|
+
const shouldBeCancelledBy = otherHandler => {
|
125
|
+
return this.shouldHandlerBeCancelledBy(handler, otherHandler);
|
126
|
+
};
|
100
127
|
|
101
|
-
return
|
128
|
+
return !this.gestureHandlers.some(shouldBeCancelledBy);
|
102
129
|
}
|
103
130
|
|
104
131
|
cleanupAwaitingHandlers(handler) {
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
132
|
+
const shouldWait = otherHandler => {
|
133
|
+
return !otherHandler.isAwaiting() && this.shouldHandlerWaitForOther(otherHandler, handler);
|
134
|
+
};
|
135
|
+
|
136
|
+
for (const otherHandler of this.awaitingHandlers) {
|
137
|
+
if (shouldWait(otherHandler)) {
|
138
|
+
this.cleanHandler(otherHandler);
|
139
|
+
this.awaitingHandlersTags.delete(otherHandler.getTag());
|
109
140
|
}
|
110
141
|
}
|
142
|
+
|
143
|
+
this.awaitingHandlers = this.awaitingHandlers.filter(otherHandler => this.awaitingHandlersTags.has(otherHandler.getTag()));
|
111
144
|
}
|
112
145
|
|
113
146
|
onHandlerStateChange(handler, newState, oldState, sendIfDisabled) {
|
@@ -118,25 +151,28 @@ class GestureHandlerOrchestrator {
|
|
118
151
|
this.handlingChangeSemaphore += 1;
|
119
152
|
|
120
153
|
if (this.isFinished(newState)) {
|
121
|
-
this.awaitingHandlers
|
122
|
-
if (this.shouldHandlerWaitForOther(otherHandler, handler)) {
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
154
|
+
for (const otherHandler of this.awaitingHandlers) {
|
155
|
+
if (!this.shouldHandlerWaitForOther(otherHandler, handler) || !this.awaitingHandlersTags.has(otherHandler.getTag())) {
|
156
|
+
continue;
|
157
|
+
}
|
158
|
+
|
159
|
+
if (newState !== _State.State.END) {
|
160
|
+
this.tryActivate(otherHandler);
|
161
|
+
continue;
|
162
|
+
}
|
163
|
+
|
164
|
+
otherHandler.cancel();
|
165
|
+
|
166
|
+
if (otherHandler.getState() === _State.State.END) {
|
167
|
+
// Handle edge case, where discrete gestures end immediately after activation thus
|
168
|
+
// their state is set to END and when the gesture they are waiting for activates they
|
169
|
+
// should be cancelled, however `cancel` was never sent as gestures were already in the END state.
|
170
|
+
// Send synthetic BEGAN -> CANCELLED to properly handle JS logic
|
171
|
+
otherHandler.sendEvent(_State.State.CANCELLED, _State.State.BEGAN);
|
138
172
|
}
|
139
|
-
|
173
|
+
|
174
|
+
otherHandler.setAwaiting(false);
|
175
|
+
}
|
140
176
|
}
|
141
177
|
|
142
178
|
if (newState === _State.State.ACTIVE) {
|
@@ -154,7 +190,7 @@ class GestureHandlerOrchestrator {
|
|
154
190
|
this.handlingChangeSemaphore -= 1;
|
155
191
|
this.scheduleFinishedHandlersCleanup();
|
156
192
|
|
157
|
-
if (this.awaitingHandlers.
|
193
|
+
if (!this.awaitingHandlers.includes(handler)) {
|
158
194
|
this.cleanupAwaitingHandlers(handler);
|
159
195
|
}
|
160
196
|
}
|
@@ -171,12 +207,12 @@ class GestureHandlerOrchestrator {
|
|
171
207
|
}
|
172
208
|
}
|
173
209
|
|
174
|
-
this.awaitingHandlers
|
210
|
+
for (const otherHandler of this.awaitingHandlers) {
|
175
211
|
if (this.shouldHandlerBeCancelledBy(otherHandler, handler)) {
|
176
|
-
otherHandler
|
177
|
-
otherHandler === null || otherHandler === void 0 ? void 0 : otherHandler.setAwaiting(true);
|
212
|
+
otherHandler.setAwaiting(false);
|
178
213
|
}
|
179
|
-
}
|
214
|
+
}
|
215
|
+
|
180
216
|
handler.sendEvent(_State.State.ACTIVE, _State.State.BEGAN);
|
181
217
|
|
182
218
|
if (currentState !== _State.State.ACTIVE) {
|
@@ -187,45 +223,27 @@ class GestureHandlerOrchestrator {
|
|
187
223
|
}
|
188
224
|
}
|
189
225
|
|
190
|
-
if (handler.isAwaiting()) {
|
191
|
-
|
192
|
-
|
193
|
-
for (let i = 0; i < this.awaitingHandlers.length; ++i) {
|
194
|
-
if (this.awaitingHandlers[i] === handler) {
|
195
|
-
this.awaitingHandlers.splice(i, 1);
|
196
|
-
}
|
197
|
-
}
|
226
|
+
if (!handler.isAwaiting()) {
|
227
|
+
return;
|
198
228
|
}
|
229
|
+
|
230
|
+
handler.setAwaiting(false);
|
231
|
+
this.awaitingHandlers = this.awaitingHandlers.filter(otherHandler => otherHandler !== handler);
|
199
232
|
}
|
200
233
|
|
201
234
|
addAwaitingHandler(handler) {
|
202
|
-
|
203
|
-
this.awaitingHandlers.forEach(otherHandler => {
|
204
|
-
if (otherHandler === handler) {
|
205
|
-
alreadyExists = true;
|
206
|
-
return;
|
207
|
-
}
|
208
|
-
});
|
209
|
-
|
210
|
-
if (alreadyExists) {
|
235
|
+
if (this.awaitingHandlers.includes(handler)) {
|
211
236
|
return;
|
212
237
|
}
|
213
238
|
|
214
239
|
this.awaitingHandlers.push(handler);
|
240
|
+
this.awaitingHandlersTags.add(handler.getTag());
|
215
241
|
handler.setAwaiting(true);
|
216
242
|
handler.setActivationIndex(this.activationIndex++);
|
217
243
|
}
|
218
244
|
|
219
245
|
recordHandlerIfNotPresent(handler) {
|
220
|
-
|
221
|
-
this.gestureHandlers.forEach(otherHandler => {
|
222
|
-
if (otherHandler === handler) {
|
223
|
-
alreadyExists = true;
|
224
|
-
return;
|
225
|
-
}
|
226
|
-
});
|
227
|
-
|
228
|
-
if (alreadyExists) {
|
246
|
+
if (this.gestureHandlers.includes(handler)) {
|
229
247
|
return;
|
230
248
|
}
|
231
249
|
|
@@ -248,7 +266,7 @@ class GestureHandlerOrchestrator {
|
|
248
266
|
return false;
|
249
267
|
}
|
250
268
|
|
251
|
-
if (handler
|
269
|
+
if (handler.isAwaiting() || handler.getState() === _State.State.ACTIVE) {
|
252
270
|
// For now it always returns false
|
253
271
|
return handler.shouldBeCancelledByOther(otherHandler);
|
254
272
|
}
|
@@ -268,38 +286,19 @@ class GestureHandlerOrchestrator {
|
|
268
286
|
// However, if at least on pointer overlaps with both handlers, we return true
|
269
287
|
// This solves issue in overlapping parents example
|
270
288
|
// TODO: Find better way to handle that issue, for example by activation order and handler cancelling
|
271
|
-
const
|
272
|
-
const otherPointers = otherHandler.getTrackedPointersID();
|
273
|
-
let overlap = false;
|
274
|
-
handlerPointers.forEach(pointer => {
|
289
|
+
const isPointerWithinBothBounds = pointer => {
|
275
290
|
const handlerX = handler.getTracker().getLastX(pointer);
|
276
291
|
const handlerY = handler.getTracker().getLastY(pointer);
|
277
|
-
|
278
|
-
if (handler.getDelegate().isPointerInBounds({
|
292
|
+
const point = {
|
279
293
|
x: handlerX,
|
280
294
|
y: handlerY
|
281
|
-
}
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
|
287
|
-
|
288
|
-
otherPointers.forEach(pointer => {
|
289
|
-
const otherX = otherHandler.getTracker().getLastX(pointer);
|
290
|
-
const otherY = otherHandler.getTracker().getLastY(pointer);
|
291
|
-
|
292
|
-
if (handler.getDelegate().isPointerInBounds({
|
293
|
-
x: otherX,
|
294
|
-
y: otherY
|
295
|
-
}) && otherHandler.getDelegate().isPointerInBounds({
|
296
|
-
x: otherX,
|
297
|
-
y: otherY
|
298
|
-
})) {
|
299
|
-
overlap = true;
|
300
|
-
}
|
301
|
-
});
|
302
|
-
return overlap;
|
295
|
+
};
|
296
|
+
return handler.getDelegate().isPointerInBounds(point) && otherHandler.getDelegate().isPointerInBounds(point);
|
297
|
+
};
|
298
|
+
|
299
|
+
const handlerPointers = handler.getTrackedPointersID();
|
300
|
+
const otherPointers = otherHandler.getTrackedPointersID();
|
301
|
+
return handlerPointers.some(isPointerWithinBothBounds) || otherPointers.some(isPointerWithinBothBounds);
|
303
302
|
}
|
304
303
|
|
305
304
|
isFinished(state) {
|
@@ -314,7 +313,7 @@ class GestureHandlerOrchestrator {
|
|
314
313
|
|
315
314
|
cancelMouseAndPenGestures(currentHandler) {
|
316
315
|
this.gestureHandlers.forEach(handler => {
|
317
|
-
if (handler.getPointerType() !==
|
316
|
+
if (handler.getPointerType() !== _PointerType.PointerType.MOUSE && handler.getPointerType() !== _PointerType.PointerType.STYLUS) {
|
318
317
|
return;
|
319
318
|
}
|
320
319
|
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["GestureHandlerOrchestrator.ts"],"names":["GestureHandlerOrchestrator","constructor","scheduleFinishedHandlersCleanup","handlingChangeSemaphore","cleanupFinishedHandlers","cleanHandler","handler","reset","setActive","setAwaiting","setActivationIndex","Number","MAX_VALUE","removeHandlerFromOrchestrator","gestureHandlers","splice","indexOf","awaitingHandlers","i","length","isFinished","getState","isAwaiting","hasOtherHandlerToWaitFor","hasToWait","forEach","otherHandler","shouldHandlerWaitForOther","tryActivate","addAwaitingHandler","State","CANCELLED","FAILED","shouldActivate","makeActive","ACTIVE","fail","BEGAN","cancel","shouldHandlerBeCancelledBy","cleanupAwaitingHandlers","onHandlerStateChange","newState","oldState","sendIfDisabled","isEnabled","END","sendEvent","isActive","UNDETERMINED","currentState","setShouldResetProgress","activationIndex","alreadyExists","push","recordHandlerIfNotPresent","MAX_SAFE_INTEGER","shouldWaitForHandlerFailure","shouldRequireToWaitForFailure","canRunSimultaneously","gh1","gh2","shouldRecognizeSimultaneously","shouldBeCancelledByOther","handlerPointers","getTrackedPointersID","otherPointers","PointerTracker","shareCommonPointers","getDelegate","getView","checkOverlap","overlap","pointer","handlerX","getTracker","getLastX","handlerY","getLastY","isPointerInBounds","x","y","otherX","otherY","state","cancelMouseAndPenGestures","currentHandler","getPointerType","PointerType","MOUSE","PEN","resetTracker","getInstance","instance"],"mappings":"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","sourcesContent":["import { State } from '../../State';\nimport { PointerType } from '../interfaces';\n\nimport GestureHandler from '../handlers/GestureHandler';\nimport PointerTracker from './PointerTracker';\n\nexport default class GestureHandlerOrchestrator {\n private static instance: GestureHandlerOrchestrator;\n\n private gestureHandlers: GestureHandler[] = [];\n private awaitingHandlers: GestureHandler[] = [];\n\n private handlingChangeSemaphore = 0;\n private activationIndex = 0;\n\n // Private beacuse of Singleton\n // eslint-disable-next-line no-useless-constructor, @typescript-eslint/no-empty-function\n private constructor() {}\n\n private scheduleFinishedHandlersCleanup(): void {\n if (this.handlingChangeSemaphore === 0) {\n this.cleanupFinishedHandlers();\n }\n }\n\n private cleanHandler(handler: GestureHandler): void {\n handler.reset();\n handler.setActive(false);\n handler.setAwaiting(false);\n handler.setActivationIndex(Number.MAX_VALUE);\n }\n\n public removeHandlerFromOrchestrator(handler: GestureHandler): void {\n this.gestureHandlers.splice(this.gestureHandlers.indexOf(handler), 1);\n this.awaitingHandlers.splice(this.awaitingHandlers.indexOf(handler), 1);\n }\n\n private cleanupFinishedHandlers(): void {\n for (let i = this.gestureHandlers.length - 1; i >= 0; --i) {\n const handler = this.gestureHandlers[i];\n\n if (!handler) {\n continue;\n }\n if (this.isFinished(handler.getState()) && !handler.isAwaiting()) {\n this.gestureHandlers.splice(i, 1);\n\n this.cleanHandler(handler);\n }\n }\n }\n\n private hasOtherHandlerToWaitFor(handler: GestureHandler): boolean {\n let hasToWait = false;\n this.gestureHandlers.forEach((otherHandler) => {\n if (\n otherHandler &&\n !this.isFinished(otherHandler.getState()) &&\n this.shouldHandlerWaitForOther(handler, otherHandler)\n ) {\n hasToWait = true;\n return;\n }\n });\n\n return hasToWait;\n }\n\n private tryActivate(handler: GestureHandler): void {\n if (this.hasOtherHandlerToWaitFor(handler)) {\n this.addAwaitingHandler(handler);\n } else if (\n handler.getState() !== State.CANCELLED &&\n handler.getState() !== State.FAILED\n ) {\n if (this.shouldActivate(handler)) {\n this.makeActive(handler);\n } else {\n switch (handler.getState()) {\n case State.ACTIVE:\n handler.fail();\n break;\n case State.BEGAN:\n handler.cancel();\n }\n }\n }\n }\n\n private shouldActivate(handler: GestureHandler): boolean {\n for (const otherHandler of this.gestureHandlers) {\n if (this.shouldHandlerBeCancelledBy(handler, otherHandler)) {\n return false;\n }\n }\n\n return true;\n }\n\n private cleanupAwaitingHandlers(handler: GestureHandler): void {\n for (let i = 0; i < this.awaitingHandlers.length; ++i) {\n if (\n !this.awaitingHandlers[i].isAwaiting() &&\n this.shouldHandlerWaitForOther(this.awaitingHandlers[i], handler)\n ) {\n this.cleanHandler(this.awaitingHandlers[i]);\n this.awaitingHandlers.splice(i, 1);\n }\n }\n }\n\n public onHandlerStateChange(\n handler: GestureHandler,\n newState: State,\n oldState: State,\n sendIfDisabled?: boolean\n ): void {\n if (!handler.isEnabled() && !sendIfDisabled) {\n return;\n }\n\n this.handlingChangeSemaphore += 1;\n\n if (this.isFinished(newState)) {\n this.awaitingHandlers.forEach((otherHandler) => {\n if (this.shouldHandlerWaitForOther(otherHandler, handler)) {\n if (newState === State.END) {\n otherHandler?.cancel();\n if (otherHandler.getState() === State.END) {\n // Handle edge case, where discrete gestures end immediately after activation thus\n // their state is set to END and when the gesture they are waiting for activates they\n // should be cancelled, however `cancel` was never sent as gestures were already in the END state.\n // Send synthetic BEGAN -> CANCELLED to properly handle JS logic\n otherHandler.sendEvent(State.CANCELLED, State.BEGAN);\n }\n otherHandler?.setAwaiting(false);\n } else {\n this.tryActivate(otherHandler);\n }\n }\n });\n }\n\n if (newState === State.ACTIVE) {\n this.tryActivate(handler);\n } else if (oldState === State.ACTIVE || oldState === State.END) {\n if (handler.isActive()) {\n handler.sendEvent(newState, oldState);\n } else if (\n oldState === State.ACTIVE &&\n (newState === State.CANCELLED || newState === State.FAILED)\n ) {\n handler.sendEvent(newState, State.BEGAN);\n }\n } else if (\n oldState !== State.UNDETERMINED ||\n newState !== State.CANCELLED\n ) {\n handler.sendEvent(newState, oldState);\n }\n\n this.handlingChangeSemaphore -= 1;\n\n this.scheduleFinishedHandlersCleanup();\n\n if (this.awaitingHandlers.indexOf(handler) < 0) {\n this.cleanupAwaitingHandlers(handler);\n }\n }\n\n private makeActive(handler: GestureHandler): void {\n const currentState = handler.getState();\n\n handler.setActive(true);\n handler.setShouldResetProgress(true);\n handler.setActivationIndex(this.activationIndex++);\n\n for (let i = this.gestureHandlers.length - 1; i >= 0; --i) {\n if (this.shouldHandlerBeCancelledBy(this.gestureHandlers[i], handler)) {\n this.gestureHandlers[i].cancel();\n }\n }\n\n this.awaitingHandlers.forEach((otherHandler) => {\n if (this.shouldHandlerBeCancelledBy(otherHandler, handler)) {\n otherHandler?.cancel();\n otherHandler?.setAwaiting(true);\n }\n });\n\n handler.sendEvent(State.ACTIVE, State.BEGAN);\n\n if (currentState !== State.ACTIVE) {\n handler.sendEvent(State.END, State.ACTIVE);\n if (currentState !== State.END) {\n handler.sendEvent(State.UNDETERMINED, State.END);\n }\n }\n\n if (handler.isAwaiting()) {\n handler.setAwaiting(false);\n for (let i = 0; i < this.awaitingHandlers.length; ++i) {\n if (this.awaitingHandlers[i] === handler) {\n this.awaitingHandlers.splice(i, 1);\n }\n }\n }\n }\n\n private addAwaitingHandler(handler: GestureHandler): void {\n let alreadyExists = false;\n\n this.awaitingHandlers.forEach((otherHandler) => {\n if (otherHandler === handler) {\n alreadyExists = true;\n return;\n }\n });\n\n if (alreadyExists) {\n return;\n }\n\n this.awaitingHandlers.push(handler);\n\n handler.setAwaiting(true);\n handler.setActivationIndex(this.activationIndex++);\n }\n\n public recordHandlerIfNotPresent(handler: GestureHandler): void {\n let alreadyExists = false;\n\n this.gestureHandlers.forEach((otherHandler) => {\n if (otherHandler === handler) {\n alreadyExists = true;\n return;\n }\n });\n\n if (alreadyExists) {\n return;\n }\n\n this.gestureHandlers.push(handler);\n\n handler.setActive(false);\n handler.setAwaiting(false);\n handler.setActivationIndex(Number.MAX_SAFE_INTEGER);\n }\n\n private shouldHandlerWaitForOther(\n handler: GestureHandler,\n otherHandler: GestureHandler\n ): boolean {\n return (\n handler !== otherHandler &&\n (handler.shouldWaitForHandlerFailure(otherHandler) ||\n otherHandler.shouldRequireToWaitForFailure(handler))\n );\n }\n\n private canRunSimultaneously(\n gh1: GestureHandler,\n gh2: GestureHandler\n ): boolean {\n return (\n gh1 === gh2 ||\n gh1.shouldRecognizeSimultaneously(gh2) ||\n gh2.shouldRecognizeSimultaneously(gh1)\n );\n }\n\n private shouldHandlerBeCancelledBy(\n handler: GestureHandler,\n otherHandler: GestureHandler\n ): boolean {\n if (this.canRunSimultaneously(handler, otherHandler)) {\n return false;\n }\n\n if (\n handler !== otherHandler &&\n (handler.isAwaiting() || handler.getState() === State.ACTIVE)\n ) {\n // For now it always returns false\n return handler.shouldBeCancelledByOther(otherHandler);\n }\n\n const handlerPointers: number[] = handler.getTrackedPointersID();\n const otherPointers: number[] = otherHandler.getTrackedPointersID();\n\n if (\n !PointerTracker.shareCommonPointers(handlerPointers, otherPointers) &&\n handler.getDelegate().getView() !== otherHandler.getDelegate().getView()\n ) {\n return this.checkOverlap(handler, otherHandler);\n }\n\n return true;\n }\n\n private checkOverlap(\n handler: GestureHandler,\n otherHandler: GestureHandler\n ): boolean {\n // If handlers don't have common pointers, default return value is false.\n // However, if at least on pointer overlaps with both handlers, we return true\n // This solves issue in overlapping parents example\n\n // TODO: Find better way to handle that issue, for example by activation order and handler cancelling\n\n const handlerPointers: number[] = handler.getTrackedPointersID();\n const otherPointers: number[] = otherHandler.getTrackedPointersID();\n\n let overlap = false;\n\n handlerPointers.forEach((pointer: number) => {\n const handlerX: number = handler.getTracker().getLastX(pointer);\n const handlerY: number = handler.getTracker().getLastY(pointer);\n\n if (\n handler.getDelegate().isPointerInBounds({ x: handlerX, y: handlerY }) &&\n otherHandler\n .getDelegate()\n .isPointerInBounds({ x: handlerX, y: handlerY })\n ) {\n overlap = true;\n }\n });\n\n otherPointers.forEach((pointer: number) => {\n const otherX: number = otherHandler.getTracker().getLastX(pointer);\n const otherY: number = otherHandler.getTracker().getLastY(pointer);\n\n if (\n handler.getDelegate().isPointerInBounds({ x: otherX, y: otherY }) &&\n otherHandler.getDelegate().isPointerInBounds({ x: otherX, y: otherY })\n ) {\n overlap = true;\n }\n });\n\n return overlap;\n }\n\n private isFinished(state: State): boolean {\n return (\n state === State.END || state === State.FAILED || state === State.CANCELLED\n );\n }\n\n // This function is called when handler receives touchdown event\n // If handler is using mouse or pen as a pointer and any handler receives touch event,\n // mouse/pen event dissappears - it doesn't send onPointerCancel nor onPointerUp (and others)\n // This became a problem because handler was left at active state without any signal to end or fail\n // To handle this, when new touch event is received, we loop through active handlers and check which type of\n // pointer they're using. If there are any handler with mouse/pen as a pointer, we cancel them\n public cancelMouseAndPenGestures(currentHandler: GestureHandler): void {\n this.gestureHandlers.forEach((handler: GestureHandler) => {\n if (\n handler.getPointerType() !== PointerType.MOUSE &&\n handler.getPointerType() !== PointerType.PEN\n ) {\n return;\n }\n\n if (handler !== currentHandler) {\n handler.cancel();\n } else {\n // Handler that received touch event should have its pointer tracker reset\n // This allows handler to smoothly change from mouse/pen to touch\n // The drawback is, that when we try to use mouse/pen one more time, it doesn't send onPointerDown at the first time\n // so it is required to click two times to get handler to work\n //\n // However, handler will receive manually created onPointerEnter that is triggered in EventManager in onPointerMove method.\n // There may be possibility to use that fact to make handler respond properly to first mouse click\n handler.getTracker().resetTracker();\n }\n });\n }\n\n public static getInstance(): GestureHandlerOrchestrator {\n if (!GestureHandlerOrchestrator.instance) {\n GestureHandlerOrchestrator.instance = new GestureHandlerOrchestrator();\n }\n\n return GestureHandlerOrchestrator.instance;\n }\n}\n"]}
|
1
|
+
{"version":3,"sources":["GestureHandlerOrchestrator.ts"],"names":["GestureHandlerOrchestrator","constructor","Set","scheduleFinishedHandlersCleanup","handlingChangeSemaphore","cleanupFinishedHandlers","cleanHandler","handler","reset","setActive","setAwaiting","setActivationIndex","Number","MAX_VALUE","removeHandlerFromOrchestrator","indexInGestureHandlers","gestureHandlers","indexOf","indexInAwaitingHandlers","awaitingHandlers","splice","awaitingHandlersTags","delete","getTag","handlersToRemove","i","length","isFinished","getState","isAwaiting","add","filter","has","hasOtherHandlerToWaitFor","hasToWaitFor","otherHandler","shouldHandlerWaitForOther","some","shouldBeCancelledByFinishedHandler","shouldBeCancelled","State","END","tryActivate","cancel","addAwaitingHandler","handlerState","CANCELLED","FAILED","shouldActivate","makeActive","ACTIVE","fail","BEGAN","shouldBeCancelledBy","shouldHandlerBeCancelledBy","cleanupAwaitingHandlers","shouldWait","onHandlerStateChange","newState","oldState","sendIfDisabled","isEnabled","sendEvent","isActive","UNDETERMINED","includes","currentState","setShouldResetProgress","activationIndex","push","recordHandlerIfNotPresent","MAX_SAFE_INTEGER","shouldWaitForHandlerFailure","shouldRequireToWaitForFailure","canRunSimultaneously","gh1","gh2","shouldRecognizeSimultaneously","shouldBeCancelledByOther","handlerPointers","getTrackedPointersID","otherPointers","PointerTracker","shareCommonPointers","getDelegate","getView","checkOverlap","isPointerWithinBothBounds","pointer","handlerX","getTracker","getLastX","handlerY","getLastY","point","x","y","isPointerInBounds","state","cancelMouseAndPenGestures","currentHandler","forEach","getPointerType","PointerType","MOUSE","STYLUS","resetTracker","getInstance","instance"],"mappings":"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","sourcesContent":["import { PointerType } from '../../PointerType';\nimport { State } from '../../State';\n\nimport type IGestureHandler from '../handlers/IGestureHandler';\nimport PointerTracker from './PointerTracker';\n\nexport default class GestureHandlerOrchestrator {\n private static instance: GestureHandlerOrchestrator;\n\n private gestureHandlers: IGestureHandler[] = [];\n private awaitingHandlers: IGestureHandler[] = [];\n private awaitingHandlersTags: Set<number> = new Set();\n\n private handlingChangeSemaphore = 0;\n private activationIndex = 0;\n\n // Private beacuse of Singleton\n // eslint-disable-next-line no-useless-constructor, @typescript-eslint/no-empty-function\n private constructor() {}\n\n private scheduleFinishedHandlersCleanup(): void {\n if (this.handlingChangeSemaphore === 0) {\n this.cleanupFinishedHandlers();\n }\n }\n\n private cleanHandler(handler: IGestureHandler): void {\n handler.reset();\n handler.setActive(false);\n handler.setAwaiting(false);\n handler.setActivationIndex(Number.MAX_VALUE);\n }\n\n public removeHandlerFromOrchestrator(handler: IGestureHandler): void {\n const indexInGestureHandlers = this.gestureHandlers.indexOf(handler);\n const indexInAwaitingHandlers = this.awaitingHandlers.indexOf(handler);\n\n if (indexInGestureHandlers >= 0) {\n this.gestureHandlers.splice(indexInGestureHandlers, 1);\n }\n\n if (indexInAwaitingHandlers >= 0) {\n this.awaitingHandlers.splice(indexInAwaitingHandlers, 1);\n this.awaitingHandlersTags.delete(handler.getTag());\n }\n }\n\n private cleanupFinishedHandlers(): void {\n const handlersToRemove = new Set<IGestureHandler>();\n\n for (let i = this.gestureHandlers.length - 1; i >= 0; --i) {\n const handler = this.gestureHandlers[i];\n\n if (this.isFinished(handler.getState()) && !handler.isAwaiting()) {\n this.cleanHandler(handler);\n handlersToRemove.add(handler);\n }\n }\n\n this.gestureHandlers = this.gestureHandlers.filter(\n (handler) => !handlersToRemove.has(handler)\n );\n }\n\n private hasOtherHandlerToWaitFor(handler: IGestureHandler): boolean {\n const hasToWaitFor = (otherHandler: IGestureHandler) => {\n return (\n !this.isFinished(otherHandler.getState()) &&\n this.shouldHandlerWaitForOther(handler, otherHandler)\n );\n };\n\n return this.gestureHandlers.some(hasToWaitFor);\n }\n\n private shouldBeCancelledByFinishedHandler(\n handler: IGestureHandler\n ): boolean {\n const shouldBeCancelled = (otherHandler: IGestureHandler) => {\n return (\n this.shouldHandlerWaitForOther(handler, otherHandler) &&\n otherHandler.getState() === State.END\n );\n };\n\n return this.gestureHandlers.some(shouldBeCancelled);\n }\n\n private tryActivate(handler: IGestureHandler): void {\n if (this.shouldBeCancelledByFinishedHandler(handler)) {\n handler.cancel();\n return;\n }\n\n if (this.hasOtherHandlerToWaitFor(handler)) {\n this.addAwaitingHandler(handler);\n return;\n }\n\n const handlerState = handler.getState();\n\n if (handlerState === State.CANCELLED || handlerState === State.FAILED) {\n return;\n }\n\n if (this.shouldActivate(handler)) {\n this.makeActive(handler);\n return;\n }\n\n if (handlerState === State.ACTIVE) {\n handler.fail();\n return;\n }\n\n if (handlerState === State.BEGAN) {\n handler.cancel();\n }\n }\n\n private shouldActivate(handler: IGestureHandler): boolean {\n const shouldBeCancelledBy = (otherHandler: IGestureHandler) => {\n return this.shouldHandlerBeCancelledBy(handler, otherHandler);\n };\n\n return !this.gestureHandlers.some(shouldBeCancelledBy);\n }\n\n private cleanupAwaitingHandlers(handler: IGestureHandler): void {\n const shouldWait = (otherHandler: IGestureHandler) => {\n return (\n !otherHandler.isAwaiting() &&\n this.shouldHandlerWaitForOther(otherHandler, handler)\n );\n };\n\n for (const otherHandler of this.awaitingHandlers) {\n if (shouldWait(otherHandler)) {\n this.cleanHandler(otherHandler);\n this.awaitingHandlersTags.delete(otherHandler.getTag());\n }\n }\n\n this.awaitingHandlers = this.awaitingHandlers.filter((otherHandler) =>\n this.awaitingHandlersTags.has(otherHandler.getTag())\n );\n }\n\n public onHandlerStateChange(\n handler: IGestureHandler,\n newState: State,\n oldState: State,\n sendIfDisabled?: boolean\n ): void {\n if (!handler.isEnabled() && !sendIfDisabled) {\n return;\n }\n\n this.handlingChangeSemaphore += 1;\n\n if (this.isFinished(newState)) {\n for (const otherHandler of this.awaitingHandlers) {\n if (\n !this.shouldHandlerWaitForOther(otherHandler, handler) ||\n !this.awaitingHandlersTags.has(otherHandler.getTag())\n ) {\n continue;\n }\n\n if (newState !== State.END) {\n this.tryActivate(otherHandler);\n continue;\n }\n\n otherHandler.cancel();\n\n if (otherHandler.getState() === State.END) {\n // Handle edge case, where discrete gestures end immediately after activation thus\n // their state is set to END and when the gesture they are waiting for activates they\n // should be cancelled, however `cancel` was never sent as gestures were already in the END state.\n // Send synthetic BEGAN -> CANCELLED to properly handle JS logic\n otherHandler.sendEvent(State.CANCELLED, State.BEGAN);\n }\n\n otherHandler.setAwaiting(false);\n }\n }\n\n if (newState === State.ACTIVE) {\n this.tryActivate(handler);\n } else if (oldState === State.ACTIVE || oldState === State.END) {\n if (handler.isActive()) {\n handler.sendEvent(newState, oldState);\n } else if (\n oldState === State.ACTIVE &&\n (newState === State.CANCELLED || newState === State.FAILED)\n ) {\n handler.sendEvent(newState, State.BEGAN);\n }\n } else if (\n oldState !== State.UNDETERMINED ||\n newState !== State.CANCELLED\n ) {\n handler.sendEvent(newState, oldState);\n }\n\n this.handlingChangeSemaphore -= 1;\n\n this.scheduleFinishedHandlersCleanup();\n\n if (!this.awaitingHandlers.includes(handler)) {\n this.cleanupAwaitingHandlers(handler);\n }\n }\n\n private makeActive(handler: IGestureHandler): void {\n const currentState = handler.getState();\n\n handler.setActive(true);\n handler.setShouldResetProgress(true);\n handler.setActivationIndex(this.activationIndex++);\n\n for (let i = this.gestureHandlers.length - 1; i >= 0; --i) {\n if (this.shouldHandlerBeCancelledBy(this.gestureHandlers[i], handler)) {\n this.gestureHandlers[i].cancel();\n }\n }\n\n for (const otherHandler of this.awaitingHandlers) {\n if (this.shouldHandlerBeCancelledBy(otherHandler, handler)) {\n otherHandler.setAwaiting(false);\n }\n }\n\n handler.sendEvent(State.ACTIVE, State.BEGAN);\n\n if (currentState !== State.ACTIVE) {\n handler.sendEvent(State.END, State.ACTIVE);\n if (currentState !== State.END) {\n handler.sendEvent(State.UNDETERMINED, State.END);\n }\n }\n\n if (!handler.isAwaiting()) {\n return;\n }\n\n handler.setAwaiting(false);\n\n this.awaitingHandlers = this.awaitingHandlers.filter(\n (otherHandler) => otherHandler !== handler\n );\n }\n\n private addAwaitingHandler(handler: IGestureHandler): void {\n if (this.awaitingHandlers.includes(handler)) {\n return;\n }\n\n this.awaitingHandlers.push(handler);\n this.awaitingHandlersTags.add(handler.getTag());\n\n handler.setAwaiting(true);\n handler.setActivationIndex(this.activationIndex++);\n }\n\n public recordHandlerIfNotPresent(handler: IGestureHandler): void {\n if (this.gestureHandlers.includes(handler)) {\n return;\n }\n\n this.gestureHandlers.push(handler);\n\n handler.setActive(false);\n handler.setAwaiting(false);\n handler.setActivationIndex(Number.MAX_SAFE_INTEGER);\n }\n\n private shouldHandlerWaitForOther(\n handler: IGestureHandler,\n otherHandler: IGestureHandler\n ): boolean {\n return (\n handler !== otherHandler &&\n (handler.shouldWaitForHandlerFailure(otherHandler) ||\n otherHandler.shouldRequireToWaitForFailure(handler))\n );\n }\n\n private canRunSimultaneously(\n gh1: IGestureHandler,\n gh2: IGestureHandler\n ): boolean {\n return (\n gh1 === gh2 ||\n gh1.shouldRecognizeSimultaneously(gh2) ||\n gh2.shouldRecognizeSimultaneously(gh1)\n );\n }\n\n private shouldHandlerBeCancelledBy(\n handler: IGestureHandler,\n otherHandler: IGestureHandler\n ): boolean {\n if (this.canRunSimultaneously(handler, otherHandler)) {\n return false;\n }\n\n if (handler.isAwaiting() || handler.getState() === State.ACTIVE) {\n // For now it always returns false\n return handler.shouldBeCancelledByOther(otherHandler);\n }\n\n const handlerPointers: number[] = handler.getTrackedPointersID();\n const otherPointers: number[] = otherHandler.getTrackedPointersID();\n\n if (\n !PointerTracker.shareCommonPointers(handlerPointers, otherPointers) &&\n handler.getDelegate().getView() !== otherHandler.getDelegate().getView()\n ) {\n return this.checkOverlap(handler, otherHandler);\n }\n\n return true;\n }\n\n private checkOverlap(\n handler: IGestureHandler,\n otherHandler: IGestureHandler\n ): boolean {\n // If handlers don't have common pointers, default return value is false.\n // However, if at least on pointer overlaps with both handlers, we return true\n // This solves issue in overlapping parents example\n\n // TODO: Find better way to handle that issue, for example by activation order and handler cancelling\n\n const isPointerWithinBothBounds = (pointer: number) => {\n const handlerX: number = handler.getTracker().getLastX(pointer);\n const handlerY: number = handler.getTracker().getLastY(pointer);\n\n const point = {\n x: handlerX,\n y: handlerY,\n };\n\n return (\n handler.getDelegate().isPointerInBounds(point) &&\n otherHandler.getDelegate().isPointerInBounds(point)\n );\n };\n\n const handlerPointers: number[] = handler.getTrackedPointersID();\n const otherPointers: number[] = otherHandler.getTrackedPointersID();\n\n return (\n handlerPointers.some(isPointerWithinBothBounds) ||\n otherPointers.some(isPointerWithinBothBounds)\n );\n }\n\n private isFinished(state: State): boolean {\n return (\n state === State.END || state === State.FAILED || state === State.CANCELLED\n );\n }\n\n // This function is called when handler receives touchdown event\n // If handler is using mouse or pen as a pointer and any handler receives touch event,\n // mouse/pen event dissappears - it doesn't send onPointerCancel nor onPointerUp (and others)\n // This became a problem because handler was left at active state without any signal to end or fail\n // To handle this, when new touch event is received, we loop through active handlers and check which type of\n // pointer they're using. If there are any handler with mouse/pen as a pointer, we cancel them\n public cancelMouseAndPenGestures(currentHandler: IGestureHandler): void {\n this.gestureHandlers.forEach((handler: IGestureHandler) => {\n if (\n handler.getPointerType() !== PointerType.MOUSE &&\n handler.getPointerType() !== PointerType.STYLUS\n ) {\n return;\n }\n\n if (handler !== currentHandler) {\n handler.cancel();\n } else {\n // Handler that received touch event should have its pointer tracker reset\n // This allows handler to smoothly change from mouse/pen to touch\n // The drawback is, that when we try to use mouse/pen one more time, it doesn't send onPointerDown at the first time\n // so it is required to click two times to get handler to work\n //\n // However, handler will receive manually created onPointerEnter that is triggered in EventManager in onPointerMove method.\n // There may be possibility to use that fact to make handler respond properly to first mouse click\n handler.getTracker().resetTracker();\n }\n });\n }\n\n public static getInstance(): GestureHandlerOrchestrator {\n if (!GestureHandlerOrchestrator.instance) {\n GestureHandlerOrchestrator.instance = new GestureHandlerOrchestrator();\n }\n\n return GestureHandlerOrchestrator.instance;\n }\n}\n"]}
|
@@ -15,7 +15,7 @@ var _State = require("../../State");
|
|
15
15
|
|
16
16
|
var _utils = require("../utils");
|
17
17
|
|
18
|
-
var
|
18
|
+
var _gestureHandlerCommon = require("../../handlers/gestureHandlerCommon");
|
19
19
|
|
20
20
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
21
21
|
|
@@ -35,15 +35,14 @@ class GestureHandlerWebDelegate {
|
|
35
35
|
}
|
36
36
|
|
37
37
|
init(viewRef, handler) {
|
38
|
+
var _config$touchAction;
|
39
|
+
|
38
40
|
if (!viewRef) {
|
39
41
|
throw new Error(`Cannot find HTML Element for handler ${handler.getTag()}`);
|
40
42
|
}
|
41
43
|
|
42
44
|
this.gestureHandler = handler;
|
43
45
|
this.view = (0, _reactNative.findNodeHandle)(viewRef);
|
44
|
-
this.view.style['touchAction'] = 'none'; //@ts-ignore This one disables default events on Safari
|
45
|
-
|
46
|
-
this.view.style['WebkitTouchCallout'] = 'none';
|
47
46
|
const config = handler.getConfig();
|
48
47
|
this.addContextMenuListeners(config);
|
49
48
|
|
@@ -55,6 +54,9 @@ class GestureHandlerWebDelegate {
|
|
55
54
|
this.view.style['userSelect'] = config.userSelect;
|
56
55
|
}
|
57
56
|
|
57
|
+
this.view.style['touchAction'] = (_config$touchAction = config.touchAction) !== null && _config$touchAction !== void 0 ? _config$touchAction : 'none'; //@ts-ignore This one disables default events on Safari
|
58
|
+
|
59
|
+
this.view.style['WebkitTouchCallout'] = 'none';
|
58
60
|
this.eventManagers.push(new _PointerEventManager.default(this.view));
|
59
61
|
this.eventManagers.push(new _TouchEventManager.default(this.view));
|
60
62
|
this.eventManagers.forEach(manager => this.gestureHandler.attachEventManager(manager));
|
@@ -93,7 +95,7 @@ class GestureHandlerWebDelegate {
|
|
93
95
|
}
|
94
96
|
|
95
97
|
shouldDisableContextMenu(config) {
|
96
|
-
return config.enableContextMenu === undefined && this.gestureHandler.isButtonInConfig(
|
98
|
+
return config.enableContextMenu === undefined && this.gestureHandler.isButtonInConfig(_gestureHandlerCommon.MouseButton.RIGHT) || config.enableContextMenu === false;
|
97
99
|
}
|
98
100
|
|
99
101
|
addContextMenuListeners(config) {
|
@@ -145,6 +147,9 @@ class GestureHandlerWebDelegate {
|
|
145
147
|
|
146
148
|
destroy(config) {
|
147
149
|
this.removeContextMenuListeners(config);
|
150
|
+
this.eventManagers.forEach(manager => {
|
151
|
+
manager.unregisterListeners();
|
152
|
+
});
|
148
153
|
}
|
149
154
|
|
150
155
|
}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["GestureHandlerWebDelegate.ts"],"names":["GestureHandlerWebDelegate","getView","view","init","viewRef","handler","Error","getTag","gestureHandler","
|
1
|
+
{"version":3,"sources":["GestureHandlerWebDelegate.ts"],"names":["GestureHandlerWebDelegate","getView","view","init","viewRef","handler","Error","getTag","gestureHandler","config","getConfig","addContextMenuListeners","userSelect","style","touchAction","eventManagers","push","PointerEventManager","TouchEventManager","forEach","manager","attachEventManager","isPointerInBounds","x","y","measureView","rect","getBoundingClientRect","pageX","left","pageY","top","width","height","reset","resetManager","tryResetCursor","activeCursor","getState","State","ACTIVE","cursor","shouldDisableContextMenu","enableContextMenu","undefined","isButtonInConfig","MouseButton","RIGHT","addEventListener","disableContextMenu","removeContextMenuListeners","removeEventListener","e","preventDefault","stopPropagation","onBegin","onActivate","onEnd","onCancel","onFail","destroy","unregisterListeners"],"mappings":"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","sourcesContent":["import { findNodeHandle } from 'react-native';\nimport type IGestureHandler from '../handlers/IGestureHandler';\nimport {\n GestureHandlerDelegate,\n MeasureResult,\n} from './GestureHandlerDelegate';\nimport PointerEventManager from './PointerEventManager';\nimport TouchEventManager from './TouchEventManager';\nimport { State } from '../../State';\nimport { isPointerInBounds } from '../utils';\nimport EventManager from './EventManager';\nimport { Config } from '../interfaces';\nimport { MouseButton } from '../../handlers/gestureHandlerCommon';\n\nexport class GestureHandlerWebDelegate\n implements GestureHandlerDelegate<HTMLElement, IGestureHandler>\n{\n private view!: HTMLElement;\n private gestureHandler!: IGestureHandler;\n private eventManagers: EventManager<unknown>[] = [];\n\n getView(): HTMLElement {\n return this.view;\n }\n\n init(viewRef: number, handler: IGestureHandler): void {\n if (!viewRef) {\n throw new Error(\n `Cannot find HTML Element for handler ${handler.getTag()}`\n );\n }\n\n this.gestureHandler = handler;\n this.view = findNodeHandle(viewRef) as unknown as HTMLElement;\n\n const config = handler.getConfig();\n\n this.addContextMenuListeners(config);\n\n if (!config.userSelect) {\n this.view.style['webkitUserSelect'] = 'none';\n this.view.style['userSelect'] = 'none';\n } else {\n this.view.style['webkitUserSelect'] = config.userSelect;\n this.view.style['userSelect'] = config.userSelect;\n }\n\n this.view.style['touchAction'] = config.touchAction ?? 'none';\n //@ts-ignore This one disables default events on Safari\n this.view.style['WebkitTouchCallout'] = 'none';\n\n this.eventManagers.push(new PointerEventManager(this.view));\n this.eventManagers.push(new TouchEventManager(this.view));\n\n this.eventManagers.forEach((manager) =>\n this.gestureHandler.attachEventManager(manager)\n );\n }\n\n isPointerInBounds({ x, y }: { x: number; y: number }): boolean {\n return isPointerInBounds(this.view, { x, y });\n }\n\n measureView(): MeasureResult {\n const rect = this.view.getBoundingClientRect();\n\n return {\n pageX: rect.left,\n pageY: rect.top,\n width: rect.width,\n height: rect.height,\n };\n }\n\n reset(): void {\n this.eventManagers.forEach((manager: EventManager<unknown>) =>\n manager.resetManager()\n );\n }\n\n tryResetCursor() {\n const config = this.gestureHandler.getConfig();\n\n if (\n config.activeCursor &&\n config.activeCursor !== 'auto' &&\n this.gestureHandler.getState() === State.ACTIVE\n ) {\n this.view.style.cursor = 'auto';\n }\n }\n\n private shouldDisableContextMenu(config: Config) {\n return (\n (config.enableContextMenu === undefined &&\n this.gestureHandler.isButtonInConfig(MouseButton.RIGHT)) ||\n config.enableContextMenu === false\n );\n }\n\n private addContextMenuListeners(config: Config): void {\n if (this.shouldDisableContextMenu(config)) {\n this.view.addEventListener('contextmenu', this.disableContextMenu);\n } else if (config.enableContextMenu) {\n this.view.addEventListener('contextmenu', this.enableContextMenu);\n }\n }\n\n private removeContextMenuListeners(config: Config): void {\n if (this.shouldDisableContextMenu(config)) {\n this.view.removeEventListener('contextmenu', this.disableContextMenu);\n } else if (config.enableContextMenu) {\n this.view.removeEventListener('contextmenu', this.enableContextMenu);\n }\n }\n\n private disableContextMenu(this: void, e: MouseEvent): void {\n e.preventDefault();\n }\n\n private enableContextMenu(this: void, e: MouseEvent): void {\n e.stopPropagation();\n }\n\n onBegin(): void {\n // no-op for now\n }\n\n onActivate(): void {\n const config = this.gestureHandler.getConfig();\n\n if (\n (!this.view.style.cursor || this.view.style.cursor === 'auto') &&\n config.activeCursor\n ) {\n this.view.style.cursor = config.activeCursor;\n }\n }\n\n onEnd(): void {\n this.tryResetCursor();\n }\n\n onCancel(): void {\n this.tryResetCursor();\n }\n\n onFail(): void {\n this.tryResetCursor();\n }\n\n public destroy(config: Config): void {\n this.removeContextMenuListeners(config);\n\n this.eventManagers.forEach((manager) => {\n manager.unregisterListeners();\n });\n }\n}\n"]}
|
@@ -5,6 +5,8 @@ Object.defineProperty(exports, "__esModule", {
|
|
5
5
|
});
|
6
6
|
exports.default = void 0;
|
7
7
|
|
8
|
+
var _State = require("../../State");
|
9
|
+
|
8
10
|
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
9
11
|
|
10
12
|
class InteractionManager {
|
@@ -81,9 +83,16 @@ class InteractionManager {
|
|
81
83
|
})) !== undefined;
|
82
84
|
}
|
83
85
|
|
84
|
-
shouldHandlerBeCancelledBy(_handler,
|
85
|
-
|
86
|
-
|
86
|
+
shouldHandlerBeCancelledBy(_handler, otherHandler) {
|
87
|
+
var _otherHandler$isButto;
|
88
|
+
|
89
|
+
// We check constructor name instead of using `instanceof` in order do avoid circular dependencies
|
90
|
+
const isNativeHandler = otherHandler.constructor.name === 'NativeViewGestureHandler';
|
91
|
+
|
92
|
+
const isActive = otherHandler.getState() === _State.State.ACTIVE;
|
93
|
+
|
94
|
+
const isButton = ((_otherHandler$isButto = otherHandler.isButton) === null || _otherHandler$isButto === void 0 ? void 0 : _otherHandler$isButto.call(otherHandler)) === true;
|
95
|
+
return isNativeHandler && isActive && !isButton;
|
87
96
|
}
|
88
97
|
|
89
98
|
dropRelationsForHandlerWithTag(handlerTag) {
|