react-native-gesture-handler 2.5.0 → 2.6.0
Sign up to get free protection for your applications and to get access to all the features.
- package/README.md +1 -0
- 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/GestureHandlerOrchestrator.kt +30 -9
- package/android/lib/src/main/java/com/swmansion/gesturehandler/LongPressGestureHandler.kt +5 -2
- package/android/lib/src/main/java/com/swmansion/gesturehandler/NativeViewGestureHandler.kt +2 -1
- package/android/lib/src/main/java/com/swmansion/gesturehandler/PanGestureHandler.kt +2 -1
- 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/RNGestureHandlerInteractionManager.kt +7 -1
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerModule.kt +1 -1
- package/android/src/main/jni/CMakeLists.txt +59 -0
- package/ios/RNGestureHandlerButtonComponentView.mm +1 -1
- package/ios/RNGestureHandlerManager.mm +0 -5
- package/ios/RNGestureHandlerRootViewComponentView.mm +1 -1
- package/lib/commonjs/EnableExperimentalWebImplementation.js +24 -0
- package/lib/commonjs/EnableExperimentalWebImplementation.js.map +1 -0
- package/lib/commonjs/RNGestureHandlerModule.macos.js +87 -30
- package/lib/commonjs/RNGestureHandlerModule.macos.js.map +1 -1
- 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 +3 -1
- 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 +2 -1
- package/lib/commonjs/components/touchables/GenericTouchable.js.map +1 -1
- package/lib/commonjs/handlers/createHandler.js +8 -1
- package/lib/commonjs/handlers/createHandler.js.map +1 -1
- package/lib/commonjs/handlers/gestures/GestureDetector.js +67 -12
- package/lib/commonjs/handlers/gestures/GestureDetector.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/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 +0 -0
- package/lib/module/EnableExperimentalWebImplementation.js +15 -0
- package/lib/module/EnableExperimentalWebImplementation.js.map +1 -0
- package/lib/module/RNGestureHandlerModule.macos.js +74 -29
- package/lib/module/RNGestureHandlerModule.macos.js.map +1 -1
- 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 +3 -1
- 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 +2 -1
- package/lib/module/components/touchables/GenericTouchable.js.map +1 -1
- package/lib/module/handlers/createHandler.js +9 -2
- package/lib/module/handlers/createHandler.js.map +1 -1
- package/lib/module/handlers/gestures/GestureDetector.js +64 -11
- package/lib/module/handlers/gestures/GestureDetector.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/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 +0 -0
- package/lib/typescript/EnableExperimentalWebImplementation.d.ts +2 -0
- package/lib/typescript/RNGestureHandlerModule.macos.d.ts +28 -18
- 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 +1 -1
- package/lib/typescript/components/GestureButtons.d.ts +16 -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/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 +81 -29
- 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 +3 -4
- package/src/components/GestureButtons.tsx +57 -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 +1 -0
- package/src/handlers/createHandler.tsx +13 -2
- package/src/handlers/gestures/GestureDetector.tsx +78 -12
- package/src/handlers/gestures/reanimatedWrapper.ts +7 -0
- package/src/index.ts +3 -0
- 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 +0 -0
- package/android/src/main/jni/Android.mk +0 -52
- 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/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
@@ -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
|
+
}
|