react-native-gesture-handler 2.5.0 → 2.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|
@@ -16,6 +16,7 @@ import {
|
|
|
16
16
|
DrawerLayoutAndroidProps as RNDrawerLayoutAndroidProps,
|
|
17
17
|
FlatList as RNFlatList,
|
|
18
18
|
FlatListProps as RNFlatListProps,
|
|
19
|
+
RefreshControl as RNRefreshControl,
|
|
19
20
|
} from 'react-native';
|
|
20
21
|
|
|
21
22
|
import createNativeWrapper from '../handlers/createNativeWrapper';
|
|
@@ -25,16 +26,53 @@ import {
|
|
|
25
26
|
nativeViewProps,
|
|
26
27
|
} from '../handlers/NativeViewGestureHandler';
|
|
27
28
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
29
|
+
import { toArray } from '../utils';
|
|
30
|
+
|
|
31
|
+
export const RefreshControl = createNativeWrapper(RNRefreshControl, {
|
|
31
32
|
disallowInterruption: true,
|
|
32
33
|
shouldCancelWhenOutside: false,
|
|
33
34
|
});
|
|
35
|
+
// eslint-disable-next-line @typescript-eslint/no-redeclare
|
|
36
|
+
export type RefreshControl = typeof RefreshControl & RNRefreshControl;
|
|
37
|
+
|
|
38
|
+
const GHScrollView = createNativeWrapper<PropsWithChildren<RNScrollViewProps>>(
|
|
39
|
+
RNScrollView,
|
|
40
|
+
{
|
|
41
|
+
disallowInterruption: true,
|
|
42
|
+
shouldCancelWhenOutside: false,
|
|
43
|
+
}
|
|
44
|
+
);
|
|
45
|
+
export const ScrollView = React.forwardRef<
|
|
46
|
+
RNScrollView,
|
|
47
|
+
RNScrollViewProps & NativeViewGestureHandlerProps
|
|
48
|
+
>((props, ref) => {
|
|
49
|
+
const refreshControlGestureRef = React.useRef<RefreshControl>(null);
|
|
50
|
+
const { refreshControl, waitFor, ...rest } = props;
|
|
51
|
+
|
|
52
|
+
return (
|
|
53
|
+
<GHScrollView
|
|
54
|
+
{...rest}
|
|
55
|
+
// @ts-ignore `ref` exists on `GHScrollView`
|
|
56
|
+
ref={ref}
|
|
57
|
+
waitFor={[...toArray(waitFor ?? []), refreshControlGestureRef]}
|
|
58
|
+
// @ts-ignore we don't pass `refreshing` prop as we only want to override the ref
|
|
59
|
+
refreshControl={
|
|
60
|
+
refreshControl ? (
|
|
61
|
+
<RefreshControl
|
|
62
|
+
{...refreshControl.props}
|
|
63
|
+
ref={refreshControlGestureRef}
|
|
64
|
+
/>
|
|
65
|
+
) : (
|
|
66
|
+
refreshControl
|
|
67
|
+
)
|
|
68
|
+
}
|
|
69
|
+
/>
|
|
70
|
+
);
|
|
71
|
+
});
|
|
34
72
|
// backward type compatibility with https://github.com/software-mansion/react-native-gesture-handler/blob/db78d3ca7d48e8ba57482d3fe9b0a15aa79d9932/react-native-gesture-handler.d.ts#L440-L457
|
|
35
73
|
// include methods of wrapped components by creating an intersection type with the RN component instead of duplicating them.
|
|
36
74
|
// eslint-disable-next-line @typescript-eslint/no-redeclare
|
|
37
|
-
export type ScrollView = typeof
|
|
75
|
+
export type ScrollView = typeof GHScrollView & RNScrollView;
|
|
38
76
|
|
|
39
77
|
export const Switch = createNativeWrapper<RNSwitchProps>(RNSwitch, {
|
|
40
78
|
shouldCancelWhenOutside: false,
|
|
@@ -56,9 +94,13 @@ export type DrawerLayoutAndroid = typeof DrawerLayoutAndroid &
|
|
|
56
94
|
RNDrawerLayoutAndroid;
|
|
57
95
|
|
|
58
96
|
export const FlatList = React.forwardRef((props, ref) => {
|
|
97
|
+
const refreshControlGestureRef = React.useRef<RefreshControl>(null);
|
|
98
|
+
|
|
99
|
+
const { waitFor, refreshControl, ...rest } = props;
|
|
100
|
+
|
|
59
101
|
const flatListProps = {};
|
|
60
102
|
const scrollViewProps = {};
|
|
61
|
-
for (const [propName, value] of Object.entries(
|
|
103
|
+
for (const [propName, value] of Object.entries(rest)) {
|
|
62
104
|
// https://github.com/microsoft/TypeScript/issues/26255
|
|
63
105
|
if ((nativeViewProps as readonly string[]).includes(propName)) {
|
|
64
106
|
// @ts-ignore - this function cannot have generic type so we have to ignore this error
|
|
@@ -70,14 +112,32 @@ export const FlatList = React.forwardRef((props, ref) => {
|
|
|
70
112
|
flatListProps[propName] = value;
|
|
71
113
|
}
|
|
72
114
|
}
|
|
115
|
+
|
|
73
116
|
return (
|
|
74
117
|
// @ts-ignore - this function cannot have generic type so we have to ignore this error
|
|
75
118
|
<RNFlatList
|
|
76
119
|
ref={ref}
|
|
77
120
|
{...flatListProps}
|
|
78
121
|
renderScrollComponent={(scrollProps) => (
|
|
79
|
-
<ScrollView
|
|
122
|
+
<ScrollView
|
|
123
|
+
{...{
|
|
124
|
+
...scrollProps,
|
|
125
|
+
...scrollViewProps,
|
|
126
|
+
waitFor: [...toArray(waitFor ?? []), refreshControlGestureRef],
|
|
127
|
+
}}
|
|
128
|
+
/>
|
|
80
129
|
)}
|
|
130
|
+
// @ts-ignore we don't pass `refreshing` prop as we only want to override the ref
|
|
131
|
+
refreshControl={
|
|
132
|
+
refreshControl ? (
|
|
133
|
+
<RefreshControl
|
|
134
|
+
{...refreshControl.props}
|
|
135
|
+
ref={refreshControlGestureRef}
|
|
136
|
+
/>
|
|
137
|
+
) : (
|
|
138
|
+
refreshControl
|
|
139
|
+
)
|
|
140
|
+
}
|
|
81
141
|
/>
|
|
82
142
|
);
|
|
83
143
|
}) as <ItemT = any>(
|
|
@@ -6,6 +6,7 @@ import {
|
|
|
6
6
|
TextInput as RNTextInput,
|
|
7
7
|
ScrollView as RNScrollView,
|
|
8
8
|
FlatListProps,
|
|
9
|
+
View,
|
|
9
10
|
} from 'react-native';
|
|
10
11
|
|
|
11
12
|
import createNativeWrapper from '../handlers/createNativeWrapper';
|
|
@@ -25,6 +26,10 @@ export const DrawerLayoutAndroid = createNativeWrapper(RNDrawerLayoutAndroid, {
|
|
|
25
26
|
});
|
|
26
27
|
// @ts-ignore -- TODO(TS) to investigate if it's needed
|
|
27
28
|
DrawerLayoutAndroid.positions = RNDrawerLayoutAndroid.positions;
|
|
29
|
+
// RefreshControl is implemented as a functional component, rendering a View
|
|
30
|
+
// NativeViewGestureHandler needs to set a ref on its child, which cannot be done
|
|
31
|
+
// on functional components
|
|
32
|
+
export const RefreshControl = createNativeWrapper(View);
|
|
28
33
|
|
|
29
34
|
export const FlatList = React.forwardRef(
|
|
30
35
|
<ItemT extends any>(props: FlatListProps<ItemT>, ref: any) => (
|
|
@@ -219,7 +219,7 @@ export default class Swipeable extends Component<
|
|
|
219
219
|
);
|
|
220
220
|
}
|
|
221
221
|
|
|
222
|
-
|
|
222
|
+
shouldComponentUpdate(props: SwipeableProps, state: SwipeableState) {
|
|
223
223
|
if (
|
|
224
224
|
this.props.friction !== props.friction ||
|
|
225
225
|
this.props.overshootLeft !== props.overshootLeft ||
|
|
@@ -231,6 +231,8 @@ export default class Swipeable extends Component<
|
|
|
231
231
|
) {
|
|
232
232
|
this.updateAnimatedEvent(props, state);
|
|
233
233
|
}
|
|
234
|
+
|
|
235
|
+
return true;
|
|
234
236
|
}
|
|
235
237
|
|
|
236
238
|
private onGestureEvent?: (
|
|
@@ -278,6 +278,7 @@ export default class GenericTouchable extends Component<
|
|
|
278
278
|
disallowInterruption={this.props.disallowInterruption}
|
|
279
279
|
testID={this.props.testID}
|
|
280
280
|
touchSoundDisabled={this.props.touchSoundDisabled ?? false}
|
|
281
|
+
enabled={!this.props.disabled}
|
|
281
282
|
{...this.props.extraButtonProps}>
|
|
282
283
|
<Animated.View {...coreProps} style={this.props.style}>
|
|
283
284
|
{this.props.children}
|
|
@@ -25,7 +25,7 @@ import {
|
|
|
25
25
|
scheduleFlushOperations,
|
|
26
26
|
} from './gestureHandlerCommon';
|
|
27
27
|
import { ValueOf } from '../typeUtils';
|
|
28
|
-
import { isFabric, isJestEnv } from '../utils';
|
|
28
|
+
import { isFabric, isJestEnv, tagMessage } from '../utils';
|
|
29
29
|
import { ActionType } from '../ActionType';
|
|
30
30
|
import { PressabilityDebugView } from './PressabilityDebugView';
|
|
31
31
|
|
|
@@ -407,6 +407,7 @@ export default function createHandler<
|
|
|
407
407
|
onGestureEvent,
|
|
408
408
|
onGestureHandlerEvent,
|
|
409
409
|
}: OnGestureEventHandlers = this.props;
|
|
410
|
+
|
|
410
411
|
if (onGestureEvent && typeof onGestureEvent !== 'function') {
|
|
411
412
|
// If it's not a method it should be an native Animated.event
|
|
412
413
|
// object. We set it directly as the handler for the view
|
|
@@ -469,7 +470,17 @@ export default function createHandler<
|
|
|
469
470
|
|
|
470
471
|
this.propsRef.current = events;
|
|
471
472
|
|
|
472
|
-
|
|
473
|
+
let child: any = null;
|
|
474
|
+
try {
|
|
475
|
+
child = React.Children.only(this.props.children);
|
|
476
|
+
} catch (e) {
|
|
477
|
+
throw new Error(
|
|
478
|
+
tagMessage(
|
|
479
|
+
`${name} got more than one view as a child. If you want the gesture to work on multiple views, wrap them with a common parent and attach the gesture to that view.`
|
|
480
|
+
)
|
|
481
|
+
);
|
|
482
|
+
}
|
|
483
|
+
|
|
473
484
|
let grandChildren = child.props.children;
|
|
474
485
|
if (
|
|
475
486
|
__DEV__ &&
|
|
@@ -40,6 +40,8 @@ import { getShadowNodeFromRef } from '../../getShadowNodeFromRef';
|
|
|
40
40
|
import { Platform } from 'react-native';
|
|
41
41
|
import type RNGestureHandlerModuleWeb from '../../RNGestureHandlerModule.web';
|
|
42
42
|
import { onGestureHandlerEvent } from './eventReceiver';
|
|
43
|
+
import { RNRenderer } from '../../RNRenderer';
|
|
44
|
+
import { isExperimentalWebImplementationEnabled } from '../../EnableExperimentalWebImplementation';
|
|
43
45
|
|
|
44
46
|
declare const global: {
|
|
45
47
|
isFormsStackingContext: (node: unknown) => boolean | null; // JSI function
|
|
@@ -116,6 +118,9 @@ function checkGestureCallbacksForWorklets(gesture: GestureType) {
|
|
|
116
118
|
|
|
117
119
|
interface WebEventHandler {
|
|
118
120
|
onGestureHandlerEvent: (event: HandlerStateChangeEvent<unknown>) => void;
|
|
121
|
+
onGestureHandlerStateChange?: (
|
|
122
|
+
event: HandlerStateChangeEvent<unknown>
|
|
123
|
+
) => void;
|
|
119
124
|
}
|
|
120
125
|
|
|
121
126
|
interface AttachHandlersConfig {
|
|
@@ -511,6 +516,51 @@ function useAnimatedGesture(
|
|
|
511
516
|
preparedGesture.animatedHandlers = sharedHandlersCallbacks;
|
|
512
517
|
}
|
|
513
518
|
|
|
519
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
520
|
+
function validateDetectorChildren(ref: any) {
|
|
521
|
+
// finds the first native view under the Wrap component and traverses the fiber tree upwards
|
|
522
|
+
// to check whether there is more than one native view as a pseudo-direct child of GestureDetector
|
|
523
|
+
// i.e. this is not ok:
|
|
524
|
+
// Wrap
|
|
525
|
+
// |
|
|
526
|
+
// / \
|
|
527
|
+
// / \
|
|
528
|
+
// / \
|
|
529
|
+
// / \
|
|
530
|
+
// NativeView NativeView
|
|
531
|
+
//
|
|
532
|
+
// but this is fine:
|
|
533
|
+
// Wrap
|
|
534
|
+
// |
|
|
535
|
+
// NativeView
|
|
536
|
+
// |
|
|
537
|
+
// / \
|
|
538
|
+
// / \
|
|
539
|
+
// / \
|
|
540
|
+
// / \
|
|
541
|
+
// NativeView NativeView
|
|
542
|
+
if (__DEV__ && Platform.OS !== 'web') {
|
|
543
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access
|
|
544
|
+
const wrapType = ref._reactInternals.elementType;
|
|
545
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call
|
|
546
|
+
let instance = RNRenderer.findHostInstance_DEPRECATED(ref)
|
|
547
|
+
._internalFiberInstanceHandleDEV;
|
|
548
|
+
|
|
549
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
|
|
550
|
+
while (instance && instance.elementType !== wrapType) {
|
|
551
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
|
|
552
|
+
if (instance.sibling) {
|
|
553
|
+
throw new Error(
|
|
554
|
+
'GestureDetector has more than one native view as its children. This can happen if you are using a custom component that renders multiple views, like React.Fragment. You should wrap content of GestureDetector with a <View> or <Animated.View>.'
|
|
555
|
+
);
|
|
556
|
+
}
|
|
557
|
+
|
|
558
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access
|
|
559
|
+
instance = instance.return;
|
|
560
|
+
}
|
|
561
|
+
}
|
|
562
|
+
}
|
|
563
|
+
|
|
514
564
|
interface GestureDetectorProps {
|
|
515
565
|
gesture?: ComposedGesture | GestureType;
|
|
516
566
|
children?: React.ReactNode;
|
|
@@ -525,6 +575,11 @@ export const GestureDetector = (props: GestureDetectorProps) => {
|
|
|
525
575
|
onGestureHandlerEvent: (e: HandlerStateChangeEvent<unknown>) => {
|
|
526
576
|
onGestureHandlerEvent(e.nativeEvent);
|
|
527
577
|
},
|
|
578
|
+
onGestureHandlerStateChange: isExperimentalWebImplementationEnabled()
|
|
579
|
+
? (e: HandlerStateChangeEvent<unknown>) => {
|
|
580
|
+
onGestureHandlerEvent(e.nativeEvent);
|
|
581
|
+
}
|
|
582
|
+
: undefined,
|
|
528
583
|
});
|
|
529
584
|
|
|
530
585
|
const preparedGesture = React.useRef<GestureConfigReference>({
|
|
@@ -561,6 +616,8 @@ export const GestureDetector = (props: GestureDetectorProps) => {
|
|
|
561
616
|
useEffect(() => {
|
|
562
617
|
firstRenderRef.current = true;
|
|
563
618
|
const viewTag = findNodeHandle(viewRef.current) as number;
|
|
619
|
+
|
|
620
|
+
validateDetectorChildren(viewRef.current);
|
|
564
621
|
attachHandlers({
|
|
565
622
|
preparedGesture,
|
|
566
623
|
gestureConfig,
|
|
@@ -579,6 +636,7 @@ export const GestureDetector = (props: GestureDetectorProps) => {
|
|
|
579
636
|
const viewTag = findNodeHandle(viewRef.current) as number;
|
|
580
637
|
|
|
581
638
|
if (needsToReattach(preparedGesture, gesture)) {
|
|
639
|
+
validateDetectorChildren(viewRef.current);
|
|
582
640
|
dropHandlers(preparedGesture);
|
|
583
641
|
attachHandlers({
|
|
584
642
|
preparedGesture,
|
|
@@ -633,18 +691,26 @@ class Wrap extends React.Component<{
|
|
|
633
691
|
children?: React.ReactNode;
|
|
634
692
|
}> {
|
|
635
693
|
render() {
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
694
|
+
try {
|
|
695
|
+
// I don't think that fighting with types over such a simple function is worth it
|
|
696
|
+
// The only thing it does is add 'collapsable: false' to the child component
|
|
697
|
+
// to make sure it is in the native view hierarchy so the detector can find
|
|
698
|
+
// correct viewTag to attach to.
|
|
699
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
700
|
+
const child: any = React.Children.only(this.props.children);
|
|
701
|
+
return React.cloneElement(
|
|
702
|
+
child,
|
|
703
|
+
{ collapsable: false },
|
|
704
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
|
|
705
|
+
child.props.children
|
|
706
|
+
);
|
|
707
|
+
} catch (e) {
|
|
708
|
+
throw new Error(
|
|
709
|
+
tagMessage(
|
|
710
|
+
`GestureDetector got more than one view as a child. If you want the gesture to work on multiple views, wrap them with a common parent and attach the gesture to that view.`
|
|
711
|
+
)
|
|
712
|
+
);
|
|
713
|
+
}
|
|
648
714
|
}
|
|
649
715
|
}
|
|
650
716
|
|
|
@@ -30,6 +30,13 @@ let Reanimated: {
|
|
|
30
30
|
try {
|
|
31
31
|
Reanimated = require('react-native-reanimated');
|
|
32
32
|
|
|
33
|
+
if (!Reanimated.useSharedValue) {
|
|
34
|
+
// @ts-ignore Make sure the loaded module is actually Reanimated, if it's not
|
|
35
|
+
// reset the module to undefined so we can fallback to the default implementation
|
|
36
|
+
Reanimated = undefined;
|
|
37
|
+
throw new Error('react-native-reanimated is not found');
|
|
38
|
+
}
|
|
39
|
+
|
|
33
40
|
if (!Reanimated.setGestureState) {
|
|
34
41
|
Reanimated.setGestureState = () => {
|
|
35
42
|
'worklet';
|
package/src/index.ts
CHANGED
|
@@ -105,6 +105,7 @@ export {
|
|
|
105
105
|
TextInput,
|
|
106
106
|
DrawerLayoutAndroid,
|
|
107
107
|
FlatList,
|
|
108
|
+
RefreshControl,
|
|
108
109
|
} from './components/GestureComponents';
|
|
109
110
|
export type {
|
|
110
111
|
//events
|
|
@@ -156,4 +157,6 @@ export type {
|
|
|
156
157
|
} from './components/DrawerLayout';
|
|
157
158
|
export { default as DrawerLayout } from './components/DrawerLayout';
|
|
158
159
|
|
|
160
|
+
export { enableExperimentalWebImplementation } from './EnableExperimentalWebImplementation';
|
|
161
|
+
|
|
159
162
|
initialize();
|
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
|
+
}
|