react-native-gesture-handler 2.14.1 → 2.16.0-rc.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (229) hide show
  1. package/README.md +1 -0
  2. package/RNGestureHandler.podspec +3 -24
  3. package/android/build.gradle +1 -1
  4. package/android/paper/src/main/java/com/swmansion/gesturehandler/NativeRNGestureHandlerModuleSpec.java +55 -0
  5. package/android/src/main/java/com/swmansion/gesturehandler/RNGestureHandlerPackage.kt +69 -4
  6. package/android/src/main/java/com/swmansion/gesturehandler/core/FlingGestureHandler.kt +4 -0
  7. package/android/src/main/java/com/swmansion/gesturehandler/core/GestureHandler.kt +69 -0
  8. package/android/src/main/java/com/swmansion/gesturehandler/core/GestureHandlerOrchestrator.kt +37 -21
  9. package/android/src/main/java/com/swmansion/gesturehandler/core/LongPressGestureHandler.kt +5 -1
  10. package/android/src/main/java/com/swmansion/gesturehandler/core/PanGestureHandler.kt +5 -1
  11. package/android/src/main/java/com/swmansion/gesturehandler/core/TapGestureHandler.kt +7 -3
  12. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerModule.kt +61 -24
  13. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootHelper.kt +3 -2
  14. package/android/src/main/java/com/swmansion/gesturehandler/react/eventbuilders/GestureHandlerEventDataBuilder.kt +3 -0
  15. package/android/src/main/jni/cpp-adapter.cpp +18 -22
  16. package/{ios → apple}/Handlers/RNFlingHandler.m +29 -8
  17. package/{ios → apple}/Handlers/RNForceTouchHandler.m +28 -8
  18. package/{ios → apple}/Handlers/RNHoverHandler.m +28 -2
  19. package/{ios → apple}/Handlers/RNLongPressHandler.m +27 -5
  20. package/{ios → apple}/Handlers/RNManualHandler.m +25 -4
  21. package/{ios → apple}/Handlers/RNNativeViewHandler.mm +51 -13
  22. package/{ios → apple}/Handlers/RNPanHandler.m +106 -16
  23. package/apple/Handlers/RNPinchHandler.m +175 -0
  24. package/apple/Handlers/RNRotationHandler.m +169 -0
  25. package/{ios → apple}/Handlers/RNTapHandler.m +98 -26
  26. package/apple/RNGHUIKit.h +27 -0
  27. package/{ios → apple}/RNGestureHandler.h +12 -3
  28. package/{ios → apple}/RNGestureHandler.m +68 -7
  29. package/{ios → apple}/RNGestureHandlerButton.h +4 -1
  30. package/{ios → apple}/RNGestureHandlerButton.m +12 -4
  31. package/{ios → apple}/RNGestureHandlerButtonManager.m +4 -2
  32. package/{ios → apple}/RNGestureHandlerEvents.h +19 -10
  33. package/{ios → apple}/RNGestureHandlerEvents.m +29 -11
  34. package/{ios → apple}/RNGestureHandlerManager.h +7 -2
  35. package/{ios → apple}/RNGestureHandlerManager.mm +78 -17
  36. package/apple/RNGestureHandlerModule.h +19 -0
  37. package/{ios → apple}/RNGestureHandlerModule.mm +69 -69
  38. package/{ios → apple}/RNGestureHandlerPointerTracker.h +5 -5
  39. package/{ios → apple}/RNGestureHandlerPointerTracker.m +19 -14
  40. package/apple/RNGestureHandlerPointerType.h +8 -0
  41. package/{ios → apple}/RNGestureHandlerRegistry.h +1 -1
  42. package/{ios → apple}/RNGestureHandlerRegistry.m +1 -1
  43. package/{ios → apple}/RNManualActivationRecognizer.h +8 -0
  44. package/{ios → apple}/RNManualActivationRecognizer.m +27 -7
  45. package/{ios → apple}/RNRootViewGestureRecognizer.m +72 -4
  46. package/lib/commonjs/PointerType.js +16 -0
  47. package/lib/commonjs/PointerType.js.map +1 -0
  48. package/lib/commonjs/RNGestureHandlerModule.js +5 -18
  49. package/lib/commonjs/RNGestureHandlerModule.js.map +1 -1
  50. package/lib/commonjs/RNGestureHandlerModule.windows.js +10 -102
  51. package/lib/commonjs/RNGestureHandlerModule.windows.js.map +1 -1
  52. package/lib/commonjs/components/DrawerLayout.js +2 -0
  53. package/lib/commonjs/components/DrawerLayout.js.map +1 -1
  54. package/lib/commonjs/components/GestureHandlerRootView.android.js +17 -2
  55. package/lib/commonjs/components/GestureHandlerRootView.android.js.map +1 -1
  56. package/lib/commonjs/components/GestureHandlerRootView.js +15 -2
  57. package/lib/commonjs/components/GestureHandlerRootView.js.map +1 -1
  58. package/lib/commonjs/components/GestureHandlerRootView.web.js +15 -2
  59. package/lib/commonjs/components/GestureHandlerRootView.web.js.map +1 -1
  60. package/lib/commonjs/getShadowNodeFromRef.js +19 -2
  61. package/lib/commonjs/getShadowNodeFromRef.js.map +1 -1
  62. package/lib/commonjs/handlers/createHandler.js +5 -0
  63. package/lib/commonjs/handlers/createHandler.js.map +1 -1
  64. package/lib/commonjs/handlers/gestureHandlerCommon.js +1 -1
  65. package/lib/commonjs/handlers/gestureHandlerCommon.js.map +1 -1
  66. package/lib/commonjs/handlers/gestures/GestureDetector.js +11 -1
  67. package/lib/commonjs/handlers/gestures/GestureDetector.js.map +1 -1
  68. package/lib/commonjs/handlers/gestures/gesture.js +5 -0
  69. package/lib/commonjs/handlers/gestures/gesture.js.map +1 -1
  70. package/lib/commonjs/index.js +16 -0
  71. package/lib/commonjs/index.js.map +1 -1
  72. package/lib/commonjs/specs/NativeRNGestureHandlerModule.js +13 -0
  73. package/lib/commonjs/specs/NativeRNGestureHandlerModule.js.map +1 -0
  74. package/lib/commonjs/web/handlers/FlingGestureHandler.js +4 -0
  75. package/lib/commonjs/web/handlers/FlingGestureHandler.js.map +1 -1
  76. package/lib/commonjs/web/handlers/GestureHandler.js +19 -4
  77. package/lib/commonjs/web/handlers/GestureHandler.js.map +1 -1
  78. package/lib/commonjs/web/handlers/LongPressGestureHandler.js +8 -6
  79. package/lib/commonjs/web/handlers/LongPressGestureHandler.js.map +1 -1
  80. package/lib/commonjs/web/handlers/PanGestureHandler.js +4 -0
  81. package/lib/commonjs/web/handlers/PanGestureHandler.js.map +1 -1
  82. package/lib/commonjs/web/handlers/TapGestureHandler.js +4 -0
  83. package/lib/commonjs/web/handlers/TapGestureHandler.js.map +1 -1
  84. package/lib/commonjs/web/interfaces.js +12 -24
  85. package/lib/commonjs/web/interfaces.js.map +1 -1
  86. package/lib/commonjs/web/tools/GestureHandlerOrchestrator.js +3 -3
  87. package/lib/commonjs/web/tools/GestureHandlerOrchestrator.js.map +1 -1
  88. package/lib/commonjs/web/tools/GestureHandlerWebDelegate.js +35 -0
  89. package/lib/commonjs/web/tools/GestureHandlerWebDelegate.js.map +1 -1
  90. package/lib/commonjs/web/tools/NodeManager.js +3 -2
  91. package/lib/commonjs/web/tools/NodeManager.js.map +1 -1
  92. package/lib/commonjs/web/tools/PointerEventManager.js +40 -10
  93. package/lib/commonjs/web/tools/PointerEventManager.js.map +1 -1
  94. package/lib/commonjs/web/tools/TouchEventManager.js +3 -2
  95. package/lib/commonjs/web/tools/TouchEventManager.js.map +1 -1
  96. package/lib/commonjs/web/utils.js +6 -0
  97. package/lib/commonjs/web/utils.js.map +1 -1
  98. package/lib/module/PointerType.js +9 -0
  99. package/lib/module/PointerType.js.map +1 -0
  100. package/lib/module/RNGestureHandlerModule.js +4 -18
  101. package/lib/module/RNGestureHandlerModule.js.map +1 -1
  102. package/lib/module/RNGestureHandlerModule.windows.js +10 -81
  103. package/lib/module/RNGestureHandlerModule.windows.js.map +1 -1
  104. package/lib/module/components/DrawerLayout.js +2 -0
  105. package/lib/module/components/DrawerLayout.js.map +1 -1
  106. package/lib/module/components/GestureHandlerRootView.android.js +15 -2
  107. package/lib/module/components/GestureHandlerRootView.android.js.map +1 -1
  108. package/lib/module/components/GestureHandlerRootView.js +15 -3
  109. package/lib/module/components/GestureHandlerRootView.js.map +1 -1
  110. package/lib/module/components/GestureHandlerRootView.web.js +15 -3
  111. package/lib/module/components/GestureHandlerRootView.web.js.map +1 -1
  112. package/lib/module/getShadowNodeFromRef.js +19 -2
  113. package/lib/module/getShadowNodeFromRef.js.map +1 -1
  114. package/lib/module/handlers/createHandler.js +6 -1
  115. package/lib/module/handlers/createHandler.js.map +1 -1
  116. package/lib/module/handlers/gestureHandlerCommon.js +1 -1
  117. package/lib/module/handlers/gestureHandlerCommon.js.map +1 -1
  118. package/lib/module/handlers/gestures/GestureDetector.js +11 -1
  119. package/lib/module/handlers/gestures/GestureDetector.js.map +1 -1
  120. package/lib/module/handlers/gestures/gesture.js +5 -0
  121. package/lib/module/handlers/gestures/gesture.js.map +1 -1
  122. package/lib/module/index.js +2 -0
  123. package/lib/module/index.js.map +1 -1
  124. package/lib/module/specs/NativeRNGestureHandlerModule.js +3 -0
  125. package/lib/module/specs/NativeRNGestureHandlerModule.js.map +1 -0
  126. package/lib/module/web/handlers/FlingGestureHandler.js +4 -0
  127. package/lib/module/web/handlers/FlingGestureHandler.js.map +1 -1
  128. package/lib/module/web/handlers/GestureHandler.js +18 -4
  129. package/lib/module/web/handlers/GestureHandler.js.map +1 -1
  130. package/lib/module/web/handlers/LongPressGestureHandler.js +8 -5
  131. package/lib/module/web/handlers/LongPressGestureHandler.js.map +1 -1
  132. package/lib/module/web/handlers/PanGestureHandler.js +4 -0
  133. package/lib/module/web/handlers/PanGestureHandler.js.map +1 -1
  134. package/lib/module/web/handlers/TapGestureHandler.js +4 -0
  135. package/lib/module/web/handlers/TapGestureHandler.js.map +1 -1
  136. package/lib/module/web/interfaces.js +9 -20
  137. package/lib/module/web/interfaces.js.map +1 -1
  138. package/lib/module/web/tools/GestureHandlerOrchestrator.js +2 -2
  139. package/lib/module/web/tools/GestureHandlerOrchestrator.js.map +1 -1
  140. package/lib/module/web/tools/GestureHandlerWebDelegate.js +34 -0
  141. package/lib/module/web/tools/GestureHandlerWebDelegate.js.map +1 -1
  142. package/lib/module/web/tools/NodeManager.js +3 -2
  143. package/lib/module/web/tools/NodeManager.js.map +1 -1
  144. package/lib/module/web/tools/PointerEventManager.js +41 -12
  145. package/lib/module/web/tools/PointerEventManager.js.map +1 -1
  146. package/lib/module/web/tools/TouchEventManager.js +2 -2
  147. package/lib/module/web/tools/TouchEventManager.js.map +1 -1
  148. package/lib/module/web/utils.js +2 -0
  149. package/lib/module/web/utils.js.map +1 -1
  150. package/lib/typescript/PointerType.d.ts +6 -0
  151. package/lib/typescript/RNGestureHandlerModule.d.ts +2 -13
  152. package/lib/typescript/RNGestureHandlerModule.windows.d.ts +5 -21
  153. package/lib/typescript/components/DrawerLayout.d.ts +11 -0
  154. package/lib/typescript/components/GestureHandlerRootView.android.d.ts +1 -1
  155. package/lib/typescript/components/GestureHandlerRootView.d.ts +1 -1
  156. package/lib/typescript/components/GestureHandlerRootView.web.d.ts +1 -1
  157. package/lib/typescript/getShadowNodeFromRef.d.ts +1 -1
  158. package/lib/typescript/handlers/NativeViewGestureHandler.d.ts +1 -1
  159. package/lib/typescript/handlers/PanGestureHandler.d.ts +1 -1
  160. package/lib/typescript/handlers/gestureHandlerCommon.d.ts +6 -1
  161. package/lib/typescript/handlers/gestures/GestureDetector.d.ts +2 -1
  162. package/lib/typescript/handlers/gestures/gesture.d.ts +2 -0
  163. package/lib/typescript/index.d.ts +2 -0
  164. package/lib/typescript/specs/NativeRNGestureHandlerModule.d.ts +14 -0
  165. package/lib/typescript/web/handlers/GestureHandler.d.ts +4 -1
  166. package/lib/typescript/web/interfaces.d.ts +10 -14
  167. package/lib/typescript/web/tools/GestureHandlerDelegate.d.ts +2 -0
  168. package/lib/typescript/web/tools/GestureHandlerWebDelegate.d.ts +7 -0
  169. package/lib/typescript/web/tools/PointerEventManager.d.ts +2 -0
  170. package/lib/typescript/web/utils.d.ts +2 -0
  171. package/package.json +14 -11
  172. package/src/PointerType.ts +6 -0
  173. package/src/RNGestureHandlerModule.ts +4 -49
  174. package/src/RNGestureHandlerModule.windows.ts +18 -100
  175. package/src/components/DrawerLayout.tsx +15 -0
  176. package/src/components/GestureHandlerRootView.android.tsx +13 -5
  177. package/src/components/GestureHandlerRootView.tsx +10 -5
  178. package/src/components/GestureHandlerRootView.web.tsx +10 -5
  179. package/src/getShadowNodeFromRef.ts +28 -6
  180. package/src/handlers/createHandler.tsx +6 -0
  181. package/src/handlers/gestureHandlerCommon.ts +7 -0
  182. package/src/handlers/gestures/GestureDetector.tsx +16 -2
  183. package/src/handlers/gestures/gesture.ts +6 -0
  184. package/src/index.ts +2 -0
  185. package/src/specs/NativeRNGestureHandlerModule.ts +26 -0
  186. package/src/web/handlers/FlingGestureHandler.ts +4 -0
  187. package/src/web/handlers/GestureHandler.ts +20 -2
  188. package/src/web/handlers/LongPressGestureHandler.ts +8 -5
  189. package/src/web/handlers/PanGestureHandler.ts +4 -0
  190. package/src/web/handlers/TapGestureHandler.ts +4 -0
  191. package/src/web/interfaces.ts +12 -17
  192. package/src/web/tools/GestureHandlerDelegate.ts +3 -0
  193. package/src/web/tools/GestureHandlerOrchestrator.ts +2 -2
  194. package/src/web/tools/GestureHandlerWebDelegate.ts +39 -0
  195. package/src/web/tools/NodeManager.ts +5 -1
  196. package/src/web/tools/PointerEventManager.ts +46 -10
  197. package/src/web/tools/TouchEventManager.ts +2 -8
  198. package/src/web/utils.ts +9 -0
  199. package/ios/Handlers/RNPinchHandler.m +0 -95
  200. package/ios/Handlers/RNRotationHandler.m +0 -93
  201. package/ios/RNGestureHandlerModule.h +0 -7
  202. package/lib/commonjs/RNGestureHandlerModule.macos.js +0 -149
  203. package/lib/commonjs/RNGestureHandlerModule.macos.js.map +0 -1
  204. package/lib/module/RNGestureHandlerModule.macos.js +0 -110
  205. package/lib/module/RNGestureHandlerModule.macos.js.map +0 -1
  206. package/lib/typescript/RNGestureHandlerModule.macos.d.ts +0 -47
  207. package/src/RNGestureHandlerModule.macos.ts +0 -133
  208. /package/{ios → apple}/Handlers/RNFlingHandler.h +0 -0
  209. /package/{ios → apple}/Handlers/RNForceTouchHandler.h +0 -0
  210. /package/{ios → apple}/Handlers/RNHoverHandler.h +0 -0
  211. /package/{ios → apple}/Handlers/RNLongPressHandler.h +0 -0
  212. /package/{ios → apple}/Handlers/RNManualHandler.h +0 -0
  213. /package/{ios → apple}/Handlers/RNNativeViewHandler.h +0 -0
  214. /package/{ios → apple}/Handlers/RNPanHandler.h +0 -0
  215. /package/{ios → apple}/Handlers/RNPinchHandler.h +0 -0
  216. /package/{ios → apple}/Handlers/RNRotationHandler.h +0 -0
  217. /package/{ios → apple}/Handlers/RNTapHandler.h +0 -0
  218. /package/{ios → apple}/RNGHTouchEventType.h +0 -0
  219. /package/{ios → apple}/RNGestureHandler.xcodeproj/project.pbxproj +0 -0
  220. /package/{ios → apple}/RNGestureHandler.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +0 -0
  221. /package/{ios → apple}/RNGestureHandlerActionType.h +0 -0
  222. /package/{ios → apple}/RNGestureHandlerButtonComponentView.h +0 -0
  223. /package/{ios → apple}/RNGestureHandlerButtonComponentView.mm +0 -0
  224. /package/{ios → apple}/RNGestureHandlerButtonManager.h +0 -0
  225. /package/{ios → apple}/RNGestureHandlerDirection.h +0 -0
  226. /package/{ios → apple}/RNGestureHandlerRootViewComponentView.mm +0 -0
  227. /package/{ios → apple}/RNGestureHandlerState.h +0 -0
  228. /package/{ios → apple}/RNGestureHandlerStateManager.h +0 -0
  229. /package/{ios → apple}/RNRootViewGestureRecognizer.h +0 -0
@@ -8,9 +8,14 @@
8
8
 
9
9
  #import "RNPanHandler.h"
10
10
 
11
+ #if TARGET_OS_OSX
12
+
13
+ @interface RNBetterPanGestureRecognizer : NSPanGestureRecognizer
14
+ #else
11
15
  #import <UIKit/UIGestureRecognizerSubclass.h>
12
16
 
13
17
  @interface RNBetterPanGestureRecognizer : UIPanGestureRecognizer
18
+ #endif
14
19
 
15
20
  @property (nonatomic) CGFloat minDistSq;
16
21
  @property (nonatomic) CGFloat minVelocityX;
@@ -32,7 +37,9 @@
32
37
 
33
38
  @implementation RNBetterPanGestureRecognizer {
34
39
  __weak RNGestureHandler *_gestureHandler;
40
+ #if !TARGET_OS_OSX
35
41
  NSUInteger _realMinimumNumberOfTouches;
42
+ #endif
36
43
  BOOL _hasCustomActivationCriteria;
37
44
  }
38
45
 
@@ -54,7 +61,7 @@
54
61
  _failOffsetYEnd = NAN;
55
62
  _activateAfterLongPress = NAN;
56
63
  _hasCustomActivationCriteria = NO;
57
- #if !TARGET_OS_TV
64
+ #if !TARGET_OS_TV && !TARGET_OS_OSX
58
65
  _realMinimumNumberOfTouches = self.minimumNumberOfTouches;
59
66
  #endif
60
67
  }
@@ -66,10 +73,12 @@
66
73
  [_gestureHandler handleGesture:self];
67
74
  }
68
75
 
76
+ #if !TARGET_OS_OSX
69
77
  - (void)setMinimumNumberOfTouches:(NSUInteger)minimumNumberOfTouches
70
78
  {
71
79
  _realMinimumNumberOfTouches = minimumNumberOfTouches;
72
80
  }
81
+ #endif
73
82
 
74
83
  - (void)activateAfterLongPress
75
84
  {
@@ -78,12 +87,13 @@
78
87
  [_gestureHandler handleGesture:self inState:RNGestureHandlerStateActive];
79
88
  }
80
89
 
81
- - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
90
+ - (void)interactionsBegan:(NSSet *)touches withEvent:(UIEvent *)event
82
91
  {
83
- if ([self numberOfTouches] == 0) {
92
+ if (touches.count == 0) {
84
93
  [_gestureHandler reset];
85
94
  }
86
- #if !TARGET_OS_TV
95
+
96
+ #if !TARGET_OS_TV && !TARGET_OS_OSX
87
97
  if (_hasCustomActivationCriteria) {
88
98
  // We use "minimumNumberOfTouches" property to prevent pan handler from recognizing
89
99
  // the gesture too early before we are sure that all criteria (e.g. minimum distance
@@ -93,7 +103,13 @@
93
103
  super.minimumNumberOfTouches = _realMinimumNumberOfTouches;
94
104
  }
95
105
  #endif
106
+
107
+ #if TARGET_OS_OSX
108
+ [super mouseDown:event];
109
+ #else
96
110
  [super touchesBegan:touches withEvent:event];
111
+ #endif
112
+
97
113
  [_gestureHandler.pointerTracker touchesBegan:touches withEvent:event];
98
114
  [self triggerAction];
99
115
 
@@ -102,15 +118,16 @@
102
118
  }
103
119
  }
104
120
 
105
- - (void)touchesMoved:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
121
+ - (void)interactionsMoved:(NSSet *)touches withEvent:(UIEvent *)event
106
122
  {
107
- [super touchesMoved:touches withEvent:event];
108
123
  [_gestureHandler.pointerTracker touchesMoved:touches withEvent:event];
109
124
 
110
125
  if (self.state == UIGestureRecognizerStatePossible && [self shouldFailUnderCustomCriteria]) {
111
126
  self.state = UIGestureRecognizerStateFailed;
127
+ [self triggerAction];
112
128
  return;
113
129
  }
130
+
114
131
  if ((self.state == UIGestureRecognizerStatePossible || self.state == UIGestureRecognizerStateChanged)) {
115
132
  if (_gestureHandler.shouldCancelWhenOutside && ![_gestureHandler containsPointInView]) {
116
133
  // If the previous recognizer state is UIGestureRecognizerStateChanged
@@ -123,30 +140,81 @@
123
140
  return;
124
141
  }
125
142
  }
143
+
144
+ #if !TARGET_OS_TV && !TARGET_OS_OSX
126
145
  if (_hasCustomActivationCriteria && self.state == UIGestureRecognizerStatePossible &&
127
146
  [self shouldActivateUnderCustomCriteria]) {
128
- #if !TARGET_OS_TV
129
147
  super.minimumNumberOfTouches = _realMinimumNumberOfTouches;
130
148
  if ([self numberOfTouches] >= _realMinimumNumberOfTouches) {
131
149
  self.state = UIGestureRecognizerStateBegan;
132
150
  [self setTranslation:CGPointMake(0, 0) inView:self.view];
133
151
  }
134
- #endif
135
152
  }
153
+ #endif
136
154
  }
137
155
 
138
- - (void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
156
+ - (void)interactionsEnded:(NSSet *)touches withEvent:(UIEvent *)event
139
157
  {
140
- [super touchesEnded:touches withEvent:event];
141
158
  [_gestureHandler.pointerTracker touchesEnded:touches withEvent:event];
142
159
  }
143
160
 
144
- - (void)touchesCancelled:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
161
+ - (void)interactionsCancelled:(NSSet *)touches withEvent:(UIEvent *)event
145
162
  {
146
- [super touchesCancelled:touches withEvent:event];
147
163
  [_gestureHandler.pointerTracker touchesCancelled:touches withEvent:event];
148
164
  }
149
165
 
166
+ #if TARGET_OS_OSX
167
+
168
+ - (void)mouseDown:(NSEvent *)event
169
+ {
170
+ [_gestureHandler setCurrentPointerTypeToMouse];
171
+ // super call was moved to interactionsBegan method to keep the
172
+ // original order of calls
173
+ [self interactionsBegan:[NSSet setWithObject:event] withEvent:event];
174
+ }
175
+
176
+ - (void)mouseDragged:(NSEvent *)event
177
+ {
178
+ [super mouseDragged:event];
179
+ [self interactionsMoved:[NSSet setWithObject:event] withEvent:event];
180
+ }
181
+
182
+ - (void)mouseUp:(NSEvent *)event
183
+ {
184
+ [super mouseUp:event];
185
+ [self interactionsEnded:[NSSet setWithObject:event] withEvent:event];
186
+ }
187
+
188
+ #else
189
+
190
+ - (void)touchesBegan:(NSSet<RNGHUITouch *> *)touches withEvent:(UIEvent *)event
191
+ {
192
+ [_gestureHandler setCurrentPointerType:event];
193
+ // super call was moved to interactionsBegan method to keep the
194
+ // original order of calls
195
+ [self interactionsBegan:touches withEvent:event];
196
+ }
197
+
198
+ - (void)touchesMoved:(NSSet<RNGHUITouch *> *)touches withEvent:(UIEvent *)event
199
+ {
200
+ [super touchesMoved:touches withEvent:event];
201
+ [self interactionsMoved:touches withEvent:event];
202
+ }
203
+
204
+ - (void)touchesEnded:(NSSet<RNGHUITouch *> *)touches withEvent:(UIEvent *)event
205
+ {
206
+ [super touchesEnded:touches withEvent:event];
207
+ [self interactionsEnded:touches withEvent:event];
208
+ }
209
+
210
+ - (void)touchesCancelled:(NSSet<RNGHUITouch *> *)touches withEvent:(UIEvent *)event
211
+ {
212
+ [super touchesCancelled:touches withEvent:event];
213
+ [self interactionsCancelled:touches withEvent:event];
214
+ }
215
+
216
+ #endif
217
+
150
218
  - (void)reset
151
219
  {
152
220
  [self triggerAction];
@@ -154,6 +222,7 @@
154
222
  [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(activateAfterLongPress) object:nil];
155
223
  self.enabled = YES;
156
224
  [super reset];
225
+ [_gestureHandler reset];
157
226
  }
158
227
 
159
228
  - (void)updateHasCustomActivationCriteria
@@ -165,7 +234,11 @@
165
234
 
166
235
  - (BOOL)shouldFailUnderCustomCriteria
167
236
  {
237
+ #if TARGET_OS_OSX
238
+ CGPoint trans = [self translationInView:self.view.window.contentView];
239
+ #else
168
240
  CGPoint trans = [self translationInView:self.view.window];
241
+ #endif
169
242
  // Apple docs say that 10 units is the default allowable movement for UILongPressGestureRecognizer
170
243
  if (!isnan(_activateAfterLongPress) && trans.x * trans.x + trans.y * trans.y > 100) {
171
244
  [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(activateAfterLongPress) object:nil];
@@ -189,7 +262,11 @@
189
262
 
190
263
  - (BOOL)shouldActivateUnderCustomCriteria
191
264
  {
265
+ #if TARGET_OS_OSX
266
+ CGPoint trans = [self translationInView:self.view.window.contentView];
267
+ #else
192
268
  CGPoint trans = [self translationInView:self.view.window];
269
+ #endif
193
270
  if (!isnan(_activeOffsetXStart) && trans.x < _activeOffsetXStart) {
194
271
  return YES;
195
272
  }
@@ -248,12 +325,12 @@
248
325
  recognizer.failOffsetYStart = NAN;
249
326
  recognizer.failOffsetYStart = NAN;
250
327
  recognizer.failOffsetYEnd = NAN;
251
- #if !TARGET_OS_TV && __IPHONE_OS_VERSION_MAX_ALLOWED >= 130400
328
+ #if !TARGET_OS_OSX && !TARGET_OS_TV && __IPHONE_OS_VERSION_MAX_ALLOWED >= 130400
252
329
  if (@available(iOS 13.4, *)) {
253
330
  recognizer.allowedScrollTypesMask = 0;
254
331
  }
255
332
  #endif
256
- #if !TARGET_OS_TV
333
+ #if !TARGET_OS_OSX && !TARGET_OS_TV
257
334
  recognizer.minimumNumberOfTouches = 1;
258
335
  recognizer.maximumNumberOfTouches = NSUIntegerMax;
259
336
  #endif
@@ -278,7 +355,7 @@
278
355
  APPLY_FLOAT_PROP(failOffsetYStart);
279
356
  APPLY_FLOAT_PROP(failOffsetYEnd);
280
357
 
281
- #if !TARGET_OS_TV && __IPHONE_OS_VERSION_MAX_ALLOWED >= 130400
358
+ #if !TARGET_OS_OSX && !TARGET_OS_TV && __IPHONE_OS_VERSION_MAX_ALLOWED >= 130400
282
359
  if (@available(iOS 13.4, *)) {
283
360
  bool enableTrackpadTwoFingerGesture = [RCTConvert BOOL:config[@"enableTrackpadTwoFingerGesture"]];
284
361
  if (enableTrackpadTwoFingerGesture) {
@@ -319,13 +396,26 @@
319
396
  return shouldBegin;
320
397
  }
321
398
 
399
+ #if TARGET_OS_OSX
400
+ - (RNGestureHandlerEventExtraData *)eventExtraData:(NSPanGestureRecognizer *)recognizer
401
+ {
402
+ return [RNGestureHandlerEventExtraData forPan:[recognizer locationInView:recognizer.view]
403
+ withAbsolutePosition:[recognizer locationInView:recognizer.view.window.contentView]
404
+ withTranslation:[recognizer translationInView:recognizer.view.window.contentView]
405
+ withVelocity:[recognizer velocityInView:recognizer.view.window.contentView]
406
+ withNumberOfTouches:1
407
+ withPointerType:RNGestureHandlerMouse];
408
+ }
409
+ #else
322
410
  - (RNGestureHandlerEventExtraData *)eventExtraData:(UIPanGestureRecognizer *)recognizer
323
411
  {
324
412
  return [RNGestureHandlerEventExtraData forPan:[recognizer locationInView:recognizer.view]
325
413
  withAbsolutePosition:[recognizer locationInView:recognizer.view.window]
326
414
  withTranslation:[recognizer translationInView:recognizer.view.window]
327
415
  withVelocity:[recognizer velocityInView:recognizer.view.window]
328
- withNumberOfTouches:recognizer.numberOfTouches];
416
+ withNumberOfTouches:recognizer.numberOfTouches
417
+ withPointerType:_pointerType];
329
418
  }
419
+ #endif
330
420
 
331
421
  @end
@@ -0,0 +1,175 @@
1
+
2
+
3
+ //
4
+ // RNPinchHandler.m
5
+ // RNGestureHandler
6
+ //
7
+ // Created by Krzysztof Magiera on 12/10/2017.
8
+ // Copyright © 2017 Software Mansion. All rights reserved.
9
+ //
10
+
11
+ #import "RNPinchHandler.h"
12
+
13
+ #if !TARGET_OS_TV
14
+
15
+ #if TARGET_OS_OSX
16
+ @interface RNBetterPinchRecognizer : NSMagnificationGestureRecognizer {
17
+ CGFloat prevMagnification;
18
+ NSTimeInterval prevTime;
19
+ }
20
+
21
+ @property (nonatomic, readonly) CGFloat velocity;
22
+ #else
23
+ @interface RNBetterPinchRecognizer : UIPinchGestureRecognizer
24
+ #endif
25
+
26
+ - (id)initWithGestureHandler:(RNGestureHandler *)gestureHandler;
27
+
28
+ @end
29
+
30
+ @implementation RNBetterPinchRecognizer {
31
+ __weak RNGestureHandler *_gestureHandler;
32
+ }
33
+
34
+ - (id)initWithGestureHandler:(RNGestureHandler *)gestureHandler
35
+ {
36
+ if ((self = [super initWithTarget:self action:@selector(handleGesture:)])) {
37
+ _gestureHandler = gestureHandler;
38
+ }
39
+ #if TARGET_OS_OSX
40
+ prevMagnification = 0;
41
+ prevTime = 0;
42
+ #endif
43
+ return self;
44
+ }
45
+
46
+ - (void)handleGesture:(UIGestureRecognizer *)recognizer
47
+ {
48
+ if (self.state == UIGestureRecognizerStateBegan) {
49
+ #if TARGET_OS_OSX
50
+ self.magnification = 1;
51
+ #else
52
+ self.scale = 1;
53
+ #endif
54
+ }
55
+ [_gestureHandler handleGesture:recognizer];
56
+ }
57
+
58
+ - (void)interactionsBegan:(NSSet *)touches withEvent:(UIEvent *)event
59
+ {
60
+ [_gestureHandler.pointerTracker touchesBegan:touches withEvent:event];
61
+ }
62
+
63
+ - (void)interactionsMoved:(NSSet *)touches withEvent:(UIEvent *)event
64
+ {
65
+ [_gestureHandler.pointerTracker touchesMoved:touches withEvent:event];
66
+ }
67
+
68
+ - (void)interactionsEnded:(NSSet *)touches withEvent:(UIEvent *)event
69
+ {
70
+ [_gestureHandler.pointerTracker touchesEnded:touches withEvent:event];
71
+ }
72
+
73
+ - (void)interactionsCancelled:(NSSet *)touches withEvent:(UIEvent *)event
74
+ {
75
+ [_gestureHandler.pointerTracker touchesCancelled:touches withEvent:event];
76
+ }
77
+
78
+ #if TARGET_OS_OSX
79
+ - (void)magnifyWithEvent:(NSEvent *)event
80
+ {
81
+ [super magnifyWithEvent:event];
82
+
83
+ switch (self.state) {
84
+ case NSGestureRecognizerStateBegan:
85
+ [_gestureHandler setCurrentPointerTypeToMouse];
86
+ [self interactionsBegan:[NSSet setWithObject:event] withEvent:event];
87
+ break;
88
+ case NSGestureRecognizerStateChanged:
89
+ [self interactionsMoved:[NSSet setWithObject:event] withEvent:event];
90
+ break;
91
+ case NSGestureRecognizerStateEnded:
92
+ [self interactionsEnded:[NSSet setWithObject:event] withEvent:event];
93
+ break;
94
+ case NSGestureRecognizerStateCancelled:
95
+ [self interactionsCancelled:[NSSet setWithObject:event] withEvent:event];
96
+ break;
97
+ }
98
+
99
+ _velocity = (self.magnification - prevMagnification) / ((event.timestamp - prevTime) * 1000);
100
+ prevMagnification = self.magnification;
101
+ prevTime = event.timestamp;
102
+ }
103
+ #else
104
+ - (void)touchesBegan:(NSSet<RNGHUITouch *> *)touches withEvent:(UIEvent *)event
105
+ {
106
+ [_gestureHandler setCurrentPointerType:event];
107
+ [super touchesBegan:touches withEvent:event];
108
+ [self interactionsBegan:touches withEvent:event];
109
+ }
110
+
111
+ - (void)touchesMoved:(NSSet<RNGHUITouch *> *)touches withEvent:(UIEvent *)event
112
+ {
113
+ [super touchesMoved:touches withEvent:event];
114
+ [self interactionsMoved:touches withEvent:event];
115
+ }
116
+
117
+ - (void)touchesEnded:(NSSet<RNGHUITouch *> *)touches withEvent:(UIEvent *)event
118
+ {
119
+ [super touchesEnded:touches withEvent:event];
120
+ [self interactionsEnded:touches withEvent:event];
121
+ }
122
+
123
+ - (void)touchesCancelled:(NSSet<RNGHUITouch *> *)touches withEvent:(UIEvent *)event
124
+ {
125
+ [super touchesCancelled:touches withEvent:event];
126
+ [self interactionsCancelled:touches withEvent:event];
127
+ }
128
+ #endif
129
+
130
+ - (void)reset
131
+ {
132
+ [_gestureHandler.pointerTracker reset];
133
+ [super reset];
134
+ [_gestureHandler reset];
135
+ }
136
+
137
+ @end
138
+ #endif
139
+
140
+ @implementation RNPinchGestureHandler
141
+
142
+ - (instancetype)initWithTag:(NSNumber *)tag
143
+ {
144
+ if ((self = [super initWithTag:tag])) {
145
+ #if !TARGET_OS_TV
146
+ _recognizer = [[RNBetterPinchRecognizer alloc] initWithGestureHandler:self];
147
+ #endif
148
+ }
149
+ return self;
150
+ }
151
+
152
+ #if !TARGET_OS_TV
153
+
154
+ #if TARGET_OS_OSX
155
+ - (RNGestureHandlerEventExtraData *)eventExtraData:(NSMagnificationGestureRecognizer *)recognizer
156
+ {
157
+ return [RNGestureHandlerEventExtraData forPinch:recognizer.magnification
158
+ withFocalPoint:[recognizer locationInView:recognizer.view]
159
+ withVelocity:((RNBetterPinchRecognizer *)recognizer).velocity
160
+ withNumberOfTouches:2
161
+ withPointerType:RNGestureHandlerMouse];
162
+ }
163
+ #else
164
+ - (RNGestureHandlerEventExtraData *)eventExtraData:(UIPinchGestureRecognizer *)recognizer
165
+ {
166
+ return [RNGestureHandlerEventExtraData forPinch:recognizer.scale
167
+ withFocalPoint:[recognizer locationInView:recognizer.view]
168
+ withVelocity:recognizer.velocity
169
+ withNumberOfTouches:recognizer.numberOfTouches
170
+ withPointerType:_pointerType];
171
+ }
172
+ #endif
173
+ #endif // !TARGET_OS_TV
174
+
175
+ @end
@@ -0,0 +1,169 @@
1
+ //
2
+ // RNRotationHandler.m
3
+ // RNGestureHandler
4
+ //
5
+ // Created by Krzysztof Magiera on 12/10/2017.
6
+ // Copyright © 2017 Software Mansion. All rights reserved.
7
+ //
8
+
9
+ #import "RNRotationHandler.h"
10
+
11
+ #if !TARGET_OS_TV
12
+
13
+ #if TARGET_OS_OSX
14
+ @interface RNBetterRotationRecognizer : NSRotationGestureRecognizer {
15
+ CGFloat prevRotation;
16
+ NSTimeInterval prevTime;
17
+ }
18
+
19
+ @property (nonatomic, readonly) CGFloat velocity;
20
+ #else
21
+ @interface RNBetterRotationRecognizer : UIRotationGestureRecognizer
22
+ #endif
23
+
24
+ - (id)initWithGestureHandler:(RNGestureHandler *)gestureHandler;
25
+
26
+ @end
27
+
28
+ @implementation RNBetterRotationRecognizer {
29
+ __weak RNGestureHandler *_gestureHandler;
30
+ }
31
+
32
+ - (id)initWithGestureHandler:(RNGestureHandler *)gestureHandler
33
+ {
34
+ if ((self = [super initWithTarget:self action:@selector(handleGesture:)])) {
35
+ _gestureHandler = gestureHandler;
36
+ }
37
+ #if TARGET_OS_OSX
38
+ prevRotation = 0;
39
+ prevTime = 0;
40
+ #endif
41
+ return self;
42
+ }
43
+
44
+ - (void)handleGesture:(UIGestureRecognizer *)recognizer
45
+ {
46
+ if (self.state == UIGestureRecognizerStateBegan) {
47
+ self.rotation = 0;
48
+ }
49
+ [_gestureHandler handleGesture:recognizer];
50
+ }
51
+
52
+ - (void)interactionsBegan:(NSSet *)touches withEvent:(UIEvent *)event
53
+ {
54
+ [_gestureHandler.pointerTracker touchesBegan:touches withEvent:event];
55
+ }
56
+
57
+ - (void)interactionsMoved:(NSSet *)touches withEvent:(UIEvent *)event
58
+ {
59
+ [_gestureHandler.pointerTracker touchesMoved:touches withEvent:event];
60
+ }
61
+
62
+ - (void)interactionsEnded:(NSSet *)touches withEvent:(UIEvent *)event
63
+ {
64
+ [_gestureHandler.pointerTracker touchesEnded:touches withEvent:event];
65
+ }
66
+
67
+ - (void)interactionsCancelled:(NSSet *)touches withEvent:(UIEvent *)event
68
+ {
69
+ [_gestureHandler.pointerTracker touchesCancelled:touches withEvent:event];
70
+ }
71
+
72
+ #if TARGET_OS_OSX
73
+ - (void)rotateWithEvent:(NSEvent *)event
74
+ {
75
+ [super rotateWithEvent:event];
76
+
77
+ switch (self.state) {
78
+ case NSGestureRecognizerStateBegan:
79
+ [_gestureHandler setCurrentPointerTypeToMouse];
80
+ [self interactionsBegan:[NSSet setWithObject:event] withEvent:event];
81
+ break;
82
+ case NSGestureRecognizerStateChanged:
83
+ [self interactionsMoved:[NSSet setWithObject:event] withEvent:event];
84
+ break;
85
+ case NSGestureRecognizerStateEnded:
86
+ [self interactionsEnded:[NSSet setWithObject:event] withEvent:event];
87
+ break;
88
+ case NSGestureRecognizerStateCancelled:
89
+ [self interactionsCancelled:[NSSet setWithObject:event] withEvent:event];
90
+ break;
91
+ }
92
+
93
+ _velocity = (self.rotation - prevRotation) / ((event.timestamp - prevTime) * 1000);
94
+ prevRotation = self.rotation;
95
+ prevTime = event.timestamp;
96
+ }
97
+ #else
98
+ - (void)touchesBegan:(NSSet<RNGHUITouch *> *)touches withEvent:(UIEvent *)event
99
+ {
100
+ [_gestureHandler setCurrentPointerType:event];
101
+ [super touchesBegan:touches withEvent:event];
102
+ [self interactionsBegan:touches withEvent:event];
103
+ }
104
+
105
+ - (void)touchesMoved:(NSSet<RNGHUITouch *> *)touches withEvent:(UIEvent *)event
106
+ {
107
+ [super touchesMoved:touches withEvent:event];
108
+ [self interactionsMoved:touches withEvent:event];
109
+ }
110
+
111
+ - (void)touchesEnded:(NSSet<RNGHUITouch *> *)touches withEvent:(UIEvent *)event
112
+ {
113
+ [super touchesEnded:touches withEvent:event];
114
+ [self interactionsEnded:touches withEvent:event];
115
+ }
116
+
117
+ - (void)touchesCancelled:(NSSet<RNGHUITouch *> *)touches withEvent:(UIEvent *)event
118
+ {
119
+ [super touchesCancelled:touches withEvent:event];
120
+ [self interactionsCancelled:touches withEvent:event];
121
+ }
122
+ #endif
123
+
124
+ - (void)reset
125
+ {
126
+ [_gestureHandler.pointerTracker reset];
127
+ [super reset];
128
+ [_gestureHandler reset];
129
+ }
130
+
131
+ @end
132
+ #endif
133
+
134
+ @implementation RNRotationGestureHandler
135
+
136
+ - (instancetype)initWithTag:(NSNumber *)tag
137
+ {
138
+ if ((self = [super initWithTag:tag])) {
139
+ #if !TARGET_OS_TV
140
+ _recognizer = [[RNBetterRotationRecognizer alloc] initWithGestureHandler:self];
141
+ #endif
142
+ }
143
+ return self;
144
+ }
145
+
146
+ #if !TARGET_OS_TV
147
+
148
+ #if TARGET_OS_OSX
149
+ - (RNGestureHandlerEventExtraData *)eventExtraData:(NSRotationGestureRecognizer *)recognizer
150
+ {
151
+ return [RNGestureHandlerEventExtraData forRotation:recognizer.rotation
152
+ withAnchorPoint:[recognizer locationInView:recognizer.view]
153
+ withVelocity:((RNBetterRotationRecognizer *)recognizer).velocity
154
+ withNumberOfTouches:2
155
+ withPointerType:RNGestureHandlerMouse];
156
+ }
157
+ #else
158
+ - (RNGestureHandlerEventExtraData *)eventExtraData:(UIRotationGestureRecognizer *)recognizer
159
+ {
160
+ return [RNGestureHandlerEventExtraData forRotation:recognizer.rotation
161
+ withAnchorPoint:[recognizer locationInView:recognizer.view]
162
+ withVelocity:recognizer.velocity
163
+ withNumberOfTouches:recognizer.numberOfTouches
164
+ withPointerType:_pointerType];
165
+ }
166
+ #endif
167
+ #endif // !TARGET_OS_TV
168
+
169
+ @end