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
@@ -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
|
+
}
|