react-native-gesture-handler 2.7.1 → 2.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (232) hide show
  1. package/RNGestureHandler.podspec +1 -1
  2. package/android/build.gradle +53 -46
  3. package/android/noreanimated/src/main/java/com/swmansion/gesturehandler/ReanimatedEventDispatcher.kt +3 -3
  4. package/android/reanimated/src/main/java/com/swmansion/gesturehandler/ReanimatedEventDispatcher.kt +7 -7
  5. package/android/src/fabric/java/com/swmansion/gesturehandler/ReactContextExtensions.kt +2 -2
  6. package/android/src/main/java/com/swmansion/gesturehandler/RNGestureHandlerPackage.kt +3 -3
  7. package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/FlingGestureHandler.kt +12 -9
  8. package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/GestureHandler.kt +39 -31
  9. package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/GestureHandlerInteractionController.kt +1 -1
  10. package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/GestureHandlerOrchestrator.kt +28 -19
  11. package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/GestureHandlerRegistry.kt +1 -1
  12. package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/GestureUtils.kt +1 -1
  13. package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/LongPressGestureHandler.kt +1 -1
  14. package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/ManualGestureHandler.kt +1 -1
  15. package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/NativeViewGestureHandler.kt +5 -5
  16. package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/OnTouchEventListener.kt +1 -1
  17. package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/PanGestureHandler.kt +7 -5
  18. package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/PinchGestureHandler.kt +11 -4
  19. package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/PointerEventsConfig.kt +1 -1
  20. package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/RotationGestureDetector.kt +1 -1
  21. package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/RotationGestureHandler.kt +7 -2
  22. package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/ScaleGestureDetector.java +1 -1
  23. package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/TapGestureHandler.kt +3 -3
  24. package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/ViewConfigurationHelper.kt +1 -1
  25. package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/react}/Extensions.kt +3 -3
  26. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerButtonViewManager.kt +8 -6
  27. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEnabledRootView.kt +1 -5
  28. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEvent.kt +20 -8
  29. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEventDataExtractor.kt +1 -1
  30. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerInteractionManager.kt +3 -3
  31. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerModule.kt +40 -15
  32. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRegistry.kt +2 -2
  33. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootHelper.kt +8 -6
  34. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootView.kt +0 -2
  35. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootViewManager.kt +4 -2
  36. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerStateChangeEvent.kt +7 -7
  37. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerTouchEvent.kt +5 -5
  38. package/android/src/main/java/com/swmansion/gesturehandler/react/RNViewConfigurationHelper.kt +2 -2
  39. package/android/src/main/jni/CMakeLists.txt +10 -44
  40. package/android/src/main/jni/cpp-adapter.cpp +16 -13
  41. package/android/src/paper/java/com/swmansion/gesturehandler/ReactContextExtensions.kt +5 -5
  42. package/ios/Handlers/RNFlingHandler.m +39 -37
  43. package/ios/Handlers/RNForceTouchHandler.m +19 -17
  44. package/ios/Handlers/RNLongPressHandler.m +20 -22
  45. package/ios/Handlers/RNManualHandler.m +23 -8
  46. package/ios/Handlers/RNNativeViewHandler.mm +92 -88
  47. package/ios/Handlers/RNPanHandler.m +28 -32
  48. package/ios/Handlers/RNPinchHandler.m +9 -10
  49. package/ios/Handlers/RNRotationHandler.m +11 -14
  50. package/ios/Handlers/RNTapHandler.m +26 -26
  51. package/ios/RNGestureHandler.h +31 -24
  52. package/ios/RNGestureHandler.m +278 -273
  53. package/ios/RNGestureHandlerActionType.h +6 -4
  54. package/ios/RNGestureHandlerButton.m +11 -12
  55. package/ios/RNGestureHandlerButtonComponentView.mm +7 -8
  56. package/ios/RNGestureHandlerButtonManager.m +6 -5
  57. package/ios/RNGestureHandlerDirection.h +4 -4
  58. package/ios/RNGestureHandlerEvents.h +3 -4
  59. package/ios/RNGestureHandlerEvents.m +114 -119
  60. package/ios/RNGestureHandlerManager.h +1 -2
  61. package/ios/RNGestureHandlerManager.mm +176 -178
  62. package/ios/RNGestureHandlerModule.h +1 -2
  63. package/ios/RNGestureHandlerModule.mm +126 -122
  64. package/ios/RNGestureHandlerPointerTracker.h +1 -1
  65. package/ios/RNGestureHandlerPointerTracker.m +40 -37
  66. package/ios/RNGestureHandlerRegistry.h +3 -1
  67. package/ios/RNGestureHandlerRegistry.m +24 -22
  68. package/ios/RNGestureHandlerState.h +6 -6
  69. package/ios/RNGestureHandlerStateManager.h +1 -1
  70. package/ios/RNManualActivationRecognizer.m +9 -9
  71. package/ios/RNRootViewGestureRecognizer.m +36 -39
  72. package/lib/commonjs/RNGestureHandlerModule.macos.js.map +1 -1
  73. package/lib/commonjs/RNGestureHandlerModule.web.js.map +1 -1
  74. package/lib/commonjs/RNGestureHandlerModule.windows.js +156 -0
  75. package/lib/commonjs/RNGestureHandlerModule.windows.js.map +1 -0
  76. package/lib/commonjs/components/DrawerLayout.js +1 -0
  77. package/lib/commonjs/components/DrawerLayout.js.map +1 -1
  78. package/lib/commonjs/components/Swipeable.js.map +1 -1
  79. package/lib/commonjs/components/touchables/TouchableOpacity.js.map +1 -1
  80. package/lib/commonjs/gestureHandlerRootHOC.js +2 -1
  81. package/lib/commonjs/gestureHandlerRootHOC.js.map +1 -1
  82. package/lib/commonjs/getShadowNodeFromRef.js +2 -2
  83. package/lib/commonjs/getShadowNodeFromRef.js.map +1 -1
  84. package/lib/commonjs/handlers/LongPressGestureHandler.js +3 -1
  85. package/lib/commonjs/handlers/LongPressGestureHandler.js.map +1 -1
  86. package/lib/commonjs/handlers/TapGestureHandler.js +3 -1
  87. package/lib/commonjs/handlers/TapGestureHandler.js.map +1 -1
  88. package/lib/commonjs/handlers/createHandler.js.map +1 -1
  89. package/lib/commonjs/handlers/gestureHandlerCommon.js +5 -2
  90. package/lib/commonjs/handlers/gestureHandlerCommon.js.map +1 -1
  91. package/lib/commonjs/handlers/gestureHandlerTypesCompat.js +4 -0
  92. package/lib/commonjs/handlers/gestures/GestureDetector.js +87 -38
  93. package/lib/commonjs/handlers/gestures/GestureDetector.js.map +1 -1
  94. package/lib/commonjs/handlers/gestures/eventReceiver.js.map +1 -1
  95. package/lib/commonjs/handlers/gestures/gesture.js.map +1 -1
  96. package/lib/commonjs/handlers/gestures/longPressGesture.js +1 -0
  97. package/lib/commonjs/handlers/gestures/longPressGesture.js.map +1 -1
  98. package/lib/commonjs/handlers/gestures/tapGesture.js +1 -0
  99. package/lib/commonjs/handlers/gestures/tapGesture.js.map +1 -1
  100. package/lib/commonjs/jestUtils/jestUtils.js.map +1 -1
  101. package/lib/commonjs/web/detectors/RotationGestureDetector.js.map +1 -1
  102. package/lib/commonjs/web/handlers/FlingGestureHandler.js +0 -1
  103. package/lib/commonjs/web/handlers/FlingGestureHandler.js.map +1 -1
  104. package/lib/commonjs/web/handlers/GestureHandler.js +28 -3
  105. package/lib/commonjs/web/handlers/GestureHandler.js.map +1 -1
  106. package/lib/commonjs/web/handlers/LongPressGestureHandler.js +0 -2
  107. package/lib/commonjs/web/handlers/LongPressGestureHandler.js.map +1 -1
  108. package/lib/commonjs/web/handlers/ManualGestureHandler.js +15 -0
  109. package/lib/commonjs/web/handlers/ManualGestureHandler.js.map +1 -1
  110. package/lib/commonjs/web/handlers/NativeViewGestureHandler.js +0 -2
  111. package/lib/commonjs/web/handlers/NativeViewGestureHandler.js.map +1 -1
  112. package/lib/commonjs/web/handlers/PanGestureHandler.js +0 -5
  113. package/lib/commonjs/web/handlers/PanGestureHandler.js.map +1 -1
  114. package/lib/commonjs/web/handlers/PinchGestureHandler.js +0 -1
  115. package/lib/commonjs/web/handlers/PinchGestureHandler.js.map +1 -1
  116. package/lib/commonjs/web/handlers/RotationGestureHandler.js +0 -1
  117. package/lib/commonjs/web/handlers/RotationGestureHandler.js.map +1 -1
  118. package/lib/commonjs/web/handlers/TapGestureHandler.js +0 -2
  119. package/lib/commonjs/web/handlers/TapGestureHandler.js.map +1 -1
  120. package/lib/commonjs/web/interfaces.js.map +1 -1
  121. package/lib/commonjs/web/tools/InteractionManager.js.map +1 -1
  122. package/lib/commonjs/web_hammer/GestureHandler.js.map +1 -1
  123. package/lib/commonjs/web_hammer/NodeManager.js +4 -1
  124. package/lib/commonjs/web_hammer/NodeManager.js.map +1 -1
  125. package/lib/commonjs/web_hammer/PanGestureHandler.js +25 -6
  126. package/lib/commonjs/web_hammer/PanGestureHandler.js.map +1 -1
  127. package/lib/module/RNGestureHandlerModule.macos.js.map +1 -1
  128. package/lib/module/RNGestureHandlerModule.web.js.map +1 -1
  129. package/lib/module/RNGestureHandlerModule.windows.js +117 -0
  130. package/lib/module/RNGestureHandlerModule.windows.js.map +1 -0
  131. package/lib/module/components/DrawerLayout.js +1 -0
  132. package/lib/module/components/DrawerLayout.js.map +1 -1
  133. package/lib/module/components/Swipeable.js.map +1 -1
  134. package/lib/module/components/touchables/TouchableOpacity.js.map +1 -1
  135. package/lib/module/gestureHandlerRootHOC.js +2 -1
  136. package/lib/module/gestureHandlerRootHOC.js.map +1 -1
  137. package/lib/module/getShadowNodeFromRef.js +2 -2
  138. package/lib/module/getShadowNodeFromRef.js.map +1 -1
  139. package/lib/module/handlers/LongPressGestureHandler.js +3 -1
  140. package/lib/module/handlers/LongPressGestureHandler.js.map +1 -1
  141. package/lib/module/handlers/TapGestureHandler.js +3 -1
  142. package/lib/module/handlers/TapGestureHandler.js.map +1 -1
  143. package/lib/module/handlers/createHandler.js.map +1 -1
  144. package/lib/module/handlers/gestureHandlerCommon.js +5 -2
  145. package/lib/module/handlers/gestureHandlerCommon.js.map +1 -1
  146. package/lib/module/handlers/gestureHandlerTypesCompat.js +1 -1
  147. package/lib/module/handlers/gestures/GestureDetector.js +89 -39
  148. package/lib/module/handlers/gestures/GestureDetector.js.map +1 -1
  149. package/lib/module/handlers/gestures/eventReceiver.js.map +1 -1
  150. package/lib/module/handlers/gestures/gesture.js.map +1 -1
  151. package/lib/module/handlers/gestures/longPressGesture.js +1 -0
  152. package/lib/module/handlers/gestures/longPressGesture.js.map +1 -1
  153. package/lib/module/handlers/gestures/tapGesture.js +1 -0
  154. package/lib/module/handlers/gestures/tapGesture.js.map +1 -1
  155. package/lib/module/jestUtils/jestUtils.js.map +1 -1
  156. package/lib/module/web/detectors/RotationGestureDetector.js.map +1 -1
  157. package/lib/module/web/handlers/FlingGestureHandler.js +0 -1
  158. package/lib/module/web/handlers/FlingGestureHandler.js.map +1 -1
  159. package/lib/module/web/handlers/GestureHandler.js +28 -3
  160. package/lib/module/web/handlers/GestureHandler.js.map +1 -1
  161. package/lib/module/web/handlers/LongPressGestureHandler.js +0 -2
  162. package/lib/module/web/handlers/LongPressGestureHandler.js.map +1 -1
  163. package/lib/module/web/handlers/ManualGestureHandler.js +15 -0
  164. package/lib/module/web/handlers/ManualGestureHandler.js.map +1 -1
  165. package/lib/module/web/handlers/NativeViewGestureHandler.js +0 -2
  166. package/lib/module/web/handlers/NativeViewGestureHandler.js.map +1 -1
  167. package/lib/module/web/handlers/PanGestureHandler.js +0 -5
  168. package/lib/module/web/handlers/PanGestureHandler.js.map +1 -1
  169. package/lib/module/web/handlers/PinchGestureHandler.js +0 -1
  170. package/lib/module/web/handlers/PinchGestureHandler.js.map +1 -1
  171. package/lib/module/web/handlers/RotationGestureHandler.js +0 -1
  172. package/lib/module/web/handlers/RotationGestureHandler.js.map +1 -1
  173. package/lib/module/web/handlers/TapGestureHandler.js +0 -2
  174. package/lib/module/web/handlers/TapGestureHandler.js.map +1 -1
  175. package/lib/module/web/interfaces.js.map +1 -1
  176. package/lib/module/web/tools/InteractionManager.js.map +1 -1
  177. package/lib/module/web_hammer/GestureHandler.js.map +1 -1
  178. package/lib/module/web_hammer/NodeManager.js +4 -1
  179. package/lib/module/web_hammer/NodeManager.js.map +1 -1
  180. package/lib/module/web_hammer/PanGestureHandler.js +25 -6
  181. package/lib/module/web_hammer/PanGestureHandler.js.map +1 -1
  182. package/lib/typescript/RNGestureHandlerModule.macos.d.ts +1 -1
  183. package/lib/typescript/RNGestureHandlerModule.web.d.ts +1 -1
  184. package/lib/typescript/RNGestureHandlerModule.windows.d.ts +48 -0
  185. package/lib/typescript/components/DrawerLayout.d.ts +10 -1
  186. package/lib/typescript/components/Swipeable.d.ts +3 -2
  187. package/lib/typescript/fabric/RNGestureHandlerButtonNativeComponent.d.ts +1 -1
  188. package/lib/typescript/fabric/RNGestureHandlerRootViewNativeComponent.d.ts +1 -1
  189. package/lib/typescript/gestureHandlerRootHOC.d.ts +1 -1
  190. package/lib/typescript/handlers/NativeViewGestureHandler.d.ts +1 -1
  191. package/lib/typescript/handlers/PanGestureHandler.d.ts +1 -1
  192. package/lib/typescript/handlers/gestureHandlerCommon.d.ts +3 -1
  193. package/lib/typescript/handlers/gestures/GestureDetector.d.ts +3 -1
  194. package/lib/typescript/web/handlers/ManualGestureHandler.d.ts +3 -1
  195. package/lib/typescript/web/interfaces.d.ts +3 -1
  196. package/lib/typescript/web/tools/NodeManager.d.ts +2 -2
  197. package/package.json +17 -14
  198. package/src/RNGestureHandlerModule.macos.ts +2 -2
  199. package/src/RNGestureHandlerModule.web.ts +2 -2
  200. package/src/RNGestureHandlerModule.windows.ts +140 -0
  201. package/src/components/DrawerLayout.tsx +22 -12
  202. package/src/components/Swipeable.tsx +16 -13
  203. package/src/components/touchables/TouchableOpacity.tsx +1 -1
  204. package/src/gestureHandlerRootHOC.tsx +4 -1
  205. package/src/getShadowNodeFromRef.ts +3 -3
  206. package/src/handlers/LongPressGestureHandler.ts +3 -1
  207. package/src/handlers/TapGestureHandler.ts +3 -1
  208. package/src/handlers/createHandler.tsx +13 -15
  209. package/src/handlers/gestureHandlerCommon.ts +9 -4
  210. package/src/handlers/gestureHandlerTypesCompat.ts +34 -17
  211. package/src/handlers/gestures/GestureDetector.tsx +117 -44
  212. package/src/handlers/gestures/eventReceiver.ts +2 -1
  213. package/src/handlers/gestures/gesture.ts +8 -12
  214. package/src/handlers/gestures/longPressGesture.ts +1 -0
  215. package/src/handlers/gestures/tapGesture.ts +1 -0
  216. package/src/jestUtils/jestUtils.ts +3 -4
  217. package/src/web/detectors/RotationGestureDetector.ts +2 -1
  218. package/src/web/handlers/FlingGestureHandler.ts +2 -3
  219. package/src/web/handlers/GestureHandler.ts +30 -11
  220. package/src/web/handlers/LongPressGestureHandler.ts +0 -3
  221. package/src/web/handlers/ManualGestureHandler.ts +10 -1
  222. package/src/web/handlers/NativeViewGestureHandler.ts +0 -2
  223. package/src/web/handlers/PanGestureHandler.ts +0 -6
  224. package/src/web/handlers/PinchGestureHandler.ts +0 -2
  225. package/src/web/handlers/RotationGestureHandler.ts +2 -5
  226. package/src/web/handlers/TapGestureHandler.ts +0 -3
  227. package/src/web/interfaces.ts +3 -0
  228. package/src/web/tools/InteractionManager.ts +2 -3
  229. package/src/web_hammer/GestureHandler.ts +6 -8
  230. package/src/web_hammer/NodeManager.ts +3 -1
  231. package/src/web_hammer/PanGestureHandler.ts +12 -6
  232. package/android/lib/build.gradle +0 -28
@@ -11,84 +11,84 @@
11
11
  @property (nonatomic, readonly) RNGestureHandler *gestureHandler;
12
12
  @end
13
13
 
14
-
15
14
  @implementation UIGestureRecognizer (GestureHandler)
16
15
 
17
16
  - (RNGestureHandler *)gestureHandler
18
17
  {
19
- id delegate = self.delegate;
20
- if ([delegate isKindOfClass:[RNGestureHandler class]]) {
21
- return (RNGestureHandler *)delegate;
22
- }
23
- return nil;
18
+ id delegate = self.delegate;
19
+ if ([delegate isKindOfClass:[RNGestureHandler class]]) {
20
+ return (RNGestureHandler *)delegate;
21
+ }
22
+ return nil;
24
23
  }
25
24
 
26
25
  @end
27
26
 
28
27
  typedef struct RNGHHitSlop {
29
- CGFloat top, left, bottom, right, width, height;
28
+ CGFloat top, left, bottom, right, width, height;
30
29
  } RNGHHitSlop;
31
30
 
32
- static RNGHHitSlop RNGHHitSlopEmpty = { NAN, NAN, NAN, NAN, NAN, NAN };
31
+ static RNGHHitSlop RNGHHitSlopEmpty = {NAN, NAN, NAN, NAN, NAN, NAN};
33
32
 
34
33
  #define RNGH_HIT_SLOP_GET(key) (prop[key] == nil ? NAN : [prop[key] doubleValue])
35
- #define RNGH_HIT_SLOP_IS_SET(hitSlop) (!isnan(hitSlop.left) || !isnan(hitSlop.right) || \
36
- !isnan(hitSlop.top) || !isnan(hitSlop.bottom))
34
+ #define RNGH_HIT_SLOP_IS_SET(hitSlop) \
35
+ (!isnan(hitSlop.left) || !isnan(hitSlop.right) || !isnan(hitSlop.top) || !isnan(hitSlop.bottom))
37
36
  #define RNGH_HIT_SLOP_INSET(key) (isnan(hitSlop.key) ? 0. : hitSlop.key)
38
37
 
39
- CGRect RNGHHitSlopInsetRect(CGRect rect, RNGHHitSlop hitSlop) {
40
- rect.origin.x -= RNGH_HIT_SLOP_INSET(left);
41
- rect.origin.y -= RNGH_HIT_SLOP_INSET(top);
38
+ CGRect RNGHHitSlopInsetRect(CGRect rect, RNGHHitSlop hitSlop)
39
+ {
40
+ rect.origin.x -= RNGH_HIT_SLOP_INSET(left);
41
+ rect.origin.y -= RNGH_HIT_SLOP_INSET(top);
42
42
 
43
- if (!isnan(hitSlop.width)) {
44
- if (!isnan(hitSlop.right)) {
45
- rect.origin.x = rect.size.width - hitSlop.width + RNGH_HIT_SLOP_INSET(right);
46
- }
47
- rect.size.width = hitSlop.width;
48
- } else {
49
- rect.size.width += (RNGH_HIT_SLOP_INSET(left) + RNGH_HIT_SLOP_INSET(right));
43
+ if (!isnan(hitSlop.width)) {
44
+ if (!isnan(hitSlop.right)) {
45
+ rect.origin.x = rect.size.width - hitSlop.width + RNGH_HIT_SLOP_INSET(right);
50
46
  }
51
- if (!isnan(hitSlop.height)) {
52
- if (!isnan(hitSlop.bottom)) {
53
- rect.origin.y = rect.size.height - hitSlop.height + RNGH_HIT_SLOP_INSET(bottom);
54
- }
55
- rect.size.height = hitSlop.height;
56
- } else {
57
- rect.size.height += (RNGH_HIT_SLOP_INSET(top) + RNGH_HIT_SLOP_INSET(bottom));
47
+ rect.size.width = hitSlop.width;
48
+ } else {
49
+ rect.size.width += (RNGH_HIT_SLOP_INSET(left) + RNGH_HIT_SLOP_INSET(right));
50
+ }
51
+ if (!isnan(hitSlop.height)) {
52
+ if (!isnan(hitSlop.bottom)) {
53
+ rect.origin.y = rect.size.height - hitSlop.height + RNGH_HIT_SLOP_INSET(bottom);
58
54
  }
59
- return rect;
55
+ rect.size.height = hitSlop.height;
56
+ } else {
57
+ rect.size.height += (RNGH_HIT_SLOP_INSET(top) + RNGH_HIT_SLOP_INSET(bottom));
58
+ }
59
+ return rect;
60
60
  }
61
61
 
62
62
  static NSHashTable<RNGestureHandler *> *allGestureHandlers;
63
63
 
64
64
  @implementation RNGestureHandler {
65
- RNGestureHandlerPointerTracker *_pointerTracker;
66
- RNGestureHandlerState _state;
67
- RNManualActivationRecognizer *_manualActivationRecognizer;
68
- NSArray<NSNumber *> *_handlersToWaitFor;
69
- NSArray<NSNumber *> *_simultaneousHandlers;
70
- RNGHHitSlop _hitSlop;
71
- uint16_t _eventCoalescingKey;
65
+ RNGestureHandlerPointerTracker *_pointerTracker;
66
+ RNGestureHandlerState _state;
67
+ RNManualActivationRecognizer *_manualActivationRecognizer;
68
+ NSArray<NSNumber *> *_handlersToWaitFor;
69
+ NSArray<NSNumber *> *_simultaneousHandlers;
70
+ RNGHHitSlop _hitSlop;
71
+ uint16_t _eventCoalescingKey;
72
72
  }
73
73
 
74
74
  - (instancetype)initWithTag:(NSNumber *)tag
75
75
  {
76
- if ((self = [super init])) {
77
- _pointerTracker = [[RNGestureHandlerPointerTracker alloc] initWithGestureHandler:self];
78
- _tag = tag;
79
- _lastState = RNGestureHandlerStateUndetermined;
80
- _hitSlop = RNGHHitSlopEmpty;
81
- _state = RNGestureHandlerStateBegan;
82
- _manualActivationRecognizer = nil;
83
-
84
- static dispatch_once_t onceToken;
85
- dispatch_once(&onceToken, ^{
86
- allGestureHandlers = [NSHashTable weakObjectsHashTable];
87
- });
88
-
89
- [allGestureHandlers addObject:self];
90
- }
91
- return self;
76
+ if ((self = [super init])) {
77
+ _pointerTracker = [[RNGestureHandlerPointerTracker alloc] initWithGestureHandler:self];
78
+ _tag = tag;
79
+ _lastState = RNGestureHandlerStateUndetermined;
80
+ _hitSlop = RNGHHitSlopEmpty;
81
+ _state = RNGestureHandlerStateBegan;
82
+ _manualActivationRecognizer = nil;
83
+
84
+ static dispatch_once_t onceToken;
85
+ dispatch_once(&onceToken, ^{
86
+ allGestureHandlers = [NSHashTable weakObjectsHashTable];
87
+ });
88
+
89
+ [allGestureHandlers addObject:self];
90
+ }
91
+ return self;
92
92
  }
93
93
 
94
94
  - (void)resetConfig
@@ -107,197 +107,201 @@ static NSHashTable<RNGestureHandler *> *allGestureHandlers;
107
107
  - (void)configure:(NSDictionary *)config
108
108
  {
109
109
  [self resetConfig];
110
- _handlersToWaitFor = [RCTConvert NSNumberArray:config[@"waitFor"]];
111
- _simultaneousHandlers = [RCTConvert NSNumberArray:config[@"simultaneousHandlers"]];
110
+ _handlersToWaitFor = [RCTConvert NSNumberArray:config[@"waitFor"]];
111
+ _simultaneousHandlers = [RCTConvert NSNumberArray:config[@"simultaneousHandlers"]];
112
112
 
113
- id prop = config[@"enabled"];
114
- if (prop != nil) {
115
- self.enabled = [RCTConvert BOOL:prop];
116
- }
113
+ id prop = config[@"enabled"];
114
+ if (prop != nil) {
115
+ self.enabled = [RCTConvert BOOL:prop];
116
+ }
117
117
 
118
- prop = config[@"shouldCancelWhenOutside"];
119
- if (prop != nil) {
120
- _shouldCancelWhenOutside = [RCTConvert BOOL:prop];
121
- }
122
-
123
- prop = config[@"cancelsTouchesInView"];
124
- if (prop != nil) {
125
- _recognizer.cancelsTouchesInView = [RCTConvert BOOL:prop];
118
+ prop = config[@"shouldCancelWhenOutside"];
119
+ if (prop != nil) {
120
+ _shouldCancelWhenOutside = [RCTConvert BOOL:prop];
121
+ }
122
+
123
+ prop = config[@"cancelsTouchesInView"];
124
+ if (prop != nil) {
125
+ _recognizer.cancelsTouchesInView = [RCTConvert BOOL:prop];
126
+ }
127
+
128
+ prop = config[@"needsPointerData"];
129
+ if (prop != nil) {
130
+ _needsPointerData = [RCTConvert BOOL:prop];
131
+ }
132
+
133
+ prop = config[@"manualActivation"];
134
+ if (prop != nil) {
135
+ self.manualActivation = [RCTConvert BOOL:prop];
136
+ }
137
+
138
+ prop = config[@"hitSlop"];
139
+ if ([prop isKindOfClass:[NSNumber class]]) {
140
+ _hitSlop.left = _hitSlop.right = _hitSlop.top = _hitSlop.bottom = [prop doubleValue];
141
+ } else if (prop != nil) {
142
+ _hitSlop.left = _hitSlop.right = RNGH_HIT_SLOP_GET(@"horizontal");
143
+ _hitSlop.top = _hitSlop.bottom = RNGH_HIT_SLOP_GET(@"vertical");
144
+ _hitSlop.left = RNGH_HIT_SLOP_GET(@"left");
145
+ _hitSlop.right = RNGH_HIT_SLOP_GET(@"right");
146
+ _hitSlop.top = RNGH_HIT_SLOP_GET(@"top");
147
+ _hitSlop.bottom = RNGH_HIT_SLOP_GET(@"bottom");
148
+ _hitSlop.width = RNGH_HIT_SLOP_GET(@"width");
149
+ _hitSlop.height = RNGH_HIT_SLOP_GET(@"height");
150
+ if (isnan(_hitSlop.left) && isnan(_hitSlop.right) && !isnan(_hitSlop.width)) {
151
+ RCTLogError(@"When width is set one of left or right pads need to be defined");
126
152
  }
127
-
128
- prop = config[@"needsPointerData"];
129
- if (prop != nil) {
130
- _needsPointerData = [RCTConvert BOOL:prop];
153
+ if (!isnan(_hitSlop.width) && !isnan(_hitSlop.left) && !isnan(_hitSlop.right)) {
154
+ RCTLogError(@"Cannot have all of left, right and width defined");
131
155
  }
132
-
133
- prop = config[@"manualActivation"];
134
- if (prop != nil) {
135
- self.manualActivation = [RCTConvert BOOL:prop];
156
+ if (isnan(_hitSlop.top) && isnan(_hitSlop.bottom) && !isnan(_hitSlop.height)) {
157
+ RCTLogError(@"When height is set one of top or bottom pads need to be defined");
136
158
  }
137
-
138
- prop = config[@"hitSlop"];
139
- if ([prop isKindOfClass:[NSNumber class]]) {
140
- _hitSlop.left = _hitSlop.right = _hitSlop.top = _hitSlop.bottom = [prop doubleValue];
141
- } else if (prop != nil) {
142
- _hitSlop.left = _hitSlop.right = RNGH_HIT_SLOP_GET(@"horizontal");
143
- _hitSlop.top = _hitSlop.bottom = RNGH_HIT_SLOP_GET(@"vertical");
144
- _hitSlop.left = RNGH_HIT_SLOP_GET(@"left");
145
- _hitSlop.right = RNGH_HIT_SLOP_GET(@"right");
146
- _hitSlop.top = RNGH_HIT_SLOP_GET(@"top");
147
- _hitSlop.bottom = RNGH_HIT_SLOP_GET(@"bottom");
148
- _hitSlop.width = RNGH_HIT_SLOP_GET(@"width");
149
- _hitSlop.height = RNGH_HIT_SLOP_GET(@"height");
150
- if (isnan(_hitSlop.left) && isnan(_hitSlop.right) && !isnan(_hitSlop.width)) {
151
- RCTLogError(@"When width is set one of left or right pads need to be defined");
152
- }
153
- if (!isnan(_hitSlop.width) && !isnan(_hitSlop.left) && !isnan(_hitSlop.right)) {
154
- RCTLogError(@"Cannot have all of left, right and width defined");
155
- }
156
- if (isnan(_hitSlop.top) && isnan(_hitSlop.bottom) && !isnan(_hitSlop.height)) {
157
- RCTLogError(@"When height is set one of top or bottom pads need to be defined");
158
- }
159
- if (!isnan(_hitSlop.height) && !isnan(_hitSlop.top) && !isnan(_hitSlop.bottom)) {
160
- RCTLogError(@"Cannot have all of top, bottom and height defined");
161
- }
159
+ if (!isnan(_hitSlop.height) && !isnan(_hitSlop.top) && !isnan(_hitSlop.bottom)) {
160
+ RCTLogError(@"Cannot have all of top, bottom and height defined");
162
161
  }
162
+ }
163
163
  }
164
164
 
165
165
  - (void)setEnabled:(BOOL)enabled
166
166
  {
167
- _enabled = enabled;
168
- self.recognizer.enabled = enabled;
167
+ _enabled = enabled;
168
+ self.recognizer.enabled = enabled;
169
169
  }
170
170
 
171
171
  - (void)bindToView:(UIView *)view
172
172
  {
173
- view.userInteractionEnabled = YES;
174
- self.recognizer.delegate = self;
175
- [view addGestureRecognizer:self.recognizer];
176
-
173
+ view.userInteractionEnabled = YES;
174
+ self.recognizer.delegate = self;
175
+ [view addGestureRecognizer:self.recognizer];
176
+
177
177
  [self bindManualActivationToView:view];
178
178
  }
179
179
 
180
180
  - (void)unbindFromView
181
181
  {
182
- [self.recognizer.view removeGestureRecognizer:self.recognizer];
183
- self.recognizer.delegate = nil;
184
-
185
- [self unbindManualActivation];
182
+ [self.recognizer.view removeGestureRecognizer:self.recognizer];
183
+ self.recognizer.delegate = nil;
184
+
185
+ [self unbindManualActivation];
186
186
  }
187
187
 
188
188
  - (RNGestureHandlerEventExtraData *)eventExtraData:(UIGestureRecognizer *)recognizer
189
189
  {
190
- return [RNGestureHandlerEventExtraData
191
- forPosition:[recognizer locationInView:recognizer.view]
192
- withAbsolutePosition:[recognizer locationInView:recognizer.view.window]
193
- withNumberOfTouches:recognizer.numberOfTouches];
190
+ return [RNGestureHandlerEventExtraData forPosition:[recognizer locationInView:recognizer.view]
191
+ withAbsolutePosition:[recognizer locationInView:recognizer.view.window]
192
+ withNumberOfTouches:recognizer.numberOfTouches];
194
193
  }
195
194
 
196
195
  - (void)handleGesture:(UIGestureRecognizer *)recognizer
197
196
  {
198
- // it may happen that the gesture recognizer is reset after it's been unbound from the view,
199
- // it that recognizer tried to send event, the app would crash because the target of the event
200
- // would be nil.
201
- if (recognizer.view.reactTag == nil) {
202
- return;
203
- }
204
-
205
- _state = [self recognizerState];
206
- [self handleGesture:recognizer inState:_state];
197
+ // it may happen that the gesture recognizer is reset after it's been unbound from the view,
198
+ // it that recognizer tried to send event, the app would crash because the target of the event
199
+ // would be nil.
200
+ if (recognizer.view.reactTag == nil) {
201
+ return;
202
+ }
203
+
204
+ _state = [self recognizerState];
205
+ [self handleGesture:recognizer inState:_state];
207
206
  }
208
207
 
209
208
  - (void)handleGesture:(UIGestureRecognizer *)recognizer inState:(RNGestureHandlerState)state
210
209
  {
211
- _state = state;
212
- RNGestureHandlerEventExtraData *eventData = [self eventExtraData:recognizer];
213
- [self sendEventsInState:self.state forViewWithTag:recognizer.view.reactTag withExtraData:eventData];
210
+ _state = state;
211
+ RNGestureHandlerEventExtraData *eventData = [self eventExtraData:recognizer];
212
+ [self sendEventsInState:self.state forViewWithTag:recognizer.view.reactTag withExtraData:eventData];
214
213
  }
215
214
 
216
215
  - (void)sendEventsInState:(RNGestureHandlerState)state
217
216
  forViewWithTag:(nonnull NSNumber *)reactTag
218
217
  withExtraData:(RNGestureHandlerEventExtraData *)extraData
219
218
  {
220
- if (state != _lastState) {
221
- // don't send change events from END to FAILED or CANCELLED, this may happen when gesture is ended in `onTouchesUp` callback
222
- if (_lastState == RNGestureHandlerStateEnd && (state == RNGestureHandlerStateFailed || state == RNGestureHandlerStateCancelled)) {
223
- return;
224
- }
225
-
226
- if (state == RNGestureHandlerStateActive) {
227
- // Generate a unique coalescing-key each time the gesture-handler becomes active. All events will have
228
- // the same coalescing-key allowing RCTEventDispatcher to coalesce RNGestureHandlerEvents when events are
229
- // generated faster than they can be treated by JS thread
230
- static uint16_t nextEventCoalescingKey = 0;
231
- self->_eventCoalescingKey = nextEventCoalescingKey++;
232
-
233
- } else if (state == RNGestureHandlerStateEnd && _lastState != RNGestureHandlerStateActive && !_manualActivation) {
234
- id event = [[RNGestureHandlerStateChange alloc] initWithReactTag:reactTag
235
- handlerTag:_tag
236
- state:RNGestureHandlerStateActive
237
- prevState:_lastState
238
- extraData:extraData];
239
- [self sendEvent:event];
240
- _lastState = RNGestureHandlerStateActive;
241
- }
242
- id stateEvent = [[RNGestureHandlerStateChange alloc] initWithReactTag:reactTag
243
- handlerTag:_tag
244
- state:state
245
- prevState:_lastState
246
- extraData:extraData];
247
- [self sendEvent:stateEvent];
248
- _lastState = state;
219
+ if (state != _lastState) {
220
+ // don't send change events from END to FAILED or CANCELLED, this may happen when gesture is ended in `onTouchesUp`
221
+ // callback
222
+ if (_lastState == RNGestureHandlerStateEnd &&
223
+ (state == RNGestureHandlerStateFailed || state == RNGestureHandlerStateCancelled)) {
224
+ return;
249
225
  }
250
226
 
251
227
  if (state == RNGestureHandlerStateActive) {
252
- id touchEvent = [[RNGestureHandlerEvent alloc] initWithReactTag:reactTag
253
- handlerTag:_tag
254
- state:state
255
- extraData:extraData
256
- coalescingKey:self->_eventCoalescingKey];
257
- [self sendEvent:touchEvent];
228
+ // Generate a unique coalescing-key each time the gesture-handler becomes active. All events will have
229
+ // the same coalescing-key allowing RCTEventDispatcher to coalesce RNGestureHandlerEvents when events are
230
+ // generated faster than they can be treated by JS thread
231
+ static uint16_t nextEventCoalescingKey = 0;
232
+ self->_eventCoalescingKey = nextEventCoalescingKey++;
233
+
234
+ } else if (state == RNGestureHandlerStateEnd && _lastState != RNGestureHandlerStateActive && !_manualActivation) {
235
+ id event = [[RNGestureHandlerStateChange alloc] initWithReactTag:reactTag
236
+ handlerTag:_tag
237
+ state:RNGestureHandlerStateActive
238
+ prevState:_lastState
239
+ extraData:extraData];
240
+ [self sendEvent:event];
241
+ _lastState = RNGestureHandlerStateActive;
258
242
  }
243
+ id stateEvent = [[RNGestureHandlerStateChange alloc] initWithReactTag:reactTag
244
+ handlerTag:_tag
245
+ state:state
246
+ prevState:_lastState
247
+ extraData:extraData];
248
+ [self sendEvent:stateEvent];
249
+ _lastState = state;
250
+ }
251
+
252
+ if (state == RNGestureHandlerStateActive) {
253
+ id touchEvent = [[RNGestureHandlerEvent alloc] initWithReactTag:reactTag
254
+ handlerTag:_tag
255
+ state:state
256
+ extraData:extraData
257
+ coalescingKey:self->_eventCoalescingKey];
258
+ [self sendEvent:touchEvent];
259
+ }
259
260
  }
260
261
 
261
262
  - (void)sendEvent:(RNGestureHandlerStateChange *)event
262
263
  {
263
- [self.emitter sendEvent:event withActionType:self.actionType];
264
+ [self.emitter sendEvent:event withActionType:self.actionType];
264
265
  }
265
266
 
266
- - (void)sendTouchEventInState:(RNGestureHandlerState)state
267
- forViewWithTag:(NSNumber *)reactTag
267
+ - (void)sendTouchEventInState:(RNGestureHandlerState)state forViewWithTag:(NSNumber *)reactTag
268
268
  {
269
269
  id extraData = [RNGestureHandlerEventExtraData forEventType:_pointerTracker.eventType
270
270
  withChangedPointers:_pointerTracker.changedPointersData
271
271
  withAllPointers:_pointerTracker.allPointersData
272
272
  withNumberOfTouches:_pointerTracker.trackedPointersCount];
273
- id event = [[RNGestureHandlerEvent alloc] initWithReactTag:reactTag handlerTag:_tag state:state extraData:extraData coalescingKey:[_tag intValue]];
274
-
273
+ id event = [[RNGestureHandlerEvent alloc] initWithReactTag:reactTag
274
+ handlerTag:_tag
275
+ state:state
276
+ extraData:extraData
277
+ coalescingKey:[_tag intValue]];
278
+
275
279
  [self.emitter sendEvent:event withActionType:self.actionType];
276
280
  }
277
281
 
278
282
  - (RNGestureHandlerState)recognizerState
279
283
  {
280
- switch (_recognizer.state) {
281
- case UIGestureRecognizerStateBegan:
282
- case UIGestureRecognizerStatePossible:
283
- return RNGestureHandlerStateBegan;
284
- case UIGestureRecognizerStateEnded:
285
- return RNGestureHandlerStateEnd;
286
- case UIGestureRecognizerStateFailed:
287
- return RNGestureHandlerStateFailed;
288
- case UIGestureRecognizerStateCancelled:
289
- return RNGestureHandlerStateCancelled;
290
- case UIGestureRecognizerStateChanged:
291
- return RNGestureHandlerStateActive;
292
- }
293
- return RNGestureHandlerStateUndetermined;
284
+ switch (_recognizer.state) {
285
+ case UIGestureRecognizerStateBegan:
286
+ case UIGestureRecognizerStatePossible:
287
+ return RNGestureHandlerStateBegan;
288
+ case UIGestureRecognizerStateEnded:
289
+ return RNGestureHandlerStateEnd;
290
+ case UIGestureRecognizerStateFailed:
291
+ return RNGestureHandlerStateFailed;
292
+ case UIGestureRecognizerStateCancelled:
293
+ return RNGestureHandlerStateCancelled;
294
+ case UIGestureRecognizerStateChanged:
295
+ return RNGestureHandlerStateActive;
296
+ }
297
+ return RNGestureHandlerStateUndetermined;
294
298
  }
295
299
 
296
300
  - (RNGestureHandlerState)state
297
301
  {
298
- // instead of mapping state of the recognizer directly, use value mapped when handleGesture was
299
- // called, making it correct while awaiting for another handler failure
300
- return _state;
302
+ // instead of mapping state of the recognizer directly, use value mapped when handleGesture was
303
+ // called, making it correct while awaiting for another handler failure
304
+ return _state;
301
305
  }
302
306
 
303
307
  #pragma mark Manual activation
@@ -312,7 +316,7 @@ static NSHashTable<RNGestureHandler *> *allGestureHandlers;
312
316
  - (void)setManualActivation:(BOOL)manualActivation
313
317
  {
314
318
  _manualActivation = manualActivation;
315
-
319
+
316
320
  if (manualActivation) {
317
321
  _manualActivationRecognizer = [[RNManualActivationRecognizer alloc] initWithGestureHandler:self];
318
322
 
@@ -343,135 +347,136 @@ static NSHashTable<RNGestureHandler *> *allGestureHandlers;
343
347
 
344
348
  + (RNGestureHandler *)findGestureHandlerByRecognizer:(UIGestureRecognizer *)recognizer
345
349
  {
346
- RNGestureHandler *handler = recognizer.gestureHandler;
347
- if (handler != nil) {
348
- return handler;
349
- }
350
+ RNGestureHandler *handler = recognizer.gestureHandler;
351
+ if (handler != nil) {
352
+ return handler;
353
+ }
350
354
 
351
- // We may try to extract "DummyGestureHandler" in case when "otherGestureRecognizer" belongs to
352
- // a native view being wrapped with "NativeViewGestureHandler"
353
- UIView *reactView = recognizer.view;
354
- while (reactView != nil && reactView.reactTag == nil) {
355
- reactView = reactView.superview;
356
- }
355
+ // We may try to extract "DummyGestureHandler" in case when "otherGestureRecognizer" belongs to
356
+ // a native view being wrapped with "NativeViewGestureHandler"
357
+ UIView *reactView = recognizer.view;
358
+ while (reactView != nil && reactView.reactTag == nil) {
359
+ reactView = reactView.superview;
360
+ }
357
361
 
358
- for (UIGestureRecognizer *recognizer in reactView.gestureRecognizers) {
359
- if ([recognizer isKindOfClass:[RNDummyGestureRecognizer class]]) {
360
- return recognizer.gestureHandler;
361
- }
362
+ for (UIGestureRecognizer *recognizer in reactView.gestureRecognizers) {
363
+ if ([recognizer isKindOfClass:[RNDummyGestureRecognizer class]]) {
364
+ return recognizer.gestureHandler;
362
365
  }
366
+ }
363
367
 
364
- return nil;
368
+ return nil;
365
369
  }
366
370
 
367
371
  - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer
368
- shouldBeRequiredToFailByGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
372
+ shouldBeRequiredToFailByGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
369
373
  {
370
- RNGestureHandler *handler = [RNGestureHandler findGestureHandlerByRecognizer:otherGestureRecognizer];
371
- if ([handler isKindOfClass:[RNNativeViewGestureHandler class]]) {
372
- for (NSNumber *handlerTag in handler->_handlersToWaitFor) {
373
- if ([_tag isEqual:handlerTag]) {
374
- return YES;
375
- }
376
- }
374
+ RNGestureHandler *handler = [RNGestureHandler findGestureHandlerByRecognizer:otherGestureRecognizer];
375
+ if ([handler isKindOfClass:[RNNativeViewGestureHandler class]]) {
376
+ for (NSNumber *handlerTag in handler->_handlersToWaitFor) {
377
+ if ([_tag isEqual:handlerTag]) {
378
+ return YES;
379
+ }
377
380
  }
381
+ }
378
382
 
379
- return NO;
383
+ return NO;
380
384
  }
381
385
 
382
386
  - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer
383
- shouldRequireFailureOfGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
387
+ shouldRequireFailureOfGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
384
388
  {
385
- if ([_handlersToWaitFor count]) {
386
- RNGestureHandler *handler = [RNGestureHandler findGestureHandlerByRecognizer:otherGestureRecognizer];
387
- if (handler != nil) {
388
- for (NSNumber *handlerTag in _handlersToWaitFor) {
389
- if ([handler.tag isEqual:handlerTag]) {
390
- return YES;
391
- }
392
- }
389
+ if ([_handlersToWaitFor count]) {
390
+ RNGestureHandler *handler = [RNGestureHandler findGestureHandlerByRecognizer:otherGestureRecognizer];
391
+ if (handler != nil) {
392
+ for (NSNumber *handlerTag in _handlersToWaitFor) {
393
+ if ([handler.tag isEqual:handlerTag]) {
394
+ return YES;
393
395
  }
396
+ }
394
397
  }
395
- return NO;
398
+ }
399
+ return NO;
396
400
  }
397
401
 
398
402
  - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer
399
- shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
403
+ shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
400
404
  {
401
- if (_recognizer.state == UIGestureRecognizerStateBegan && _recognizer.state == UIGestureRecognizerStatePossible) {
402
- return YES;
403
- }
404
-
405
- RNGestureHandler *handler = [RNGestureHandler findGestureHandlerByRecognizer:otherGestureRecognizer];
406
- if (handler != nil) {
407
- if ([_simultaneousHandlers count]) {
408
- for (NSNumber *handlerTag in _simultaneousHandlers) {
409
- if ([handler.tag isEqual:handlerTag]) {
410
- return YES;
411
- }
412
- }
413
- } else if (handler->_simultaneousHandlers) {
414
- for (NSNumber *handlerTag in handler->_simultaneousHandlers) {
415
- if ([self.tag isEqual:handlerTag]) {
416
- return YES;
417
- }
418
- }
405
+ if (_recognizer.state == UIGestureRecognizerStateBegan && _recognizer.state == UIGestureRecognizerStatePossible) {
406
+ return YES;
407
+ }
408
+
409
+ RNGestureHandler *handler = [RNGestureHandler findGestureHandlerByRecognizer:otherGestureRecognizer];
410
+ if (handler != nil) {
411
+ if ([_simultaneousHandlers count]) {
412
+ for (NSNumber *handlerTag in _simultaneousHandlers) {
413
+ if ([handler.tag isEqual:handlerTag]) {
414
+ return YES;
419
415
  }
416
+ }
417
+ } else if (handler->_simultaneousHandlers) {
418
+ for (NSNumber *handlerTag in handler->_simultaneousHandlers) {
419
+ if ([self.tag isEqual:handlerTag]) {
420
+ return YES;
421
+ }
422
+ }
420
423
  }
421
- return NO;
424
+ }
425
+ return NO;
422
426
  }
423
427
 
424
428
  - (void)reset
425
429
  {
426
- // do not reset states while gesture is tracking pointers, as gestureRecognizerShouldBegin
427
- // might be called after some pointers are down, and after state manipulation by the user.
428
- // Pointer tracker calls this method when it resets, and in that case it no longer tracks
429
- // any pointers, thus entering this if
430
- if (!_needsPointerData || _pointerTracker.trackedPointersCount == 0) {
431
- _lastState = RNGestureHandlerStateUndetermined;
432
- _state = RNGestureHandlerStateBegan;
433
- }
430
+ // do not reset states while gesture is tracking pointers, as gestureRecognizerShouldBegin
431
+ // might be called after some pointers are down, and after state manipulation by the user.
432
+ // Pointer tracker calls this method when it resets, and in that case it no longer tracks
433
+ // any pointers, thus entering this if
434
+ if (!_needsPointerData || _pointerTracker.trackedPointersCount == 0) {
435
+ _lastState = RNGestureHandlerStateUndetermined;
436
+ _state = RNGestureHandlerStateBegan;
437
+ }
434
438
  }
435
439
 
436
- - (BOOL)containsPointInView
437
- {
438
- CGPoint pt = [_recognizer locationInView:_recognizer.view];
439
- CGRect hitFrame = RNGHHitSlopInsetRect(_recognizer.view.bounds, _hitSlop);
440
- return CGRectContainsPoint(hitFrame, pt);
441
- }
440
+ - (BOOL)containsPointInView
441
+ {
442
+ CGPoint pt = [_recognizer locationInView:_recognizer.view];
443
+ CGRect hitFrame = RNGHHitSlopInsetRect(_recognizer.view.bounds, _hitSlop);
444
+ return CGRectContainsPoint(hitFrame, pt);
445
+ }
442
446
 
443
447
  - (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
444
448
  {
445
- if ([_handlersToWaitFor count]) {
446
- for (RNGestureHandler *handler in [allGestureHandlers allObjects]) {
447
- if (handler != nil
448
- && (handler.state == RNGestureHandlerStateActive || handler->_recognizer.state == UIGestureRecognizerStateBegan)) {
449
- for (NSNumber *handlerTag in _handlersToWaitFor) {
450
- if ([handler.tag isEqual:handlerTag]) {
451
- return NO;
452
- }
453
- }
454
- }
449
+ if ([_handlersToWaitFor count]) {
450
+ for (RNGestureHandler *handler in [allGestureHandlers allObjects]) {
451
+ if (handler != nil &&
452
+ (handler.state == RNGestureHandlerStateActive ||
453
+ handler->_recognizer.state == UIGestureRecognizerStateBegan)) {
454
+ for (NSNumber *handlerTag in _handlersToWaitFor) {
455
+ if ([handler.tag isEqual:handlerTag]) {
456
+ return NO;
457
+ }
455
458
  }
459
+ }
456
460
  }
461
+ }
457
462
 
458
- [self reset];
459
- return YES;
463
+ [self reset];
464
+ return YES;
460
465
  }
461
466
 
462
467
  - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
463
468
  {
464
- // If hitSlop is set we use it to determine if a given gesture recognizer should start processing
465
- // touch stream. This only works for negative values of hitSlop as this method won't be triggered
466
- // unless touch startes in the bounds of the attached view. To acheve similar effect with positive
467
- // values of hitSlop one should set hitSlop for the underlying view. This limitation is due to the
468
- // fact that hitTest method is only available at the level of UIView
469
- if (RNGH_HIT_SLOP_IS_SET(_hitSlop)) {
470
- CGPoint location = [touch locationInView:gestureRecognizer.view];
471
- CGRect hitFrame = RNGHHitSlopInsetRect(gestureRecognizer.view.bounds, _hitSlop);
472
- return CGRectContainsPoint(hitFrame, location);
473
- }
474
- return YES;
469
+ // If hitSlop is set we use it to determine if a given gesture recognizer should start processing
470
+ // touch stream. This only works for negative values of hitSlop as this method won't be triggered
471
+ // unless touch startes in the bounds of the attached view. To acheve similar effect with positive
472
+ // values of hitSlop one should set hitSlop for the underlying view. This limitation is due to the
473
+ // fact that hitTest method is only available at the level of UIView
474
+ if (RNGH_HIT_SLOP_IS_SET(_hitSlop)) {
475
+ CGPoint location = [touch locationInView:gestureRecognizer.view];
476
+ CGRect hitFrame = RNGHHitSlopInsetRect(gestureRecognizer.view.bounds, _hitSlop);
477
+ return CGRectContainsPoint(hitFrame, location);
478
+ }
479
+ return YES;
475
480
  }
476
481
 
477
482
  @end