react-native-gesture-handler 2.7.1 → 2.9.0
Sign up to get free protection for your applications and to get access to all the features.
- package/RNGestureHandler.podspec +1 -1
- package/android/build.gradle +53 -46
- package/android/noreanimated/src/main/java/com/swmansion/gesturehandler/ReanimatedEventDispatcher.kt +3 -3
- package/android/reanimated/src/main/java/com/swmansion/gesturehandler/ReanimatedEventDispatcher.kt +7 -7
- package/android/src/fabric/java/com/swmansion/gesturehandler/ReactContextExtensions.kt +2 -2
- package/android/src/main/java/com/swmansion/gesturehandler/RNGestureHandlerPackage.kt +3 -3
- package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/FlingGestureHandler.kt +12 -9
- package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/GestureHandler.kt +39 -31
- package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/GestureHandlerInteractionController.kt +1 -1
- package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/GestureHandlerOrchestrator.kt +28 -19
- package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/GestureHandlerRegistry.kt +1 -1
- package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/GestureUtils.kt +1 -1
- package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/LongPressGestureHandler.kt +1 -1
- package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/ManualGestureHandler.kt +1 -1
- package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/NativeViewGestureHandler.kt +5 -5
- package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/OnTouchEventListener.kt +1 -1
- package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/PanGestureHandler.kt +7 -5
- package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/PinchGestureHandler.kt +11 -4
- package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/PointerEventsConfig.kt +1 -1
- package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/RotationGestureDetector.kt +1 -1
- package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/RotationGestureHandler.kt +7 -2
- package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/ScaleGestureDetector.java +1 -1
- package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/TapGestureHandler.kt +3 -3
- package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/ViewConfigurationHelper.kt +1 -1
- package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/react}/Extensions.kt +3 -3
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerButtonViewManager.kt +8 -6
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEnabledRootView.kt +1 -5
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEvent.kt +20 -8
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEventDataExtractor.kt +1 -1
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerInteractionManager.kt +3 -3
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerModule.kt +40 -15
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRegistry.kt +2 -2
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootHelper.kt +8 -6
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootView.kt +0 -2
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootViewManager.kt +4 -2
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerStateChangeEvent.kt +7 -7
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerTouchEvent.kt +5 -5
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNViewConfigurationHelper.kt +2 -2
- package/android/src/main/jni/CMakeLists.txt +10 -44
- package/android/src/main/jni/cpp-adapter.cpp +16 -13
- package/android/src/paper/java/com/swmansion/gesturehandler/ReactContextExtensions.kt +5 -5
- package/ios/Handlers/RNFlingHandler.m +39 -37
- package/ios/Handlers/RNForceTouchHandler.m +19 -17
- package/ios/Handlers/RNLongPressHandler.m +20 -22
- package/ios/Handlers/RNManualHandler.m +23 -8
- package/ios/Handlers/RNNativeViewHandler.mm +92 -88
- package/ios/Handlers/RNPanHandler.m +28 -32
- package/ios/Handlers/RNPinchHandler.m +9 -10
- package/ios/Handlers/RNRotationHandler.m +11 -14
- package/ios/Handlers/RNTapHandler.m +26 -26
- package/ios/RNGestureHandler.h +31 -24
- package/ios/RNGestureHandler.m +278 -273
- package/ios/RNGestureHandlerActionType.h +6 -4
- package/ios/RNGestureHandlerButton.m +11 -12
- package/ios/RNGestureHandlerButtonComponentView.mm +7 -8
- package/ios/RNGestureHandlerButtonManager.m +6 -5
- package/ios/RNGestureHandlerDirection.h +4 -4
- package/ios/RNGestureHandlerEvents.h +3 -4
- package/ios/RNGestureHandlerEvents.m +114 -119
- package/ios/RNGestureHandlerManager.h +1 -2
- package/ios/RNGestureHandlerManager.mm +176 -178
- package/ios/RNGestureHandlerModule.h +1 -2
- package/ios/RNGestureHandlerModule.mm +126 -122
- package/ios/RNGestureHandlerPointerTracker.h +1 -1
- package/ios/RNGestureHandlerPointerTracker.m +40 -37
- package/ios/RNGestureHandlerRegistry.h +3 -1
- package/ios/RNGestureHandlerRegistry.m +24 -22
- package/ios/RNGestureHandlerState.h +6 -6
- package/ios/RNGestureHandlerStateManager.h +1 -1
- package/ios/RNManualActivationRecognizer.m +9 -9
- package/ios/RNRootViewGestureRecognizer.m +36 -39
- package/lib/commonjs/RNGestureHandlerModule.macos.js.map +1 -1
- package/lib/commonjs/RNGestureHandlerModule.web.js.map +1 -1
- package/lib/commonjs/RNGestureHandlerModule.windows.js +156 -0
- package/lib/commonjs/RNGestureHandlerModule.windows.js.map +1 -0
- package/lib/commonjs/components/DrawerLayout.js +1 -0
- package/lib/commonjs/components/DrawerLayout.js.map +1 -1
- package/lib/commonjs/components/Swipeable.js.map +1 -1
- package/lib/commonjs/components/touchables/TouchableOpacity.js.map +1 -1
- package/lib/commonjs/gestureHandlerRootHOC.js +2 -1
- package/lib/commonjs/gestureHandlerRootHOC.js.map +1 -1
- package/lib/commonjs/getShadowNodeFromRef.js +2 -2
- package/lib/commonjs/getShadowNodeFromRef.js.map +1 -1
- package/lib/commonjs/handlers/LongPressGestureHandler.js +3 -1
- package/lib/commonjs/handlers/LongPressGestureHandler.js.map +1 -1
- package/lib/commonjs/handlers/TapGestureHandler.js +3 -1
- package/lib/commonjs/handlers/TapGestureHandler.js.map +1 -1
- package/lib/commonjs/handlers/createHandler.js.map +1 -1
- package/lib/commonjs/handlers/gestureHandlerCommon.js +5 -2
- package/lib/commonjs/handlers/gestureHandlerCommon.js.map +1 -1
- package/lib/commonjs/handlers/gestureHandlerTypesCompat.js +4 -0
- package/lib/commonjs/handlers/gestures/GestureDetector.js +87 -38
- package/lib/commonjs/handlers/gestures/GestureDetector.js.map +1 -1
- package/lib/commonjs/handlers/gestures/eventReceiver.js.map +1 -1
- package/lib/commonjs/handlers/gestures/gesture.js.map +1 -1
- package/lib/commonjs/handlers/gestures/longPressGesture.js +1 -0
- package/lib/commonjs/handlers/gestures/longPressGesture.js.map +1 -1
- package/lib/commonjs/handlers/gestures/tapGesture.js +1 -0
- package/lib/commonjs/handlers/gestures/tapGesture.js.map +1 -1
- package/lib/commonjs/jestUtils/jestUtils.js.map +1 -1
- package/lib/commonjs/web/detectors/RotationGestureDetector.js.map +1 -1
- package/lib/commonjs/web/handlers/FlingGestureHandler.js +0 -1
- package/lib/commonjs/web/handlers/FlingGestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/GestureHandler.js +28 -3
- package/lib/commonjs/web/handlers/GestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/LongPressGestureHandler.js +0 -2
- package/lib/commonjs/web/handlers/LongPressGestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/ManualGestureHandler.js +15 -0
- package/lib/commonjs/web/handlers/ManualGestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/NativeViewGestureHandler.js +0 -2
- package/lib/commonjs/web/handlers/NativeViewGestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/PanGestureHandler.js +0 -5
- package/lib/commonjs/web/handlers/PanGestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/PinchGestureHandler.js +0 -1
- package/lib/commonjs/web/handlers/PinchGestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/RotationGestureHandler.js +0 -1
- package/lib/commonjs/web/handlers/RotationGestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/TapGestureHandler.js +0 -2
- package/lib/commonjs/web/handlers/TapGestureHandler.js.map +1 -1
- package/lib/commonjs/web/interfaces.js.map +1 -1
- package/lib/commonjs/web/tools/InteractionManager.js.map +1 -1
- package/lib/commonjs/web_hammer/GestureHandler.js.map +1 -1
- package/lib/commonjs/web_hammer/NodeManager.js +4 -1
- package/lib/commonjs/web_hammer/NodeManager.js.map +1 -1
- package/lib/commonjs/web_hammer/PanGestureHandler.js +25 -6
- package/lib/commonjs/web_hammer/PanGestureHandler.js.map +1 -1
- package/lib/module/RNGestureHandlerModule.macos.js.map +1 -1
- package/lib/module/RNGestureHandlerModule.web.js.map +1 -1
- package/lib/module/RNGestureHandlerModule.windows.js +117 -0
- package/lib/module/RNGestureHandlerModule.windows.js.map +1 -0
- package/lib/module/components/DrawerLayout.js +1 -0
- package/lib/module/components/DrawerLayout.js.map +1 -1
- package/lib/module/components/Swipeable.js.map +1 -1
- package/lib/module/components/touchables/TouchableOpacity.js.map +1 -1
- package/lib/module/gestureHandlerRootHOC.js +2 -1
- package/lib/module/gestureHandlerRootHOC.js.map +1 -1
- package/lib/module/getShadowNodeFromRef.js +2 -2
- package/lib/module/getShadowNodeFromRef.js.map +1 -1
- package/lib/module/handlers/LongPressGestureHandler.js +3 -1
- package/lib/module/handlers/LongPressGestureHandler.js.map +1 -1
- package/lib/module/handlers/TapGestureHandler.js +3 -1
- package/lib/module/handlers/TapGestureHandler.js.map +1 -1
- package/lib/module/handlers/createHandler.js.map +1 -1
- package/lib/module/handlers/gestureHandlerCommon.js +5 -2
- package/lib/module/handlers/gestureHandlerCommon.js.map +1 -1
- package/lib/module/handlers/gestureHandlerTypesCompat.js +1 -1
- package/lib/module/handlers/gestures/GestureDetector.js +89 -39
- package/lib/module/handlers/gestures/GestureDetector.js.map +1 -1
- package/lib/module/handlers/gestures/eventReceiver.js.map +1 -1
- package/lib/module/handlers/gestures/gesture.js.map +1 -1
- package/lib/module/handlers/gestures/longPressGesture.js +1 -0
- package/lib/module/handlers/gestures/longPressGesture.js.map +1 -1
- package/lib/module/handlers/gestures/tapGesture.js +1 -0
- package/lib/module/handlers/gestures/tapGesture.js.map +1 -1
- package/lib/module/jestUtils/jestUtils.js.map +1 -1
- package/lib/module/web/detectors/RotationGestureDetector.js.map +1 -1
- package/lib/module/web/handlers/FlingGestureHandler.js +0 -1
- package/lib/module/web/handlers/FlingGestureHandler.js.map +1 -1
- package/lib/module/web/handlers/GestureHandler.js +28 -3
- package/lib/module/web/handlers/GestureHandler.js.map +1 -1
- package/lib/module/web/handlers/LongPressGestureHandler.js +0 -2
- package/lib/module/web/handlers/LongPressGestureHandler.js.map +1 -1
- package/lib/module/web/handlers/ManualGestureHandler.js +15 -0
- package/lib/module/web/handlers/ManualGestureHandler.js.map +1 -1
- package/lib/module/web/handlers/NativeViewGestureHandler.js +0 -2
- package/lib/module/web/handlers/NativeViewGestureHandler.js.map +1 -1
- package/lib/module/web/handlers/PanGestureHandler.js +0 -5
- package/lib/module/web/handlers/PanGestureHandler.js.map +1 -1
- package/lib/module/web/handlers/PinchGestureHandler.js +0 -1
- package/lib/module/web/handlers/PinchGestureHandler.js.map +1 -1
- package/lib/module/web/handlers/RotationGestureHandler.js +0 -1
- package/lib/module/web/handlers/RotationGestureHandler.js.map +1 -1
- package/lib/module/web/handlers/TapGestureHandler.js +0 -2
- package/lib/module/web/handlers/TapGestureHandler.js.map +1 -1
- package/lib/module/web/interfaces.js.map +1 -1
- package/lib/module/web/tools/InteractionManager.js.map +1 -1
- package/lib/module/web_hammer/GestureHandler.js.map +1 -1
- package/lib/module/web_hammer/NodeManager.js +4 -1
- package/lib/module/web_hammer/NodeManager.js.map +1 -1
- package/lib/module/web_hammer/PanGestureHandler.js +25 -6
- package/lib/module/web_hammer/PanGestureHandler.js.map +1 -1
- package/lib/typescript/RNGestureHandlerModule.macos.d.ts +1 -1
- package/lib/typescript/RNGestureHandlerModule.web.d.ts +1 -1
- package/lib/typescript/RNGestureHandlerModule.windows.d.ts +48 -0
- package/lib/typescript/components/DrawerLayout.d.ts +10 -1
- package/lib/typescript/components/Swipeable.d.ts +3 -2
- package/lib/typescript/fabric/RNGestureHandlerButtonNativeComponent.d.ts +1 -1
- package/lib/typescript/fabric/RNGestureHandlerRootViewNativeComponent.d.ts +1 -1
- package/lib/typescript/gestureHandlerRootHOC.d.ts +1 -1
- package/lib/typescript/handlers/NativeViewGestureHandler.d.ts +1 -1
- package/lib/typescript/handlers/PanGestureHandler.d.ts +1 -1
- package/lib/typescript/handlers/gestureHandlerCommon.d.ts +3 -1
- package/lib/typescript/handlers/gestures/GestureDetector.d.ts +3 -1
- package/lib/typescript/web/handlers/ManualGestureHandler.d.ts +3 -1
- package/lib/typescript/web/interfaces.d.ts +3 -1
- package/lib/typescript/web/tools/NodeManager.d.ts +2 -2
- package/package.json +17 -14
- package/src/RNGestureHandlerModule.macos.ts +2 -2
- package/src/RNGestureHandlerModule.web.ts +2 -2
- package/src/RNGestureHandlerModule.windows.ts +140 -0
- package/src/components/DrawerLayout.tsx +22 -12
- package/src/components/Swipeable.tsx +16 -13
- package/src/components/touchables/TouchableOpacity.tsx +1 -1
- package/src/gestureHandlerRootHOC.tsx +4 -1
- package/src/getShadowNodeFromRef.ts +3 -3
- package/src/handlers/LongPressGestureHandler.ts +3 -1
- package/src/handlers/TapGestureHandler.ts +3 -1
- package/src/handlers/createHandler.tsx +13 -15
- package/src/handlers/gestureHandlerCommon.ts +9 -4
- package/src/handlers/gestureHandlerTypesCompat.ts +34 -17
- package/src/handlers/gestures/GestureDetector.tsx +117 -44
- package/src/handlers/gestures/eventReceiver.ts +2 -1
- package/src/handlers/gestures/gesture.ts +8 -12
- package/src/handlers/gestures/longPressGesture.ts +1 -0
- package/src/handlers/gestures/tapGesture.ts +1 -0
- package/src/jestUtils/jestUtils.ts +3 -4
- package/src/web/detectors/RotationGestureDetector.ts +2 -1
- package/src/web/handlers/FlingGestureHandler.ts +2 -3
- package/src/web/handlers/GestureHandler.ts +30 -11
- package/src/web/handlers/LongPressGestureHandler.ts +0 -3
- package/src/web/handlers/ManualGestureHandler.ts +10 -1
- package/src/web/handlers/NativeViewGestureHandler.ts +0 -2
- package/src/web/handlers/PanGestureHandler.ts +0 -6
- package/src/web/handlers/PinchGestureHandler.ts +0 -2
- package/src/web/handlers/RotationGestureHandler.ts +2 -5
- package/src/web/handlers/TapGestureHandler.ts +0 -3
- package/src/web/interfaces.ts +3 -0
- package/src/web/tools/InteractionManager.ts +2 -3
- package/src/web_hammer/GestureHandler.ts +6 -8
- package/src/web_hammer/NodeManager.ts +3 -1
- package/src/web_hammer/PanGestureHandler.ts +12 -6
- package/android/lib/build.gradle +0 -28
@@ -1,160 +1,158 @@
|
|
1
1
|
#import "RNGestureHandlerManager.h"
|
2
2
|
|
3
|
-
#import <React/RCTLog.h>
|
4
|
-
#import <React/RCTViewManager.h>
|
5
3
|
#import <React/RCTComponent.h>
|
6
|
-
#import <React/RCTRootView.h>
|
7
|
-
#import <React/RCTUIManager.h>
|
8
4
|
#import <React/RCTEventDispatcher.h>
|
5
|
+
#import <React/RCTLog.h>
|
9
6
|
#import <React/RCTRootContentView.h>
|
7
|
+
#import <React/RCTRootView.h>
|
8
|
+
#import <React/RCTUIManager.h>
|
9
|
+
#import <React/RCTViewManager.h>
|
10
10
|
|
11
|
-
#import "RNGestureHandlerActionType.h"
|
12
|
-
#import "RNGestureHandlerState.h"
|
13
11
|
#import "RNGestureHandler.h"
|
12
|
+
#import "RNGestureHandlerActionType.h"
|
14
13
|
#import "RNGestureHandlerRegistry.h"
|
14
|
+
#import "RNGestureHandlerState.h"
|
15
15
|
#import "RNRootViewGestureRecognizer.h"
|
16
16
|
|
17
17
|
#ifdef RN_FABRIC_ENABLED
|
18
|
-
#import <React/RCTViewComponentView.h>
|
19
18
|
#import <React/RCTSurfaceTouchHandler.h>
|
19
|
+
#import <React/RCTViewComponentView.h>
|
20
20
|
#else
|
21
21
|
#import <React/RCTTouchHandler.h>
|
22
22
|
#endif // RN_FABRIC_ENABLED
|
23
23
|
|
24
|
-
#import "Handlers/RNPanHandler.h"
|
25
|
-
#import "Handlers/RNTapHandler.h"
|
26
24
|
#import "Handlers/RNFlingHandler.h"
|
25
|
+
#import "Handlers/RNForceTouchHandler.h"
|
27
26
|
#import "Handlers/RNLongPressHandler.h"
|
27
|
+
#import "Handlers/RNManualHandler.h"
|
28
28
|
#import "Handlers/RNNativeViewHandler.h"
|
29
|
+
#import "Handlers/RNPanHandler.h"
|
29
30
|
#import "Handlers/RNPinchHandler.h"
|
30
31
|
#import "Handlers/RNRotationHandler.h"
|
31
|
-
#import "Handlers/
|
32
|
-
#import "Handlers/RNManualHandler.h"
|
32
|
+
#import "Handlers/RNTapHandler.h"
|
33
33
|
|
34
34
|
// We use the method below instead of RCTLog because we log out messages after the bridge gets
|
35
35
|
// turned down in some cases. Which normally with RCTLog would cause a crash in DEBUG mode
|
36
|
-
#define RCTLifecycleLog(...)
|
36
|
+
#define RCTLifecycleLog(...) \
|
37
|
+
RCTDefaultLogFunction( \
|
38
|
+
RCTLogLevelInfo, RCTLogSourceNative, @(__FILE__), @(__LINE__), [NSString stringWithFormat:__VA_ARGS__])
|
37
39
|
|
38
40
|
@interface RNGestureHandlerManager () <RNGestureHandlerEventEmitter, RNRootViewGestureRecognizerDelegate>
|
39
41
|
|
40
42
|
@end
|
41
43
|
|
42
|
-
@implementation RNGestureHandlerManager
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
id _reanimatedModule;
|
44
|
+
@implementation RNGestureHandlerManager {
|
45
|
+
RNGestureHandlerRegistry *_registry;
|
46
|
+
RCTUIManager *_uiManager;
|
47
|
+
NSHashTable<RNRootViewGestureRecognizer *> *_rootViewGestureRecognizers;
|
48
|
+
RCTEventDispatcher *_eventDispatcher;
|
49
|
+
id _reanimatedModule;
|
49
50
|
}
|
50
51
|
|
51
|
-
- (instancetype)initWithUIManager:(RCTUIManager *)uiManager
|
52
|
-
eventDispatcher:(RCTEventDispatcher *)eventDispatcher
|
52
|
+
- (instancetype)initWithUIManager:(RCTUIManager *)uiManager eventDispatcher:(RCTEventDispatcher *)eventDispatcher
|
53
53
|
{
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
54
|
+
if ((self = [super init])) {
|
55
|
+
_uiManager = uiManager;
|
56
|
+
_eventDispatcher = eventDispatcher;
|
57
|
+
_registry = [RNGestureHandlerRegistry new];
|
58
|
+
_rootViewGestureRecognizers = [NSHashTable hashTableWithOptions:NSPointerFunctionsWeakMemory];
|
59
|
+
_reanimatedModule = nil;
|
60
|
+
}
|
61
|
+
return self;
|
62
62
|
}
|
63
63
|
|
64
|
-
- (void)createGestureHandler:(NSString *)handlerName
|
65
|
-
tag:(NSNumber *)handlerTag
|
66
|
-
config:(NSDictionary *)config
|
64
|
+
- (void)createGestureHandler:(NSString *)handlerName tag:(NSNumber *)handlerTag config:(NSDictionary *)config
|
67
65
|
{
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
66
|
+
static NSDictionary *map;
|
67
|
+
static dispatch_once_t mapToken;
|
68
|
+
dispatch_once(&mapToken, ^{
|
69
|
+
map = @{
|
70
|
+
@"PanGestureHandler" : [RNPanGestureHandler class],
|
71
|
+
@"TapGestureHandler" : [RNTapGestureHandler class],
|
72
|
+
@"FlingGestureHandler" : [RNFlingGestureHandler class],
|
73
|
+
@"LongPressGestureHandler" : [RNLongPressGestureHandler class],
|
74
|
+
@"NativeViewGestureHandler" : [RNNativeViewGestureHandler class],
|
75
|
+
@"PinchGestureHandler" : [RNPinchGestureHandler class],
|
76
|
+
@"RotationGestureHandler" : [RNRotationGestureHandler class],
|
77
|
+
@"ForceTouchGestureHandler" : [RNForceTouchHandler class],
|
78
|
+
@"ManualGestureHandler" : [RNManualGestureHandler class],
|
79
|
+
};
|
80
|
+
});
|
81
|
+
|
82
|
+
Class nodeClass = map[handlerName];
|
83
|
+
if (!nodeClass) {
|
84
|
+
RCTLogError(@"Gesture handler type %@ is not supported", handlerName);
|
85
|
+
return;
|
86
|
+
}
|
87
|
+
|
88
|
+
RNGestureHandler *gestureHandler = [[nodeClass alloc] initWithTag:handlerTag];
|
89
|
+
[gestureHandler configure:config];
|
90
|
+
[_registry registerGestureHandler:gestureHandler];
|
91
|
+
|
92
|
+
__weak id<RNGestureHandlerEventEmitter> emitter = self;
|
93
|
+
gestureHandler.emitter = emitter;
|
96
94
|
}
|
97
95
|
|
98
|
-
|
99
96
|
- (void)attachGestureHandler:(nonnull NSNumber *)handlerTag
|
100
97
|
toViewWithTag:(nonnull NSNumber *)viewTag
|
101
98
|
withActionType:(RNGestureHandlerActionType)actionType
|
102
99
|
{
|
103
|
-
|
104
|
-
|
100
|
+
UIView *view = [_uiManager viewForReactTag:viewTag];
|
101
|
+
|
105
102
|
#ifdef RN_FABRIC_ENABLED
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
103
|
+
if (view == nil) {
|
104
|
+
// Happens when the view with given tag has been flattened.
|
105
|
+
// We cannot attach gesture handler to a non-existent view.
|
106
|
+
return;
|
107
|
+
}
|
108
|
+
|
109
|
+
// I think it should be moved to RNNativeViewHandler, but that would require
|
110
|
+
// additional logic for setting contentView.reactTag, this works for now
|
111
|
+
if ([view isKindOfClass:[RCTViewComponentView class]]) {
|
112
|
+
RCTViewComponentView *componentView = (RCTViewComponentView *)view;
|
113
|
+
if (componentView.contentView != nil) {
|
114
|
+
view = componentView.contentView;
|
110
115
|
}
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
RCTViewComponentView *componentView = (RCTViewComponentView *)view;
|
116
|
-
if (componentView.contentView != nil) {
|
117
|
-
view = componentView.contentView;
|
118
|
-
}
|
119
|
-
}
|
120
|
-
|
121
|
-
view.reactTag = viewTag; // necessary for RNReanimated eventHash (e.g. "42onGestureHandlerEvent"), also will be returned as event.target
|
116
|
+
}
|
117
|
+
|
118
|
+
view.reactTag = viewTag; // necessary for RNReanimated eventHash (e.g. "42onGestureHandlerEvent"), also will be
|
119
|
+
// returned as event.target
|
122
120
|
#endif // RN_FABRIC_ENABLED
|
123
121
|
|
124
|
-
|
122
|
+
[_registry attachHandlerWithTag:handlerTag toView:view withActionType:actionType];
|
125
123
|
|
126
|
-
|
127
|
-
|
124
|
+
// register view if not already there
|
125
|
+
[self registerViewWithGestureRecognizerAttachedIfNeeded:view];
|
128
126
|
}
|
129
127
|
|
130
128
|
- (void)updateGestureHandler:(NSNumber *)handlerTag config:(NSDictionary *)config
|
131
129
|
{
|
132
|
-
|
133
|
-
|
130
|
+
RNGestureHandler *handler = [_registry handlerWithTag:handlerTag];
|
131
|
+
[handler configure:config];
|
134
132
|
}
|
135
133
|
|
136
134
|
- (void)dropGestureHandler:(NSNumber *)handlerTag
|
137
135
|
{
|
138
|
-
|
136
|
+
[_registry dropHandlerWithTag:handlerTag];
|
139
137
|
}
|
140
138
|
|
141
139
|
- (void)dropAllGestureHandlers
|
142
140
|
{
|
143
|
-
|
141
|
+
[_registry dropAllHandlers];
|
144
142
|
}
|
145
143
|
|
146
144
|
- (void)handleSetJSResponder:(NSNumber *)viewTag blockNativeResponder:(NSNumber *)blockNativeResponder
|
147
145
|
{
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
}
|
146
|
+
if ([blockNativeResponder boolValue]) {
|
147
|
+
for (RNRootViewGestureRecognizer *recognizer in _rootViewGestureRecognizers) {
|
148
|
+
[recognizer blockOtherRecognizers];
|
152
149
|
}
|
150
|
+
}
|
153
151
|
}
|
154
152
|
|
155
153
|
- (void)handleClearJSResponder
|
156
154
|
{
|
157
|
-
|
155
|
+
// ignore...
|
158
156
|
}
|
159
157
|
|
160
158
|
- (id)handlerWithTag:(NSNumber *)handlerTag
|
@@ -162,145 +160,145 @@
|
|
162
160
|
return [_registry handlerWithTag:handlerTag];
|
163
161
|
}
|
164
162
|
|
165
|
-
|
166
163
|
#pragma mark Root Views Management
|
167
164
|
|
168
165
|
- (void)registerViewWithGestureRecognizerAttachedIfNeeded:(UIView *)childView
|
169
166
|
{
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
167
|
+
UIView *parent = childView;
|
168
|
+
while (parent != nil && ![parent respondsToSelector:@selector(touchHandler)])
|
169
|
+
parent = parent.superview;
|
170
|
+
|
171
|
+
// Many views can return the same touchHandler so we check if the one we want to register
|
172
|
+
// is not already present in the set.
|
173
|
+
UIView *touchHandlerView = [[parent performSelector:@selector(touchHandler)] view];
|
174
|
+
|
175
|
+
if (touchHandlerView == nil) {
|
176
|
+
return;
|
177
|
+
}
|
178
|
+
|
179
|
+
for (UIGestureRecognizer *recognizer in touchHandlerView.gestureRecognizers) {
|
180
|
+
if ([recognizer isKindOfClass:[RNRootViewGestureRecognizer class]]) {
|
178
181
|
return;
|
179
182
|
}
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
RNRootViewGestureRecognizer *recognizer = [RNRootViewGestureRecognizer new];
|
189
|
-
recognizer.delegate = self;
|
190
|
-
touchHandlerView.userInteractionEnabled = YES;
|
191
|
-
[touchHandlerView addGestureRecognizer:recognizer];
|
192
|
-
[_rootViewGestureRecognizers addObject:recognizer];
|
183
|
+
}
|
184
|
+
|
185
|
+
RCTLifecycleLog(@"[GESTURE HANDLER] Initialize gesture handler for view %@", touchHandlerView);
|
186
|
+
RNRootViewGestureRecognizer *recognizer = [RNRootViewGestureRecognizer new];
|
187
|
+
recognizer.delegate = self;
|
188
|
+
touchHandlerView.userInteractionEnabled = YES;
|
189
|
+
[touchHandlerView addGestureRecognizer:recognizer];
|
190
|
+
[_rootViewGestureRecognizers addObject:recognizer];
|
193
191
|
}
|
194
192
|
|
195
193
|
- (void)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer
|
196
194
|
didActivateInViewWithTouchHandler:(UIView *)viewWithTouchHandler
|
197
195
|
{
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
196
|
+
// Cancel touches in RN's root view in order to cancel all in-js recognizers
|
197
|
+
|
198
|
+
// As scroll events are special-cased in RN responder implementation and sending them would
|
199
|
+
// trigger JS responder change, we don't cancel touches if the handler that got activated is
|
200
|
+
// a scroll recognizer. This way root view will keep sending touchMove and touchEnd events
|
201
|
+
// and therefore allow JS responder to properly release the responder at the end of the touch
|
202
|
+
// stream.
|
203
|
+
// NOTE: this is not a proper fix and solving this problem requires upstream fixes to RN. In
|
204
|
+
// particular if we have one PanHandler and ScrollView that can work simultaniously then when
|
205
|
+
// the Pan handler activates it would still tigger cancel events.
|
206
|
+
// Once the upstream fix lands the line below along with this comment can be removed
|
207
|
+
if ([gestureRecognizer.view isKindOfClass:[UIScrollView class]])
|
208
|
+
return;
|
210
209
|
|
211
210
|
#ifdef RN_FABRIC_ENABLED
|
212
|
-
|
211
|
+
RCTSurfaceTouchHandler *touchHandler = [viewWithTouchHandler performSelector:@selector(touchHandler)];
|
213
212
|
#else
|
214
|
-
|
213
|
+
RCTTouchHandler *touchHandler = [viewWithTouchHandler performSelector:@selector(touchHandler)];
|
215
214
|
#endif
|
216
|
-
|
217
|
-
|
218
|
-
|
215
|
+
[touchHandler setEnabled:NO];
|
216
|
+
[touchHandler setEnabled:YES];
|
219
217
|
}
|
220
218
|
|
221
219
|
#pragma mark Events
|
222
220
|
|
223
221
|
- (void)sendEvent:(RNGestureHandlerStateChange *)event withActionType:(RNGestureHandlerActionType)actionType
|
224
222
|
{
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
223
|
+
switch (actionType) {
|
224
|
+
case RNGestureHandlerActionTypeReanimatedWorklet:
|
225
|
+
[self sendEventForReanimated:event];
|
226
|
+
break;
|
227
|
+
|
228
|
+
case RNGestureHandlerActionTypeNativeAnimatedEvent:
|
229
|
+
if ([event.eventName isEqualToString:@"onGestureHandlerEvent"]) {
|
230
|
+
[self sendEventForNativeAnimatedEvent:event];
|
231
|
+
} else {
|
232
|
+
// Although onGestureEvent prop is an Animated.event with useNativeDriver: true,
|
233
|
+
// onHandlerStateChange prop is still a regular JS function.
|
234
|
+
// Also, Animated.event is only supported with old API.
|
235
|
+
[self sendEventForJSFunctionOldAPI:event];
|
236
|
+
}
|
237
|
+
break;
|
238
|
+
|
239
|
+
case RNGestureHandlerActionTypeJSFunctionOldAPI:
|
240
|
+
[self sendEventForJSFunctionOldAPI:event];
|
241
|
+
break;
|
242
|
+
|
243
|
+
case RNGestureHandlerActionTypeJSFunctionNewAPI:
|
244
|
+
[self sendEventForJSFunctionNewAPI:event];
|
245
|
+
break;
|
246
|
+
}
|
249
247
|
}
|
250
248
|
|
251
249
|
- (void)sendEventForReanimated:(RNGestureHandlerStateChange *)event
|
252
250
|
{
|
253
|
-
|
251
|
+
// Delivers the event to Reanimated.
|
254
252
|
#ifdef RN_FABRIC_ENABLED
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
253
|
+
// Send event directly to Reanimated
|
254
|
+
if (_reanimatedModule == nil) {
|
255
|
+
_reanimatedModule = [_uiManager.bridge moduleForName:@"ReanimatedModule"];
|
256
|
+
}
|
257
|
+
|
258
|
+
[_reanimatedModule eventDispatcherWillDispatchEvent:event];
|
261
259
|
#else
|
262
|
-
|
263
|
-
|
264
|
-
|
260
|
+
// In the old architecture, Reanimated overwrites RCTEventDispatcher
|
261
|
+
// with REAEventDispatcher and intercepts all direct events.
|
262
|
+
[self sendEventForDirectEvent:event];
|
265
263
|
#endif // RN_FABRIC_ENABLED
|
266
264
|
}
|
267
265
|
|
268
266
|
- (void)sendEventForNativeAnimatedEvent:(RNGestureHandlerStateChange *)event
|
269
267
|
{
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
|
268
|
+
// Delivers the event to NativeAnimatedModule.
|
269
|
+
// Currently, NativeAnimated[Turbo]Module is RCTEventDispatcherObserver so we can
|
270
|
+
// simply send a direct event which is handled by the observer but ignored on JS side.
|
271
|
+
// TODO: send event directly to NativeAnimated[Turbo]Module
|
272
|
+
[self sendEventForDirectEvent:event];
|
275
273
|
}
|
276
274
|
|
277
275
|
- (void)sendEventForJSFunctionOldAPI:(RNGestureHandlerStateChange *)event
|
278
276
|
{
|
279
|
-
|
277
|
+
// Delivers the event to JS (old RNGH API).
|
280
278
|
#ifdef RN_FABRIC_ENABLED
|
281
|
-
|
279
|
+
[self sendEventForDeviceEvent:event];
|
282
280
|
#else
|
283
|
-
|
281
|
+
[self sendEventForDirectEvent:event];
|
284
282
|
#endif // RN_FABRIC_ENABLED
|
285
283
|
}
|
286
284
|
|
287
285
|
- (void)sendEventForJSFunctionNewAPI:(RNGestureHandlerStateChange *)event
|
288
286
|
{
|
289
|
-
|
290
|
-
|
287
|
+
// Delivers the event to JS (new RNGH API).
|
288
|
+
[self sendEventForDeviceEvent:event];
|
291
289
|
}
|
292
290
|
|
293
291
|
- (void)sendEventForDirectEvent:(RNGestureHandlerStateChange *)event
|
294
292
|
{
|
295
|
-
|
296
|
-
|
293
|
+
// Delivers the event to JS as a direct event.
|
294
|
+
[_eventDispatcher sendEvent:event];
|
297
295
|
}
|
298
296
|
|
299
297
|
- (void)sendEventForDeviceEvent:(RNGestureHandlerStateChange *)event
|
300
298
|
{
|
301
|
-
|
302
|
-
|
303
|
-
|
299
|
+
// Delivers the event to JS as a device event.
|
300
|
+
NSMutableDictionary *body = [[event arguments] objectAtIndex:2];
|
301
|
+
[_eventDispatcher sendDeviceEventWithName:@"onGestureHandlerStateChange" body:body];
|
304
302
|
}
|
305
303
|
|
306
304
|
@end
|