react-native-gesture-handler 2.4.1 → 2.6.0
Sign up to get free protection for your applications and to get access to all the features.
- package/README.md +4 -2
- package/RNGestureHandler.podspec +17 -5
- package/android/build.gradle +71 -15
- package/android/lib/src/main/java/com/swmansion/gesturehandler/FlingGestureHandler.kt +2 -1
- package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandler.kt +9 -5
- package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandlerOrchestrator.kt +32 -6
- package/android/lib/src/main/java/com/swmansion/gesturehandler/LongPressGestureHandler.kt +5 -2
- package/android/lib/src/main/java/com/swmansion/gesturehandler/NativeViewGestureHandler.kt +105 -23
- package/android/lib/src/main/java/com/swmansion/gesturehandler/PanGestureHandler.kt +30 -2
- package/android/lib/src/main/java/com/swmansion/gesturehandler/TapGestureHandler.kt +3 -2
- package/android/src/fabric/java/com/swmansion/gesturehandler/RNGestureHandlerComponentsRegistry.java +1 -1
- package/android/src/main/java/com/swmansion/gesturehandler/RNGestureHandlerPackage.kt +0 -8
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerButtonViewManager.kt +74 -84
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerInteractionManager.kt +7 -1
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerModule.kt +5 -1
- package/android/src/main/jni/CMakeLists.txt +59 -0
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNGestureHandlerButtonManagerDelegate.java +12 -9
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNGestureHandlerButtonManagerInterface.java +1 -0
- package/ios/Handlers/RNFlingHandler.m +43 -1
- package/ios/Handlers/{RNNativeViewHandler.m → RNNativeViewHandler.mm} +13 -1
- package/ios/Handlers/RNPanHandler.m +27 -0
- package/ios/RNGestureHandler.h +1 -0
- package/ios/RNGestureHandler.m +22 -4
- package/ios/RNGestureHandlerButtonComponentView.mm +1 -1
- package/ios/RNGestureHandlerManager.mm +10 -7
- package/ios/RNGestureHandlerModule.mm +4 -1
- package/ios/RNGestureHandlerRootViewComponentView.mm +1 -1
- package/ios/RNManualActivationRecognizer.m +10 -3
- package/ios/RNRootViewGestureRecognizer.m +12 -1
- package/lib/commonjs/EnableExperimentalWebImplementation.js +24 -0
- package/lib/commonjs/EnableExperimentalWebImplementation.js.map +1 -0
- package/lib/commonjs/RNGestureHandlerModule.macos.js +138 -0
- package/lib/commonjs/RNGestureHandlerModule.macos.js.map +1 -0
- package/lib/commonjs/RNGestureHandlerModule.web.js +87 -25
- package/lib/commonjs/RNGestureHandlerModule.web.js.map +1 -1
- package/lib/commonjs/RNRenderer.js +16 -0
- package/lib/commonjs/RNRenderer.js.map +1 -0
- package/lib/commonjs/RNRenderer.web.js +11 -0
- package/lib/commonjs/RNRenderer.web.js.map +1 -0
- package/lib/commonjs/components/DrawerLayout.js +41 -12
- package/lib/commonjs/components/DrawerLayout.js.map +1 -1
- package/lib/commonjs/components/GestureButtons.js +42 -9
- package/lib/commonjs/components/GestureButtons.js.map +1 -1
- package/lib/commonjs/components/GestureComponents.js +41 -4
- package/lib/commonjs/components/GestureComponents.js.map +1 -1
- package/lib/commonjs/components/GestureComponents.web.js +7 -2
- package/lib/commonjs/components/GestureComponents.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 +5 -1
- package/lib/commonjs/components/touchables/GenericTouchable.js.map +1 -1
- package/lib/commonjs/fabric/RNGestureHandlerButtonNativeComponent.js.map +1 -1
- package/lib/commonjs/handlers/ForceTouchGestureHandler.js +2 -1
- package/lib/commonjs/handlers/ForceTouchGestureHandler.js.map +1 -1
- package/lib/commonjs/handlers/PanGestureHandler.js +1 -1
- package/lib/commonjs/handlers/PanGestureHandler.js.map +1 -1
- package/lib/commonjs/handlers/PressabilityDebugView.js +14 -0
- package/lib/commonjs/handlers/PressabilityDebugView.js.map +1 -0
- package/lib/commonjs/handlers/PressabilityDebugView.web.js +12 -0
- package/lib/commonjs/handlers/PressabilityDebugView.web.js.map +1 -0
- package/lib/commonjs/handlers/createHandler.js +33 -12
- package/lib/commonjs/handlers/createHandler.js.map +1 -1
- package/lib/commonjs/handlers/gestureHandlerCommon.js.map +1 -1
- package/lib/commonjs/handlers/gestures/GestureDetector.js +150 -75
- package/lib/commonjs/handlers/gestures/GestureDetector.js.map +1 -1
- package/lib/commonjs/handlers/gestures/gesture.js +13 -2
- package/lib/commonjs/handlers/gestures/gesture.js.map +1 -1
- package/lib/commonjs/handlers/gestures/gestureStateManager.js +13 -9
- package/lib/commonjs/handlers/gestures/gestureStateManager.js.map +1 -1
- package/lib/commonjs/handlers/gestures/panGesture.js +5 -0
- package/lib/commonjs/handlers/gestures/panGesture.js.map +1 -1
- package/lib/commonjs/handlers/gestures/reanimatedWrapper.js +7 -0
- package/lib/commonjs/handlers/gestures/reanimatedWrapper.js.map +1 -1
- package/lib/commonjs/index.js +14 -0
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/utils.js +6 -3
- package/lib/commonjs/utils.js.map +1 -1
- package/lib/commonjs/web/constants.js +3 -51
- package/lib/commonjs/web/constants.js.map +1 -1
- package/lib/commonjs/web/detectors/RotationGestureDetector.js +169 -0
- package/lib/commonjs/web/detectors/RotationGestureDetector.js.map +1 -0
- package/lib/commonjs/web/detectors/ScaleGestureDetector.js +167 -0
- package/lib/commonjs/web/detectors/ScaleGestureDetector.js.map +1 -0
- package/lib/commonjs/web/handlers/FlingGestureHandler.js +154 -0
- package/lib/commonjs/web/handlers/FlingGestureHandler.js.map +1 -0
- package/lib/commonjs/web/handlers/GestureHandler.js +538 -0
- package/lib/commonjs/web/handlers/GestureHandler.js.map +1 -0
- package/lib/commonjs/web/handlers/LongPressGestureHandler.js +147 -0
- package/lib/commonjs/web/handlers/LongPressGestureHandler.js.map +1 -0
- package/lib/commonjs/web/handlers/NativeViewGestureHandler.js +116 -0
- package/lib/commonjs/web/handlers/NativeViewGestureHandler.js.map +1 -0
- package/lib/commonjs/web/handlers/PanGestureHandler.js +451 -0
- package/lib/commonjs/web/handlers/PanGestureHandler.js.map +1 -0
- package/lib/commonjs/web/handlers/PinchGestureHandler.js +171 -0
- package/lib/commonjs/web/handlers/PinchGestureHandler.js.map +1 -0
- package/lib/commonjs/web/handlers/RotationGestureHandler.js +187 -0
- package/lib/commonjs/web/handlers/RotationGestureHandler.js.map +1 -0
- package/lib/commonjs/web/handlers/TapGestureHandler.js +296 -0
- package/lib/commonjs/web/handlers/TapGestureHandler.js.map +1 -0
- package/lib/commonjs/web/interfaces.js +34 -0
- package/lib/commonjs/web/interfaces.js.map +1 -0
- package/lib/commonjs/web/tools/EventManager.js +169 -0
- package/lib/commonjs/web/tools/EventManager.js.map +1 -0
- package/lib/commonjs/web/tools/GestureHandlerOrchestrator.js +283 -0
- package/lib/commonjs/web/tools/GestureHandlerOrchestrator.js.map +1 -0
- package/lib/commonjs/web/tools/InteractionManager.js +102 -0
- package/lib/commonjs/web/tools/InteractionManager.js.map +1 -0
- package/lib/commonjs/web/tools/NodeManager.js +48 -0
- package/lib/commonjs/web/tools/NodeManager.js.map +1 -0
- package/lib/commonjs/web/tools/PointerTracker.js +132 -0
- package/lib/commonjs/web/tools/PointerTracker.js.map +1 -0
- package/lib/commonjs/{web → web_hammer}/DiscreteGestureHandler.js +0 -0
- package/lib/commonjs/{web → web_hammer}/DiscreteGestureHandler.js.map +0 -0
- package/lib/commonjs/{web → web_hammer}/DraggingGestureHandler.js +0 -0
- package/lib/commonjs/{web → web_hammer}/DraggingGestureHandler.js.map +0 -0
- package/lib/commonjs/{web → web_hammer}/Errors.js +0 -0
- package/lib/commonjs/{web → web_hammer}/Errors.js.map +0 -0
- package/lib/commonjs/{web → web_hammer}/FlingGestureHandler.js +0 -0
- package/lib/commonjs/{web → web_hammer}/FlingGestureHandler.js.map +0 -0
- package/lib/commonjs/{web → web_hammer}/GestureHandler.js +83 -42
- package/lib/commonjs/web_hammer/GestureHandler.js.map +1 -0
- package/lib/commonjs/{web → web_hammer}/IndiscreteGestureHandler.js +0 -0
- package/lib/commonjs/{web → web_hammer}/IndiscreteGestureHandler.js.map +0 -0
- package/lib/commonjs/{web → web_hammer}/LongPressGestureHandler.js +0 -0
- package/lib/commonjs/{web → web_hammer}/LongPressGestureHandler.js.map +0 -0
- package/lib/commonjs/{web → web_hammer}/NativeViewGestureHandler.js +4 -0
- package/lib/commonjs/web_hammer/NativeViewGestureHandler.js.map +1 -0
- package/lib/commonjs/{web → web_hammer}/NodeManager.js +0 -0
- package/lib/commonjs/web_hammer/NodeManager.js.map +1 -0
- package/lib/commonjs/{web → web_hammer}/PanGestureHandler.js +0 -0
- package/lib/commonjs/{web → web_hammer}/PanGestureHandler.js.map +0 -0
- package/lib/commonjs/{web → web_hammer}/PinchGestureHandler.js +0 -0
- package/lib/commonjs/{web → web_hammer}/PinchGestureHandler.js.map +0 -0
- package/lib/commonjs/{web → web_hammer}/PressGestureHandler.js +0 -0
- package/lib/commonjs/{web → web_hammer}/PressGestureHandler.js.map +0 -0
- package/lib/commonjs/{web → web_hammer}/RotationGestureHandler.js +0 -0
- package/lib/commonjs/{web → web_hammer}/RotationGestureHandler.js.map +0 -0
- package/lib/commonjs/{web → web_hammer}/TapGestureHandler.js +0 -0
- package/lib/commonjs/{web → web_hammer}/TapGestureHandler.js.map +0 -0
- package/lib/commonjs/web_hammer/constants.js +64 -0
- package/lib/commonjs/web_hammer/constants.js.map +1 -0
- package/lib/commonjs/{web → web_hammer}/utils.js +0 -0
- package/lib/commonjs/{web → web_hammer}/utils.js.map +1 -1
- package/lib/module/EnableExperimentalWebImplementation.js +15 -0
- package/lib/module/EnableExperimentalWebImplementation.js.map +1 -0
- package/lib/module/RNGestureHandlerModule.macos.js +102 -0
- package/lib/module/RNGestureHandlerModule.macos.js.map +1 -0
- package/lib/module/RNGestureHandlerModule.web.js +73 -24
- package/lib/module/RNGestureHandlerModule.web.js.map +1 -1
- package/lib/module/RNRenderer.js +4 -0
- package/lib/module/RNRenderer.js.map +1 -0
- package/lib/module/RNRenderer.web.js +4 -0
- package/lib/module/RNRenderer.web.js.map +1 -0
- package/lib/module/components/DrawerLayout.js +41 -12
- package/lib/module/components/DrawerLayout.js.map +1 -1
- package/lib/module/components/GestureButtons.js +43 -9
- package/lib/module/components/GestureButtons.js.map +1 -1
- package/lib/module/components/GestureComponents.js +39 -4
- package/lib/module/components/GestureComponents.js.map +1 -1
- package/lib/module/components/GestureComponents.web.js +6 -2
- package/lib/module/components/GestureComponents.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 +5 -1
- package/lib/module/components/touchables/GenericTouchable.js.map +1 -1
- package/lib/module/fabric/RNGestureHandlerButtonNativeComponent.js.map +1 -1
- package/lib/module/handlers/ForceTouchGestureHandler.js +1 -1
- package/lib/module/handlers/ForceTouchGestureHandler.js.map +1 -1
- package/lib/module/handlers/PanGestureHandler.js +1 -1
- package/lib/module/handlers/PanGestureHandler.js.map +1 -1
- package/lib/module/handlers/PressabilityDebugView.js +3 -0
- package/lib/module/handlers/PressabilityDebugView.js.map +1 -0
- package/lib/module/handlers/PressabilityDebugView.web.js +5 -0
- package/lib/module/handlers/PressabilityDebugView.web.js.map +1 -0
- package/lib/module/handlers/createHandler.js +35 -14
- package/lib/module/handlers/createHandler.js.map +1 -1
- package/lib/module/handlers/gestureHandlerCommon.js.map +1 -1
- package/lib/module/handlers/gestures/GestureDetector.js +147 -74
- package/lib/module/handlers/gestures/GestureDetector.js.map +1 -1
- package/lib/module/handlers/gestures/gesture.js +13 -2
- package/lib/module/handlers/gestures/gesture.js.map +1 -1
- package/lib/module/handlers/gestures/gestureStateManager.js +13 -9
- package/lib/module/handlers/gestures/gestureStateManager.js.map +1 -1
- package/lib/module/handlers/gestures/panGesture.js +5 -0
- package/lib/module/handlers/gestures/panGesture.js.map +1 -1
- package/lib/module/handlers/gestures/reanimatedWrapper.js +7 -0
- package/lib/module/handlers/gestures/reanimatedWrapper.js.map +1 -1
- package/lib/module/index.js +2 -1
- package/lib/module/index.js.map +1 -1
- package/lib/module/utils.js +2 -1
- package/lib/module/utils.js.map +1 -1
- package/lib/module/web/constants.js +1 -36
- package/lib/module/web/constants.js.map +1 -1
- package/lib/module/web/detectors/RotationGestureDetector.js +159 -0
- package/lib/module/web/detectors/RotationGestureDetector.js.map +1 -0
- package/lib/module/web/detectors/ScaleGestureDetector.js +156 -0
- package/lib/module/web/detectors/ScaleGestureDetector.js.map +1 -0
- package/lib/module/web/handlers/FlingGestureHandler.js +139 -0
- package/lib/module/web/handlers/FlingGestureHandler.js.map +1 -0
- package/lib/module/web/handlers/GestureHandler.js +521 -0
- package/lib/module/web/handlers/GestureHandler.js.map +1 -0
- package/lib/module/web/handlers/LongPressGestureHandler.js +133 -0
- package/lib/module/web/handlers/LongPressGestureHandler.js.map +1 -0
- package/lib/module/web/handlers/NativeViewGestureHandler.js +103 -0
- package/lib/module/web/handlers/NativeViewGestureHandler.js.map +1 -0
- package/lib/module/web/handlers/PanGestureHandler.js +434 -0
- package/lib/module/web/handlers/PanGestureHandler.js.map +1 -0
- package/lib/module/web/handlers/PinchGestureHandler.js +155 -0
- package/lib/module/web/handlers/PinchGestureHandler.js.map +1 -0
- package/lib/module/web/handlers/RotationGestureHandler.js +171 -0
- package/lib/module/web/handlers/RotationGestureHandler.js.map +1 -0
- package/lib/module/web/handlers/TapGestureHandler.js +281 -0
- package/lib/module/web/handlers/TapGestureHandler.js.map +1 -0
- package/lib/module/web/interfaces.js +26 -0
- package/lib/module/web/interfaces.js.map +1 -0
- package/lib/module/web/tools/EventManager.js +160 -0
- package/lib/module/web/tools/EventManager.js.map +1 -0
- package/lib/module/web/tools/GestureHandlerOrchestrator.js +270 -0
- package/lib/module/web/tools/GestureHandlerOrchestrator.js.map +1 -0
- package/lib/module/web/tools/InteractionManager.js +93 -0
- package/lib/module/web/tools/InteractionManager.js.map +1 -0
- package/lib/module/web/tools/NodeManager.js +39 -0
- package/lib/module/web/tools/NodeManager.js.map +1 -0
- package/lib/module/web/tools/PointerTracker.js +122 -0
- package/lib/module/web/tools/PointerTracker.js.map +1 -0
- package/lib/module/{web → web_hammer}/DiscreteGestureHandler.js +0 -0
- package/lib/module/{web → web_hammer}/DiscreteGestureHandler.js.map +0 -0
- package/lib/module/{web → web_hammer}/DraggingGestureHandler.js +0 -0
- package/lib/module/{web → web_hammer}/DraggingGestureHandler.js.map +0 -0
- package/lib/module/{web → web_hammer}/Errors.js +0 -0
- package/lib/module/{web → web_hammer}/Errors.js.map +0 -0
- package/lib/module/{web → web_hammer}/FlingGestureHandler.js +0 -0
- package/lib/module/{web → web_hammer}/FlingGestureHandler.js.map +0 -0
- package/lib/module/{web → web_hammer}/GestureHandler.js +83 -42
- package/lib/module/web_hammer/GestureHandler.js.map +1 -0
- package/lib/module/{web → web_hammer}/IndiscreteGestureHandler.js +0 -0
- package/lib/module/{web → web_hammer}/IndiscreteGestureHandler.js.map +0 -0
- package/lib/module/{web → web_hammer}/LongPressGestureHandler.js +0 -0
- package/lib/module/{web → web_hammer}/LongPressGestureHandler.js.map +0 -0
- package/lib/module/{web → web_hammer}/NativeViewGestureHandler.js +4 -0
- package/lib/module/web_hammer/NativeViewGestureHandler.js.map +1 -0
- package/lib/module/{web → web_hammer}/NodeManager.js +0 -0
- package/lib/module/web_hammer/NodeManager.js.map +1 -0
- package/lib/module/{web → web_hammer}/PanGestureHandler.js +0 -0
- package/lib/module/{web → web_hammer}/PanGestureHandler.js.map +0 -0
- package/lib/module/{web → web_hammer}/PinchGestureHandler.js +0 -0
- package/lib/module/{web → web_hammer}/PinchGestureHandler.js.map +0 -0
- package/lib/module/{web → web_hammer}/PressGestureHandler.js +0 -0
- package/lib/module/{web → web_hammer}/PressGestureHandler.js.map +0 -0
- package/lib/module/{web → web_hammer}/RotationGestureHandler.js +0 -0
- package/lib/module/{web → web_hammer}/RotationGestureHandler.js.map +0 -0
- package/lib/module/{web → web_hammer}/TapGestureHandler.js +0 -0
- package/lib/module/{web → web_hammer}/TapGestureHandler.js.map +0 -0
- package/lib/module/web_hammer/constants.js +43 -0
- package/lib/module/web_hammer/constants.js.map +1 -0
- package/lib/module/{web → web_hammer}/utils.js +0 -0
- package/lib/module/{web → web_hammer}/utils.js.map +1 -1
- package/lib/typescript/EnableExperimentalWebImplementation.d.ts +2 -0
- package/lib/typescript/RNGestureHandlerModule.macos.d.ts +44 -0
- package/lib/typescript/RNGestureHandlerModule.web.d.ts +29 -18
- package/lib/typescript/RNRenderer.d.ts +1 -0
- package/lib/typescript/RNRenderer.web.d.ts +3 -0
- package/lib/typescript/components/DrawerLayout.d.ts +4 -1
- package/lib/typescript/components/GestureButtons.d.ts +22 -0
- package/lib/typescript/components/GestureComponents.d.ts +7 -3
- package/lib/typescript/components/GestureComponents.web.d.ts +1 -0
- package/lib/typescript/components/Swipeable.d.ts +1 -1
- package/lib/typescript/fabric/RNGestureHandlerButtonNativeComponent.d.ts +1 -0
- package/lib/typescript/handlers/ForceTouchGestureHandler.d.ts +2 -2
- package/lib/typescript/handlers/PanGestureHandler.d.ts +2 -1
- package/lib/typescript/handlers/PressabilityDebugView.d.ts +1 -0
- package/lib/typescript/handlers/PressabilityDebugView.web.d.ts +1 -0
- package/lib/typescript/handlers/gestureHandlerCommon.d.ts +1 -0
- package/lib/typescript/handlers/gestures/GestureDetector.d.ts +2 -1
- package/lib/typescript/handlers/gestures/gesture.d.ts +3 -0
- package/lib/typescript/handlers/gestures/panGesture.d.ts +1 -0
- package/lib/typescript/index.d.ts +2 -1
- package/lib/typescript/web/constants.d.ts +1 -33
- package/lib/typescript/web/detectors/RotationGestureDetector.d.ts +30 -0
- package/lib/typescript/web/detectors/ScaleGestureDetector.d.ts +30 -0
- package/lib/typescript/web/handlers/FlingGestureHandler.d.ts +31 -0
- package/lib/typescript/web/handlers/GestureHandler.d.ts +84 -0
- package/lib/typescript/web/handlers/LongPressGestureHandler.d.ts +33 -0
- package/lib/typescript/web/handlers/NativeViewGestureHandler.d.ts +16 -0
- package/lib/typescript/web/handlers/PanGestureHandler.d.ts +68 -0
- package/lib/typescript/web/handlers/PinchGestureHandler.d.ts +30 -0
- package/lib/typescript/web/handlers/RotationGestureHandler.d.ts +30 -0
- package/lib/typescript/web/handlers/TapGestureHandler.d.ts +49 -0
- package/lib/typescript/web/interfaces.d.ts +97 -0
- package/lib/typescript/web/tools/EventManager.d.ts +28 -0
- package/lib/typescript/web/tools/GestureHandlerOrchestrator.d.ts +28 -0
- package/lib/typescript/web/tools/InteractionManager.d.ts +13 -0
- package/lib/typescript/web/tools/NodeManager.d.ts +11 -0
- package/lib/typescript/web/tools/PointerTracker.d.ts +28 -0
- package/lib/typescript/{web → web_hammer}/DiscreteGestureHandler.d.ts +0 -0
- package/lib/typescript/{web → web_hammer}/DraggingGestureHandler.d.ts +0 -0
- package/lib/typescript/{web → web_hammer}/Errors.d.ts +0 -0
- package/lib/typescript/{web → web_hammer}/FlingGestureHandler.d.ts +1 -0
- package/lib/typescript/{web → web_hammer}/GestureHandler.d.ts +6 -0
- package/lib/typescript/{web → web_hammer}/IndiscreteGestureHandler.d.ts +1 -0
- package/lib/typescript/{web → web_hammer}/LongPressGestureHandler.d.ts +1 -0
- package/lib/typescript/{web → web_hammer}/NativeViewGestureHandler.d.ts +1 -0
- package/lib/typescript/web_hammer/NodeManager.d.ts +8 -0
- package/lib/typescript/{web → web_hammer}/PanGestureHandler.d.ts +1 -0
- package/lib/typescript/{web → web_hammer}/PinchGestureHandler.d.ts +0 -0
- package/lib/typescript/{web → web_hammer}/PressGestureHandler.d.ts +2 -0
- package/lib/typescript/{web → web_hammer}/RotationGestureHandler.d.ts +0 -0
- package/lib/typescript/{web → web_hammer}/TapGestureHandler.d.ts +1 -0
- package/lib/typescript/web_hammer/constants.d.ts +39 -0
- package/lib/typescript/{web → web_hammer}/utils.d.ts +0 -0
- package/package.json +1 -1
- package/src/EnableExperimentalWebImplementation.ts +18 -0
- package/src/RNGestureHandlerModule.macos.ts +114 -0
- package/src/RNGestureHandlerModule.web.ts +89 -26
- package/src/RNRenderer.ts +3 -0
- package/src/RNRenderer.web.ts +3 -0
- package/src/components/DrawerLayout.tsx +37 -14
- package/src/components/GestureButtons.tsx +64 -0
- package/src/components/GestureComponents.tsx +66 -6
- package/src/components/GestureComponents.web.tsx +5 -0
- package/src/components/Swipeable.tsx +3 -1
- package/src/components/touchables/GenericTouchable.tsx +2 -0
- package/src/fabric/RNGestureHandlerButtonNativeComponent.ts +1 -0
- package/src/handlers/ForceTouchGestureHandler.ts +3 -2
- package/src/handlers/PanGestureHandler.ts +2 -0
- package/src/handlers/PressabilityDebugView.tsx +2 -0
- package/src/handlers/PressabilityDebugView.web.tsx +4 -0
- package/src/handlers/{createHandler.ts → createHandler.tsx} +45 -19
- package/src/handlers/gestureHandlerCommon.ts +2 -0
- package/src/handlers/gestures/GestureDetector.tsx +185 -93
- package/src/handlers/gestures/gesture.ts +16 -0
- package/src/handlers/gestures/gestureStateManager.ts +13 -8
- package/src/handlers/gestures/panGesture.ts +5 -0
- package/src/handlers/gestures/reanimatedWrapper.ts +7 -0
- package/src/index.ts +3 -0
- package/src/utils.ts +3 -1
- package/src/web/constants.ts +1 -41
- package/src/web/detectors/RotationGestureDetector.ts +199 -0
- package/src/web/detectors/ScaleGestureDetector.ts +208 -0
- package/src/web/handlers/FlingGestureHandler.ts +146 -0
- package/src/web/handlers/GestureHandler.ts +572 -0
- package/src/web/handlers/LongPressGestureHandler.ts +122 -0
- package/src/web/handlers/NativeViewGestureHandler.ts +109 -0
- package/src/web/handlers/PanGestureHandler.ts +488 -0
- package/src/web/handlers/PinchGestureHandler.ts +162 -0
- package/src/web/handlers/RotationGestureHandler.ts +181 -0
- package/src/web/handlers/TapGestureHandler.ts +275 -0
- package/src/web/interfaces.ts +114 -0
- package/src/web/tools/EventManager.ts +186 -0
- package/src/web/tools/GestureHandlerOrchestrator.ts +329 -0
- package/src/web/tools/InteractionManager.ts +108 -0
- package/src/web/tools/NodeManager.ts +43 -0
- package/src/web/tools/PointerTracker.ts +130 -0
- package/src/{web → web_hammer}/DiscreteGestureHandler.ts +0 -0
- package/src/{web → web_hammer}/DraggingGestureHandler.ts +0 -0
- package/src/{web → web_hammer}/Errors.ts +0 -0
- package/src/{web → web_hammer}/FlingGestureHandler.ts +0 -0
- package/src/{web → web_hammer}/GestureHandler.ts +102 -55
- package/src/{web → web_hammer}/IndiscreteGestureHandler.ts +0 -0
- package/src/{web → web_hammer}/LongPressGestureHandler.ts +0 -0
- package/src/{web → web_hammer}/NativeViewGestureHandler.ts +4 -0
- package/src/{web → web_hammer}/NodeManager.ts +6 -3
- package/src/{web → web_hammer}/PanGestureHandler.ts +0 -0
- package/src/{web → web_hammer}/PinchGestureHandler.ts +0 -0
- package/src/{web → web_hammer}/PressGestureHandler.ts +0 -0
- package/src/{web → web_hammer}/RotationGestureHandler.ts +0 -0
- package/src/{web → web_hammer}/TapGestureHandler.ts +0 -0
- package/src/web_hammer/constants.ts +48 -0
- package/src/{web → web_hammer}/utils.ts +1 -1
- package/android/src/main/jni/Android.mk +0 -53
- package/android/src/main/jni/OnLoad.cpp +0 -9
- package/android/src/main/jni/RNGestureHandlerComponentsRegistry.cpp +0 -71
- package/android/src/main/jni/RNGestureHandlerComponentsRegistry.h +0 -34
- package/ios/RNGestureHandler.xcodeproj/project.xcworkspace/xcuserdata/jakubpiasecki.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
- package/ios/RNGestureHandler.xcodeproj/xcuserdata/jakubpiasecki.xcuserdatad/xcschemes/xcschememanagement.plist +0 -19
- package/lib/commonjs/web/GestureHandler.js.map +0 -1
- package/lib/commonjs/web/NativeViewGestureHandler.js.map +0 -1
- package/lib/commonjs/web/NodeManager.js.map +0 -1
- package/lib/module/web/GestureHandler.js.map +0 -1
- package/lib/module/web/NativeViewGestureHandler.js.map +0 -1
- package/lib/module/web/NodeManager.js.map +0 -1
- package/lib/typescript/web/NodeManager.d.ts +0 -8
package/src/web/constants.ts
CHANGED
@@ -1,20 +1,4 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
import { State } from '../State';
|
4
|
-
|
5
|
-
export const CONTENT_TOUCHES_DELAY = 240;
|
6
|
-
export const CONTENT_TOUCHES_QUICK_TAP_END_DELAY = 50;
|
7
|
-
export const MULTI_FINGER_PAN_MAX_PINCH_THRESHOLD = 0.1;
|
8
|
-
export const MULTI_FINGER_PAN_MAX_ROTATION_THRESHOLD = 7;
|
9
|
-
export const DEG_RAD = Math.PI / 180;
|
10
|
-
|
11
|
-
// Map Hammer values to RNGH
|
12
|
-
export const EventMap = {
|
13
|
-
[Hammer.INPUT_START]: State.BEGAN,
|
14
|
-
[Hammer.INPUT_MOVE]: State.ACTIVE,
|
15
|
-
[Hammer.INPUT_END]: State.END,
|
16
|
-
[Hammer.INPUT_CANCEL]: State.FAILED,
|
17
|
-
} as const;
|
1
|
+
export const DEFAULT_TOUCH_SLOP = 15;
|
18
2
|
|
19
3
|
export const Direction = {
|
20
4
|
RIGHT: 1,
|
@@ -22,27 +6,3 @@ export const Direction = {
|
|
22
6
|
UP: 4,
|
23
7
|
DOWN: 8,
|
24
8
|
};
|
25
|
-
|
26
|
-
export const DirectionMap = {
|
27
|
-
[Hammer.DIRECTION_RIGHT]: Direction.RIGHT,
|
28
|
-
[Hammer.DIRECTION_LEFT]: Direction.LEFT,
|
29
|
-
[Hammer.DIRECTION_UP]: Direction.UP,
|
30
|
-
[Hammer.DIRECTION_DOWN]: Direction.DOWN,
|
31
|
-
};
|
32
|
-
|
33
|
-
export const HammerInputNames = {
|
34
|
-
[Hammer.INPUT_START]: 'START',
|
35
|
-
[Hammer.INPUT_MOVE]: 'MOVE',
|
36
|
-
[Hammer.INPUT_END]: 'END',
|
37
|
-
[Hammer.INPUT_CANCEL]: 'CANCEL',
|
38
|
-
};
|
39
|
-
export const HammerDirectionNames = {
|
40
|
-
[Hammer.DIRECTION_HORIZONTAL]: 'HORIZONTAL',
|
41
|
-
[Hammer.DIRECTION_UP]: 'UP',
|
42
|
-
[Hammer.DIRECTION_DOWN]: 'DOWN',
|
43
|
-
[Hammer.DIRECTION_VERTICAL]: 'VERTICAL',
|
44
|
-
[Hammer.DIRECTION_NONE]: 'NONE',
|
45
|
-
[Hammer.DIRECTION_ALL]: 'ALL',
|
46
|
-
[Hammer.DIRECTION_RIGHT]: 'RIGHT',
|
47
|
-
[Hammer.DIRECTION_LEFT]: 'LEFT',
|
48
|
-
};
|
@@ -0,0 +1,199 @@
|
|
1
|
+
import { AdaptedPointerEvent, EventTypes } from '../interfaces';
|
2
|
+
import PointerTracker from '../tools/PointerTracker';
|
3
|
+
|
4
|
+
export interface RotationGestureListener {
|
5
|
+
onRotationBegin: (detector: RotationGestureDetector) => boolean;
|
6
|
+
onRotation: (
|
7
|
+
detector: RotationGestureDetector,
|
8
|
+
event: AdaptedPointerEvent
|
9
|
+
) => boolean;
|
10
|
+
onRotationEnd: (
|
11
|
+
detector: RotationGestureDetector,
|
12
|
+
event: AdaptedPointerEvent
|
13
|
+
) => void;
|
14
|
+
}
|
15
|
+
|
16
|
+
export default class RotationGestureDetector
|
17
|
+
implements RotationGestureListener {
|
18
|
+
onRotationBegin: (detector: RotationGestureDetector) => boolean;
|
19
|
+
onRotation: (
|
20
|
+
detector: RotationGestureDetector,
|
21
|
+
event: AdaptedPointerEvent
|
22
|
+
) => boolean;
|
23
|
+
onRotationEnd: (
|
24
|
+
detector: RotationGestureDetector,
|
25
|
+
event: AdaptedPointerEvent
|
26
|
+
) => void;
|
27
|
+
|
28
|
+
private currentTime = 0;
|
29
|
+
private previousTime = 0;
|
30
|
+
|
31
|
+
private previousAngle = 0;
|
32
|
+
private rotation = 0;
|
33
|
+
|
34
|
+
private anchorX = 0;
|
35
|
+
private anchorY = 0;
|
36
|
+
|
37
|
+
private isInProgress = false;
|
38
|
+
|
39
|
+
private keyPointers: number[] = [NaN, NaN];
|
40
|
+
|
41
|
+
constructor(callbacks: RotationGestureListener) {
|
42
|
+
this.onRotationBegin = callbacks.onRotationBegin;
|
43
|
+
this.onRotation = callbacks.onRotation;
|
44
|
+
this.onRotationEnd = callbacks.onRotationEnd;
|
45
|
+
}
|
46
|
+
|
47
|
+
private updateCurrent(
|
48
|
+
event: AdaptedPointerEvent,
|
49
|
+
tracker: PointerTracker
|
50
|
+
): void {
|
51
|
+
this.previousTime = this.currentTime;
|
52
|
+
this.currentTime = event.time;
|
53
|
+
|
54
|
+
const [firstPointerID, secondPointerID] = this.keyPointers;
|
55
|
+
|
56
|
+
const firstPointerX: number = tracker.getLastX(firstPointerID);
|
57
|
+
const firstPointerY: number = tracker.getLastY(firstPointerID);
|
58
|
+
const secondPointerX: number = tracker.getLastX(secondPointerID);
|
59
|
+
const secondPointerY: number = tracker.getLastY(secondPointerID);
|
60
|
+
|
61
|
+
const vectorX: number = secondPointerX - firstPointerX;
|
62
|
+
const vectorY: number = secondPointerY - firstPointerY;
|
63
|
+
|
64
|
+
this.anchorX = (firstPointerX + secondPointerX) / 2;
|
65
|
+
this.anchorY = (firstPointerY + secondPointerY) / 2;
|
66
|
+
|
67
|
+
//Angle diff should be positive when rotating in clockwise direction
|
68
|
+
const angle: number = -Math.atan2(vectorY, vectorX);
|
69
|
+
this.rotation = Number.isNaN(this.previousAngle)
|
70
|
+
? 0
|
71
|
+
: this.previousAngle - angle;
|
72
|
+
|
73
|
+
this.previousAngle = angle;
|
74
|
+
|
75
|
+
if (this.rotation > Math.PI) {
|
76
|
+
this.rotation -= Math.PI;
|
77
|
+
} else if (this.rotation < -Math.PI) {
|
78
|
+
this.rotation += Math.PI;
|
79
|
+
}
|
80
|
+
|
81
|
+
if (this.rotation > Math.PI / 2) {
|
82
|
+
this.rotation -= Math.PI;
|
83
|
+
} else if (this.rotation < -Math.PI / 2) {
|
84
|
+
this.rotation += Math.PI;
|
85
|
+
}
|
86
|
+
}
|
87
|
+
|
88
|
+
private finish(event: AdaptedPointerEvent): void {
|
89
|
+
if (!this.isInProgress) {
|
90
|
+
return;
|
91
|
+
}
|
92
|
+
|
93
|
+
this.isInProgress = false;
|
94
|
+
this.keyPointers = [NaN, NaN];
|
95
|
+
this.onRotationEnd(this, event);
|
96
|
+
}
|
97
|
+
|
98
|
+
private setKeyPointers(tracker: PointerTracker): void {
|
99
|
+
if (this.keyPointers[0] && this.keyPointers[1]) {
|
100
|
+
return;
|
101
|
+
}
|
102
|
+
|
103
|
+
const pointerIDs: IterableIterator<number> = tracker.getData().keys();
|
104
|
+
|
105
|
+
this.keyPointers[0] = pointerIDs.next().value as number;
|
106
|
+
this.keyPointers[1] = pointerIDs.next().value as number;
|
107
|
+
}
|
108
|
+
|
109
|
+
public onTouchEvent(
|
110
|
+
event: AdaptedPointerEvent,
|
111
|
+
tracker: PointerTracker
|
112
|
+
): boolean {
|
113
|
+
this.adaptEvent(event, tracker);
|
114
|
+
|
115
|
+
switch (event.eventType) {
|
116
|
+
case EventTypes.DOWN:
|
117
|
+
this.isInProgress = false;
|
118
|
+
break;
|
119
|
+
|
120
|
+
case EventTypes.ADDITIONAL_POINTER_DOWN:
|
121
|
+
if (this.isInProgress) {
|
122
|
+
break;
|
123
|
+
}
|
124
|
+
|
125
|
+
this.isInProgress = true;
|
126
|
+
|
127
|
+
this.previousTime = event.time;
|
128
|
+
this.previousAngle = NaN;
|
129
|
+
|
130
|
+
this.setKeyPointers(tracker);
|
131
|
+
|
132
|
+
this.updateCurrent(event, tracker);
|
133
|
+
this.onRotationBegin(this);
|
134
|
+
break;
|
135
|
+
|
136
|
+
case EventTypes.MOVE:
|
137
|
+
if (!this.isInProgress) {
|
138
|
+
break;
|
139
|
+
}
|
140
|
+
|
141
|
+
this.updateCurrent(event, tracker);
|
142
|
+
this.onRotation(this, event);
|
143
|
+
|
144
|
+
break;
|
145
|
+
|
146
|
+
case EventTypes.ADDITIONAL_POINTER_UP:
|
147
|
+
if (!this.isInProgress) {
|
148
|
+
break;
|
149
|
+
}
|
150
|
+
|
151
|
+
if (this.keyPointers.indexOf(event.pointerId) >= 0) {
|
152
|
+
this.finish(event);
|
153
|
+
}
|
154
|
+
|
155
|
+
break;
|
156
|
+
|
157
|
+
case EventTypes.UP:
|
158
|
+
this.finish(event);
|
159
|
+
break;
|
160
|
+
}
|
161
|
+
|
162
|
+
return true;
|
163
|
+
}
|
164
|
+
|
165
|
+
private adaptEvent(
|
166
|
+
event: AdaptedPointerEvent,
|
167
|
+
tracker: PointerTracker
|
168
|
+
): void {
|
169
|
+
if (
|
170
|
+
tracker.getTrackedPointersCount() &&
|
171
|
+
event.eventType === EventTypes.DOWN
|
172
|
+
) {
|
173
|
+
event.eventType = EventTypes.ADDITIONAL_POINTER_DOWN;
|
174
|
+
}
|
175
|
+
|
176
|
+
if (
|
177
|
+
tracker.getTrackedPointersCount() > 1 &&
|
178
|
+
event.eventType === EventTypes.UP
|
179
|
+
) {
|
180
|
+
event.eventType = EventTypes.ADDITIONAL_POINTER_UP;
|
181
|
+
}
|
182
|
+
}
|
183
|
+
|
184
|
+
public getTimeDelta(): number {
|
185
|
+
return this.currentTime + this.previousTime;
|
186
|
+
}
|
187
|
+
|
188
|
+
public getAnchorX(): number {
|
189
|
+
return this.anchorX;
|
190
|
+
}
|
191
|
+
|
192
|
+
public getAnchorY(): number {
|
193
|
+
return this.anchorY;
|
194
|
+
}
|
195
|
+
|
196
|
+
public getRotation(): number {
|
197
|
+
return this.rotation;
|
198
|
+
}
|
199
|
+
}
|
@@ -0,0 +1,208 @@
|
|
1
|
+
import { DEFAULT_TOUCH_SLOP } from '../constants';
|
2
|
+
import { AdaptedPointerEvent, EventTypes } from '../interfaces';
|
3
|
+
|
4
|
+
import PointerTracker from '../tools/PointerTracker';
|
5
|
+
|
6
|
+
export interface ScaleGestureListener {
|
7
|
+
onScaleBegin: (detector: ScaleGestureDetector) => boolean;
|
8
|
+
onScale: (
|
9
|
+
detector: ScaleGestureDetector,
|
10
|
+
event: AdaptedPointerEvent
|
11
|
+
) => boolean;
|
12
|
+
onScaleEnd: (
|
13
|
+
detector: ScaleGestureDetector,
|
14
|
+
event: AdaptedPointerEvent
|
15
|
+
) => void;
|
16
|
+
}
|
17
|
+
|
18
|
+
export default class ScaleGestureDetector implements ScaleGestureListener {
|
19
|
+
public onScaleBegin: (detector: ScaleGestureDetector) => boolean;
|
20
|
+
public onScale: (
|
21
|
+
detector: ScaleGestureDetector,
|
22
|
+
event: AdaptedPointerEvent
|
23
|
+
) => boolean;
|
24
|
+
public onScaleEnd: (
|
25
|
+
detector: ScaleGestureDetector,
|
26
|
+
event: AdaptedPointerEvent
|
27
|
+
) => void;
|
28
|
+
|
29
|
+
private focusX!: number;
|
30
|
+
private focusY!: number;
|
31
|
+
|
32
|
+
private currentSpan!: number;
|
33
|
+
private prevSpan!: number;
|
34
|
+
private initialSpan!: number;
|
35
|
+
|
36
|
+
private currentTime!: number;
|
37
|
+
private prevTime!: number;
|
38
|
+
|
39
|
+
private inProgress = false;
|
40
|
+
|
41
|
+
private spanSlop: number;
|
42
|
+
private minSpan: number;
|
43
|
+
|
44
|
+
public constructor(callbacks: ScaleGestureListener) {
|
45
|
+
this.onScaleBegin = callbacks.onScaleBegin;
|
46
|
+
this.onScale = callbacks.onScale;
|
47
|
+
this.onScaleEnd = callbacks.onScaleEnd;
|
48
|
+
|
49
|
+
this.spanSlop = DEFAULT_TOUCH_SLOP * 2;
|
50
|
+
this.minSpan = 0;
|
51
|
+
}
|
52
|
+
|
53
|
+
public onTouchEvent(
|
54
|
+
event: AdaptedPointerEvent,
|
55
|
+
tracker: PointerTracker
|
56
|
+
): boolean {
|
57
|
+
this.adaptEvent(event, tracker);
|
58
|
+
|
59
|
+
this.currentTime = event.time;
|
60
|
+
|
61
|
+
const action: EventTypes = event.eventType;
|
62
|
+
const numOfPointers = tracker.getTrackedPointersCount();
|
63
|
+
|
64
|
+
const streamComplete: boolean =
|
65
|
+
action === EventTypes.UP ||
|
66
|
+
action === EventTypes.ADDITIONAL_POINTER_UP ||
|
67
|
+
action === EventTypes.CANCEL;
|
68
|
+
|
69
|
+
if (action === EventTypes.DOWN || streamComplete) {
|
70
|
+
if (this.inProgress) {
|
71
|
+
this.onScaleEnd(this, event);
|
72
|
+
this.inProgress = false;
|
73
|
+
this.initialSpan = 0;
|
74
|
+
}
|
75
|
+
|
76
|
+
if (streamComplete) {
|
77
|
+
return true;
|
78
|
+
}
|
79
|
+
}
|
80
|
+
|
81
|
+
const configChanged: boolean =
|
82
|
+
action === EventTypes.DOWN ||
|
83
|
+
action === EventTypes.ADDITIONAL_POINTER_UP ||
|
84
|
+
action === EventTypes.ADDITIONAL_POINTER_DOWN;
|
85
|
+
|
86
|
+
const pointerUp = action === EventTypes.ADDITIONAL_POINTER_UP;
|
87
|
+
|
88
|
+
const ignoredPointer: number | undefined = pointerUp
|
89
|
+
? event.pointerId
|
90
|
+
: undefined;
|
91
|
+
|
92
|
+
//Determine focal point
|
93
|
+
|
94
|
+
const div: number = pointerUp ? numOfPointers - 1 : numOfPointers;
|
95
|
+
|
96
|
+
const sumX = tracker.getSumX(ignoredPointer);
|
97
|
+
const sumY = tracker.getSumY(ignoredPointer);
|
98
|
+
|
99
|
+
const focusX = sumX / div;
|
100
|
+
const focusY = sumY / div;
|
101
|
+
|
102
|
+
//Determine average deviation from focal point
|
103
|
+
|
104
|
+
let devSumX = 0;
|
105
|
+
let devSumY = 0;
|
106
|
+
|
107
|
+
tracker.getData().forEach((value, key) => {
|
108
|
+
if (key === ignoredPointer) {
|
109
|
+
return;
|
110
|
+
}
|
111
|
+
|
112
|
+
devSumX += Math.abs(value.lastX - focusX);
|
113
|
+
devSumY += Math.abs(value.lastY - focusY);
|
114
|
+
});
|
115
|
+
|
116
|
+
const devX: number = devSumX / div;
|
117
|
+
const devY: number = devSumY / div;
|
118
|
+
|
119
|
+
const spanX: number = devX * 2;
|
120
|
+
const spanY: number = devY * 2;
|
121
|
+
|
122
|
+
const span = Math.hypot(spanX, spanY);
|
123
|
+
|
124
|
+
//Begin/end events
|
125
|
+
const wasInProgress: boolean = this.inProgress;
|
126
|
+
this.focusX = focusX;
|
127
|
+
this.focusY = focusY;
|
128
|
+
|
129
|
+
if (this.inProgress && (span < this.minSpan || configChanged)) {
|
130
|
+
this.onScaleEnd(this, event);
|
131
|
+
this.inProgress = false;
|
132
|
+
this.initialSpan = span;
|
133
|
+
}
|
134
|
+
|
135
|
+
if (configChanged) {
|
136
|
+
this.initialSpan = this.prevSpan = this.currentSpan = span;
|
137
|
+
}
|
138
|
+
|
139
|
+
if (
|
140
|
+
!this.inProgress &&
|
141
|
+
span >= this.minSpan &&
|
142
|
+
(wasInProgress || Math.abs(span - this.initialSpan) > this.spanSlop)
|
143
|
+
) {
|
144
|
+
this.prevSpan = this.currentSpan = span;
|
145
|
+
this.prevTime = this.currentTime;
|
146
|
+
this.inProgress = this.onScaleBegin(this);
|
147
|
+
}
|
148
|
+
|
149
|
+
//Handle motion
|
150
|
+
if (action !== EventTypes.MOVE) {
|
151
|
+
return true;
|
152
|
+
}
|
153
|
+
|
154
|
+
this.currentSpan = span;
|
155
|
+
|
156
|
+
if (this.inProgress && !this.onScale(this, event)) {
|
157
|
+
return true;
|
158
|
+
}
|
159
|
+
|
160
|
+
this.prevSpan = this.currentSpan;
|
161
|
+
this.prevTime = this.currentTime;
|
162
|
+
|
163
|
+
return true;
|
164
|
+
}
|
165
|
+
|
166
|
+
private adaptEvent(
|
167
|
+
event: AdaptedPointerEvent,
|
168
|
+
tracker: PointerTracker
|
169
|
+
): void {
|
170
|
+
if (
|
171
|
+
tracker.getTrackedPointersCount() > 1 &&
|
172
|
+
event.eventType === EventTypes.DOWN
|
173
|
+
) {
|
174
|
+
event.eventType = EventTypes.ADDITIONAL_POINTER_DOWN;
|
175
|
+
}
|
176
|
+
|
177
|
+
if (
|
178
|
+
tracker.getTrackedPointersCount() > 1 &&
|
179
|
+
event.eventType === EventTypes.UP
|
180
|
+
) {
|
181
|
+
event.eventType = EventTypes.ADDITIONAL_POINTER_UP;
|
182
|
+
}
|
183
|
+
}
|
184
|
+
|
185
|
+
public getCurrentSpan(): number {
|
186
|
+
return this.currentSpan;
|
187
|
+
}
|
188
|
+
|
189
|
+
public getFocusX(): number {
|
190
|
+
return this.focusX;
|
191
|
+
}
|
192
|
+
|
193
|
+
public getFocusY(): number {
|
194
|
+
return this.focusY;
|
195
|
+
}
|
196
|
+
|
197
|
+
public getTimeDelta(): number {
|
198
|
+
return this.currentTime - this.prevTime;
|
199
|
+
}
|
200
|
+
|
201
|
+
public getScaleFactor(numOfPointers: number): number {
|
202
|
+
if (numOfPointers < 2) {
|
203
|
+
return 1;
|
204
|
+
}
|
205
|
+
|
206
|
+
return this.prevSpan > 0 ? this.currentSpan / this.prevSpan : 1;
|
207
|
+
}
|
208
|
+
}
|
@@ -0,0 +1,146 @@
|
|
1
|
+
import { State } from '../../State';
|
2
|
+
import { Direction } from '../constants';
|
3
|
+
import { AdaptedPointerEvent } from '../interfaces';
|
4
|
+
|
5
|
+
import GestureHandler from './GestureHandler';
|
6
|
+
|
7
|
+
const DEFAULT_MAX_DURATION_MS = 800;
|
8
|
+
const DEFAULT_MIN_ACCEPTABLE_DELTA = 160;
|
9
|
+
const DEFAULT_DIRECTION = Direction.RIGHT;
|
10
|
+
const DEFAULT_NUMBER_OF_TOUCHES_REQUIRED = 1;
|
11
|
+
|
12
|
+
export default class FlingGestureHandler extends GestureHandler {
|
13
|
+
private numberOfPointersRequired = DEFAULT_NUMBER_OF_TOUCHES_REQUIRED;
|
14
|
+
private direction = DEFAULT_DIRECTION;
|
15
|
+
|
16
|
+
private maxDurationMs = DEFAULT_MAX_DURATION_MS;
|
17
|
+
private minAcceptableDelta = DEFAULT_MIN_ACCEPTABLE_DELTA;
|
18
|
+
private delayTimeout!: number;
|
19
|
+
|
20
|
+
private startX = 0;
|
21
|
+
private startY = 0;
|
22
|
+
|
23
|
+
private maxNumberOfPointersSimultaneously = 0;
|
24
|
+
|
25
|
+
public init(ref: number, propsRef: React.RefObject<unknown>): void {
|
26
|
+
super.init(ref, propsRef);
|
27
|
+
}
|
28
|
+
|
29
|
+
public updateGestureConfig({ enabled = true, ...props }): void {
|
30
|
+
super.updateGestureConfig({ enabled: enabled, ...props });
|
31
|
+
|
32
|
+
this.enabled = enabled;
|
33
|
+
|
34
|
+
if (this.config.direction) {
|
35
|
+
this.direction = this.config.direction;
|
36
|
+
}
|
37
|
+
|
38
|
+
if (this.config.numberOfPointers) {
|
39
|
+
this.numberOfPointersRequired = this.config.numberOfPointers;
|
40
|
+
}
|
41
|
+
}
|
42
|
+
|
43
|
+
protected transformNativeEvent(event: AdaptedPointerEvent) {
|
44
|
+
return {
|
45
|
+
x: event.offsetX,
|
46
|
+
y: event.offsetY,
|
47
|
+
absoluteX: event.x,
|
48
|
+
absoluteY: event.y,
|
49
|
+
};
|
50
|
+
}
|
51
|
+
|
52
|
+
private startFling(event: AdaptedPointerEvent): void {
|
53
|
+
this.startX = event.x;
|
54
|
+
this.startY = event.y;
|
55
|
+
|
56
|
+
this.begin(event);
|
57
|
+
|
58
|
+
this.maxNumberOfPointersSimultaneously = 1;
|
59
|
+
|
60
|
+
this.delayTimeout = setTimeout(() => this.fail(event), this.maxDurationMs);
|
61
|
+
}
|
62
|
+
|
63
|
+
private tryEndFling(event: AdaptedPointerEvent): boolean {
|
64
|
+
if (
|
65
|
+
this.maxNumberOfPointersSimultaneously ===
|
66
|
+
this.numberOfPointersRequired &&
|
67
|
+
((this.direction & Direction.RIGHT &&
|
68
|
+
event.x - this.startX > this.minAcceptableDelta) ||
|
69
|
+
(this.direction & Direction.LEFT &&
|
70
|
+
this.startX - event.x > this.minAcceptableDelta) ||
|
71
|
+
(this.direction & Direction.UP &&
|
72
|
+
this.startY - event.y > this.minAcceptableDelta) ||
|
73
|
+
(this.direction & Direction.DOWN &&
|
74
|
+
event.y - this.startY > this.minAcceptableDelta))
|
75
|
+
) {
|
76
|
+
clearTimeout(this.delayTimeout);
|
77
|
+
this.activate(event);
|
78
|
+
|
79
|
+
return true;
|
80
|
+
}
|
81
|
+
|
82
|
+
return false;
|
83
|
+
}
|
84
|
+
|
85
|
+
private endFling(event: AdaptedPointerEvent) {
|
86
|
+
if (!this.tryEndFling(event)) {
|
87
|
+
this.fail(event);
|
88
|
+
}
|
89
|
+
}
|
90
|
+
|
91
|
+
protected onPointerDown(event: AdaptedPointerEvent): void {
|
92
|
+
super.onPointerDown(event);
|
93
|
+
|
94
|
+
this.tracker.addToTracker(event);
|
95
|
+
|
96
|
+
if (this.currentState === State.UNDETERMINED) {
|
97
|
+
this.startFling(event);
|
98
|
+
}
|
99
|
+
|
100
|
+
if (this.currentState !== State.BEGAN) {
|
101
|
+
return;
|
102
|
+
}
|
103
|
+
|
104
|
+
this.tryEndFling(event);
|
105
|
+
|
106
|
+
if (
|
107
|
+
this.tracker.getTrackedPointersCount() >
|
108
|
+
this.maxNumberOfPointersSimultaneously
|
109
|
+
) {
|
110
|
+
this.maxNumberOfPointersSimultaneously = this.tracker.getTrackedPointersCount();
|
111
|
+
}
|
112
|
+
}
|
113
|
+
|
114
|
+
protected onPointerMove(event: AdaptedPointerEvent): void {
|
115
|
+
this.tracker.track(event);
|
116
|
+
|
117
|
+
if (this.currentState !== State.BEGAN) {
|
118
|
+
return;
|
119
|
+
}
|
120
|
+
|
121
|
+
this.tryEndFling(event);
|
122
|
+
|
123
|
+
super.onPointerMove(event);
|
124
|
+
}
|
125
|
+
|
126
|
+
protected onPointerUp(event: AdaptedPointerEvent): void {
|
127
|
+
this.tracker.removeFromTracker(event.pointerId);
|
128
|
+
|
129
|
+
if (this.currentState !== State.BEGAN) {
|
130
|
+
return;
|
131
|
+
}
|
132
|
+
|
133
|
+
this.endFling(event);
|
134
|
+
}
|
135
|
+
|
136
|
+
protected activate(event: AdaptedPointerEvent, force?: boolean): void {
|
137
|
+
super.activate(event, force);
|
138
|
+
this.end(event);
|
139
|
+
}
|
140
|
+
|
141
|
+
protected resetConfig(): void {
|
142
|
+
super.resetConfig();
|
143
|
+
this.numberOfPointersRequired = DEFAULT_NUMBER_OF_TOUCHES_REQUIRED;
|
144
|
+
this.direction = DEFAULT_DIRECTION;
|
145
|
+
}
|
146
|
+
}
|