react-native-gesture-handler 1.10.3 → 2.1.2

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 (382) hide show
  1. package/README.md +7 -6
  2. package/android/build.gradle +49 -1
  3. package/android/common/src/main/java/com/swmansion/common/GestureHandlerStateManager.kt +5 -0
  4. package/android/gradle.properties +19 -0
  5. package/android/lib/src/main/java/com/swmansion/gesturehandler/BaseGestureHandlerInteractionController.kt +18 -0
  6. package/android/lib/src/main/java/com/swmansion/gesturehandler/Extensions.kt +11 -0
  7. package/android/lib/src/main/java/com/swmansion/gesturehandler/FlingGestureHandler.kt +96 -0
  8. package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandler.kt +713 -0
  9. package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandlerInteractionController.kt +8 -0
  10. package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandlerOrchestrator.kt +562 -0
  11. package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandlerRegistry.kt +8 -0
  12. package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandlerRegistryImpl.kt +21 -0
  13. package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureUtils.kt +49 -0
  14. package/android/lib/src/main/java/com/swmansion/gesturehandler/LongPressGestureHandler.kt +97 -0
  15. package/android/lib/src/main/java/com/swmansion/gesturehandler/ManualGestureHandler.kt +11 -0
  16. package/android/lib/src/main/java/com/swmansion/gesturehandler/NativeViewGestureHandler.kt +129 -0
  17. package/android/lib/src/main/java/com/swmansion/gesturehandler/OnTouchEventListener.kt +9 -0
  18. package/android/lib/src/main/java/com/swmansion/gesturehandler/PanGestureHandler.kt +289 -0
  19. package/android/lib/src/main/java/com/swmansion/gesturehandler/PinchGestureHandler.kt +88 -0
  20. package/android/lib/src/main/java/com/swmansion/gesturehandler/{PointerEventsConfig.java → PointerEventsConfig.kt} +3 -5
  21. package/android/lib/src/main/java/com/swmansion/gesturehandler/RotationGestureDetector.kt +125 -0
  22. package/android/lib/src/main/java/com/swmansion/gesturehandler/RotationGestureHandler.kt +79 -0
  23. package/android/lib/src/main/java/com/swmansion/gesturehandler/TapGestureHandler.kt +167 -0
  24. package/android/lib/src/main/java/com/swmansion/gesturehandler/ViewConfigurationHelper.kt +10 -0
  25. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerButtonViewManager.kt +348 -0
  26. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEnabledRootView.kt +57 -0
  27. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEvent.kt +59 -0
  28. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEventDataExtractor.kt +8 -0
  29. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerInteractionManager.kt +61 -0
  30. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerModule.kt +686 -0
  31. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerPackage.kt +17 -0
  32. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRegistry.kt +95 -0
  33. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootHelper.kt +132 -0
  34. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootInterface.kt +5 -0
  35. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootView.kt +68 -0
  36. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootViewManager.kt +34 -0
  37. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerStateChangeEvent.kt +66 -0
  38. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerTouchEvent.kt +69 -0
  39. package/android/src/main/java/com/swmansion/gesturehandler/react/RNViewConfigurationHelper.kt +51 -0
  40. package/ios/Handlers/RNFlingHandler.m +78 -5
  41. package/ios/Handlers/RNForceTouchHandler.m +29 -4
  42. package/ios/Handlers/RNLongPressHandler.m +105 -3
  43. package/ios/Handlers/RNManualHandler.h +4 -0
  44. package/ios/Handlers/RNManualHandler.m +73 -0
  45. package/ios/Handlers/RNNativeViewHandler.m +30 -2
  46. package/ios/Handlers/RNPanHandler.m +64 -4
  47. package/ios/Handlers/RNPinchHandler.m +61 -2
  48. package/ios/Handlers/RNRotationHandler.m +60 -1
  49. package/ios/Handlers/RNTapHandler.m +55 -8
  50. package/ios/RNGestureHandler.h +18 -4
  51. package/ios/RNGestureHandler.m +123 -13
  52. package/ios/RNGestureHandlerEvents.h +9 -0
  53. package/ios/RNGestureHandlerEvents.m +34 -0
  54. package/ios/RNGestureHandlerManager.h +7 -0
  55. package/ios/RNGestureHandlerManager.m +62 -34
  56. package/ios/RNGestureHandlerModule.m +39 -3
  57. package/ios/RNGestureHandlerPointerTracker.h +25 -0
  58. package/ios/RNGestureHandlerPointerTracker.m +237 -0
  59. package/ios/RNGestureHandlerRegistry.h +1 -0
  60. package/ios/RNGestureHandlerRegistry.m +10 -0
  61. package/ios/RNGestureHandlerStateManager.h +5 -0
  62. package/ios/RNManualActivationRecognizer.h +10 -0
  63. package/ios/RNManualActivationRecognizer.m +80 -0
  64. package/ios/RNRootViewGestureRecognizer.m +1 -1
  65. package/ios/RNTouchEventType.h +9 -0
  66. package/lib/commonjs/EventType.js +16 -0
  67. package/lib/commonjs/EventType.js.map +1 -0
  68. package/lib/commonjs/GestureHandlerRootView.android.js +1 -13
  69. package/lib/commonjs/GestureHandlerRootView.android.js.map +1 -1
  70. package/lib/commonjs/GestureHandlerRootView.js +11 -3
  71. package/lib/commonjs/GestureHandlerRootView.js.map +1 -1
  72. package/lib/commonjs/RNGestureHandlerModule.js +3 -1
  73. package/lib/commonjs/RNGestureHandlerModule.js.map +1 -1
  74. package/lib/commonjs/RNGestureHandlerModule.web.js +2 -2
  75. package/lib/commonjs/RNGestureHandlerModule.web.js.map +1 -1
  76. package/lib/commonjs/components/DrawerLayout.js +41 -37
  77. package/lib/commonjs/components/DrawerLayout.js.map +1 -1
  78. package/lib/commonjs/components/GestureButtons.js.map +1 -1
  79. package/lib/commonjs/components/GestureComponents.js +31 -12
  80. package/lib/commonjs/components/GestureComponents.js.map +1 -1
  81. package/lib/commonjs/components/Swipeable.js +10 -6
  82. package/lib/commonjs/components/Swipeable.js.map +1 -1
  83. package/lib/commonjs/components/touchables/GenericTouchable.js +2 -1
  84. package/lib/commonjs/components/touchables/GenericTouchable.js.map +1 -1
  85. package/lib/commonjs/components/touchables/TouchableOpacity.js +1 -1
  86. package/lib/commonjs/components/touchables/TouchableOpacity.js.map +1 -1
  87. package/lib/commonjs/gestureHandlerRootHOC.js +1 -1
  88. package/lib/commonjs/gestureHandlerRootHOC.js.map +1 -1
  89. package/lib/commonjs/handlers/FlingGestureHandler.js +23 -0
  90. package/lib/commonjs/handlers/FlingGestureHandler.js.map +1 -0
  91. package/lib/commonjs/handlers/ForceTouchGestureHandler.js +44 -0
  92. package/lib/commonjs/handlers/ForceTouchGestureHandler.js.map +1 -0
  93. package/lib/commonjs/handlers/LongPressGestureHandler.js +23 -0
  94. package/lib/commonjs/handlers/LongPressGestureHandler.js.map +1 -0
  95. package/lib/commonjs/handlers/NativeViewGestureHandler.js +6 -4
  96. package/lib/commonjs/handlers/NativeViewGestureHandler.js.map +1 -1
  97. package/lib/commonjs/handlers/PanGestureHandler.js +121 -0
  98. package/lib/commonjs/handlers/PanGestureHandler.js.map +1 -0
  99. package/lib/commonjs/handlers/PinchGestureHandler.js +21 -0
  100. package/lib/commonjs/handlers/PinchGestureHandler.js.map +1 -0
  101. package/lib/commonjs/handlers/RotationGestureHandler.js +21 -0
  102. package/lib/commonjs/handlers/RotationGestureHandler.js.map +1 -0
  103. package/lib/commonjs/handlers/TapGestureHandler.js +23 -0
  104. package/lib/commonjs/handlers/TapGestureHandler.js.map +1 -0
  105. package/lib/commonjs/handlers/createHandler.js +52 -83
  106. package/lib/commonjs/handlers/createHandler.js.map +1 -1
  107. package/lib/commonjs/handlers/gestureHandlerCommon.js +80 -0
  108. package/lib/commonjs/handlers/gestureHandlerCommon.js.map +1 -0
  109. package/lib/commonjs/handlers/gestures/GestureDetector.js +440 -0
  110. package/lib/commonjs/handlers/gestures/GestureDetector.js.map +1 -0
  111. package/lib/commonjs/handlers/gestures/eventReceiver.js +135 -0
  112. package/lib/commonjs/handlers/gestures/eventReceiver.js.map +1 -0
  113. package/lib/commonjs/handlers/gestures/flingGesture.js +34 -0
  114. package/lib/commonjs/handlers/gestures/flingGesture.js.map +1 -0
  115. package/lib/commonjs/handlers/gestures/forceTouchGesture.js +65 -0
  116. package/lib/commonjs/handlers/gestures/forceTouchGesture.js.map +1 -0
  117. package/lib/commonjs/handlers/gestures/gesture.js +193 -0
  118. package/lib/commonjs/handlers/gestures/gesture.js.map +1 -0
  119. package/lib/commonjs/handlers/gestures/gestureComposition.js +94 -0
  120. package/lib/commonjs/handlers/gestures/gestureComposition.js.map +1 -0
  121. package/lib/commonjs/handlers/gestures/gestureObjects.js +85 -0
  122. package/lib/commonjs/handlers/gestures/gestureObjects.js.map +1 -0
  123. package/lib/commonjs/handlers/gestures/gestureStateManager.js +58 -0
  124. package/lib/commonjs/handlers/gestures/gestureStateManager.js.map +1 -0
  125. package/lib/commonjs/handlers/gestures/longPressGesture.js +34 -0
  126. package/lib/commonjs/handlers/gestures/longPressGesture.js.map +1 -0
  127. package/lib/commonjs/handlers/gestures/manualGesture.js +31 -0
  128. package/lib/commonjs/handlers/gestures/manualGesture.js.map +1 -0
  129. package/lib/commonjs/handlers/gestures/nativeGesture.js +34 -0
  130. package/lib/commonjs/handlers/gestures/nativeGesture.js.map +1 -0
  131. package/lib/commonjs/handlers/gestures/panGesture.js +144 -0
  132. package/lib/commonjs/handlers/gestures/panGesture.js.map +1 -0
  133. package/lib/commonjs/handlers/gestures/pinchGesture.js +45 -0
  134. package/lib/commonjs/handlers/gestures/pinchGesture.js.map +1 -0
  135. package/lib/commonjs/handlers/gestures/reanimatedWrapper.js +24 -0
  136. package/lib/commonjs/handlers/gestures/reanimatedWrapper.js.map +1 -0
  137. package/lib/commonjs/handlers/gestures/rotationGesture.js +45 -0
  138. package/lib/commonjs/handlers/gestures/rotationGesture.js.map +1 -0
  139. package/lib/commonjs/handlers/gestures/tapGesture.js +59 -0
  140. package/lib/commonjs/handlers/gestures/tapGesture.js.map +1 -0
  141. package/lib/commonjs/handlers/handlersRegistry.js +31 -0
  142. package/lib/commonjs/handlers/handlersRegistry.js.map +1 -0
  143. package/lib/commonjs/index.js +146 -8
  144. package/lib/commonjs/index.js.map +1 -1
  145. package/lib/commonjs/init.js +13 -0
  146. package/lib/commonjs/init.js.map +1 -0
  147. package/lib/commonjs/mocks.js +31 -2
  148. package/lib/commonjs/mocks.js.map +1 -1
  149. package/lib/commonjs/utils.js +15 -0
  150. package/lib/commonjs/utils.js.map +1 -0
  151. package/lib/commonjs/web/Errors.js +1 -1
  152. package/lib/commonjs/web/Errors.js.map +1 -1
  153. package/lib/commonjs/web/GestureHandler.js +4 -6
  154. package/lib/commonjs/web/GestureHandler.js.map +1 -1
  155. package/lib/commonjs/web/NodeManager.js +8 -2
  156. package/lib/commonjs/web/NodeManager.js.map +1 -1
  157. package/lib/module/EventType.js +8 -0
  158. package/lib/module/EventType.js.map +1 -0
  159. package/lib/module/GestureHandlerRootView.android.js +2 -14
  160. package/lib/module/GestureHandlerRootView.android.js.map +1 -1
  161. package/lib/module/GestureHandlerRootView.js +5 -1
  162. package/lib/module/GestureHandlerRootView.js.map +1 -1
  163. package/lib/module/RNGestureHandlerModule.js +3 -1
  164. package/lib/module/RNGestureHandlerModule.js.map +1 -1
  165. package/lib/module/RNGestureHandlerModule.web.js +2 -2
  166. package/lib/module/RNGestureHandlerModule.web.js.map +1 -1
  167. package/lib/module/components/DrawerLayout.js +43 -40
  168. package/lib/module/components/DrawerLayout.js.map +1 -1
  169. package/lib/module/components/GestureButtons.js.map +1 -1
  170. package/lib/module/components/GestureComponents.js +29 -11
  171. package/lib/module/components/GestureComponents.js.map +1 -1
  172. package/lib/module/components/Swipeable.js +9 -6
  173. package/lib/module/components/Swipeable.js.map +1 -1
  174. package/lib/module/components/touchables/GenericTouchable.js +2 -1
  175. package/lib/module/components/touchables/GenericTouchable.js.map +1 -1
  176. package/lib/module/components/touchables/TouchableOpacity.js +1 -1
  177. package/lib/module/components/touchables/TouchableOpacity.js.map +1 -1
  178. package/lib/module/gestureHandlerRootHOC.js +1 -1
  179. package/lib/module/gestureHandlerRootHOC.js.map +1 -1
  180. package/lib/module/handlers/FlingGestureHandler.js +10 -0
  181. package/lib/module/handlers/FlingGestureHandler.js.map +1 -0
  182. package/lib/module/handlers/ForceTouchGestureHandler.js +29 -0
  183. package/lib/module/handlers/ForceTouchGestureHandler.js.map +1 -0
  184. package/lib/module/handlers/LongPressGestureHandler.js +10 -0
  185. package/lib/module/handlers/LongPressGestureHandler.js.map +1 -0
  186. package/lib/module/handlers/NativeViewGestureHandler.js +4 -3
  187. package/lib/module/handlers/NativeViewGestureHandler.js.map +1 -1
  188. package/lib/module/handlers/PanGestureHandler.js +106 -0
  189. package/lib/module/handlers/PanGestureHandler.js.map +1 -0
  190. package/lib/module/handlers/PinchGestureHandler.js +9 -0
  191. package/lib/module/handlers/PinchGestureHandler.js.map +1 -0
  192. package/lib/module/handlers/RotationGestureHandler.js +9 -0
  193. package/lib/module/handlers/RotationGestureHandler.js.map +1 -0
  194. package/lib/module/handlers/TapGestureHandler.js +10 -0
  195. package/lib/module/handlers/TapGestureHandler.js.map +1 -0
  196. package/lib/module/handlers/createHandler.js +41 -76
  197. package/lib/module/handlers/createHandler.js.map +1 -1
  198. package/lib/module/handlers/gestureHandlerCommon.js +66 -0
  199. package/lib/module/handlers/gestureHandlerCommon.js.map +1 -0
  200. package/lib/module/handlers/gestures/GestureDetector.js +402 -0
  201. package/lib/module/handlers/gestures/GestureDetector.js.map +1 -0
  202. package/lib/module/handlers/gestures/eventReceiver.js +120 -0
  203. package/lib/module/handlers/gestures/eventReceiver.js.map +1 -0
  204. package/lib/module/handlers/gestures/flingGesture.js +24 -0
  205. package/lib/module/handlers/gestures/flingGesture.js.map +1 -0
  206. package/lib/module/handlers/gestures/forceTouchGesture.js +56 -0
  207. package/lib/module/handlers/gestures/forceTouchGesture.js.map +1 -0
  208. package/lib/module/handlers/gestures/gesture.js +175 -0
  209. package/lib/module/handlers/gestures/gesture.js.map +1 -0
  210. package/lib/module/handlers/gestures/gestureComposition.js +79 -0
  211. package/lib/module/handlers/gestures/gestureComposition.js.map +1 -0
  212. package/lib/module/handlers/gestures/gestureObjects.js +67 -0
  213. package/lib/module/handlers/gestures/gestureObjects.js.map +1 -0
  214. package/lib/module/handlers/gestures/gestureStateManager.js +48 -0
  215. package/lib/module/handlers/gestures/gestureStateManager.js.map +1 -0
  216. package/lib/module/handlers/gestures/longPressGesture.js +24 -0
  217. package/lib/module/handlers/gestures/longPressGesture.js.map +1 -0
  218. package/lib/module/handlers/gestures/manualGesture.js +22 -0
  219. package/lib/module/handlers/gestures/manualGesture.js.map +1 -0
  220. package/lib/module/handlers/gestures/nativeGesture.js +24 -0
  221. package/lib/module/handlers/gestures/nativeGesture.js.map +1 -0
  222. package/lib/module/handlers/gestures/panGesture.js +135 -0
  223. package/lib/module/handlers/gestures/panGesture.js.map +1 -0
  224. package/lib/module/handlers/gestures/pinchGesture.js +36 -0
  225. package/lib/module/handlers/gestures/pinchGesture.js.map +1 -0
  226. package/lib/module/handlers/gestures/reanimatedWrapper.js +19 -0
  227. package/lib/module/handlers/gestures/reanimatedWrapper.js.map +1 -0
  228. package/lib/module/handlers/gestures/rotationGesture.js +36 -0
  229. package/lib/module/handlers/gestures/rotationGesture.js.map +1 -0
  230. package/lib/module/handlers/gestures/tapGesture.js +49 -0
  231. package/lib/module/handlers/gestures/tapGesture.js.map +1 -0
  232. package/lib/module/handlers/handlersRegistry.js +16 -0
  233. package/lib/module/handlers/handlersRegistry.js.map +1 -0
  234. package/lib/module/index.js +22 -1
  235. package/lib/module/index.js.map +1 -1
  236. package/lib/module/init.js +5 -0
  237. package/lib/module/init.js.map +1 -0
  238. package/lib/module/mocks.js +31 -2
  239. package/lib/module/mocks.js.map +1 -1
  240. package/lib/module/utils.js +8 -0
  241. package/lib/module/utils.js.map +1 -0
  242. package/lib/module/web/Errors.js +1 -1
  243. package/lib/module/web/Errors.js.map +1 -1
  244. package/lib/module/web/GestureHandler.js +4 -6
  245. package/lib/module/web/GestureHandler.js.map +1 -1
  246. package/lib/module/web/NodeManager.js +8 -2
  247. package/lib/module/web/NodeManager.js.map +1 -1
  248. package/lib/typescript/EventType.d.ts +8 -0
  249. package/lib/typescript/GestureHandlerRootView.android.d.ts +2 -4
  250. package/lib/typescript/GestureHandlerRootView.d.ts +5 -2
  251. package/lib/typescript/RNGestureHandlerModule.d.ts +1 -1
  252. package/lib/typescript/RNGestureHandlerModule.web.d.ts +1 -1
  253. package/lib/typescript/components/DrawerLayout.d.ts +50 -1
  254. package/lib/typescript/components/GestureButtons.d.ts +36 -0
  255. package/lib/typescript/components/GestureComponents.d.ts +8 -35
  256. package/lib/typescript/components/Swipeable.d.ts +73 -6
  257. package/lib/typescript/components/touchables/GenericTouchable.d.ts +2 -2
  258. package/lib/typescript/components/touchables/TouchableHighlight.d.ts +1 -0
  259. package/lib/typescript/components/touchables/TouchableOpacity.d.ts +1 -0
  260. package/lib/typescript/handlers/FlingGestureHandler.d.ts +33 -0
  261. package/lib/typescript/handlers/ForceTouchGestureHandler.d.ts +43 -0
  262. package/lib/typescript/handlers/LongPressGestureHandler.d.ts +55 -0
  263. package/lib/typescript/handlers/NativeViewGestureHandler.d.ts +19 -4
  264. package/lib/typescript/handlers/PanGestureHandler.d.ts +137 -0
  265. package/lib/typescript/handlers/PinchGestureHandler.d.ts +28 -0
  266. package/lib/typescript/handlers/RotationGestureHandler.d.ts +28 -0
  267. package/lib/typescript/handlers/TapGestureHandler.d.ts +56 -0
  268. package/lib/typescript/handlers/createHandler.d.ts +1 -1
  269. package/lib/typescript/handlers/gestureHandlerCommon.d.ts +62 -0
  270. package/lib/typescript/handlers/gestureHandlerTypesCompat.d.ts +8 -1
  271. package/lib/typescript/handlers/gestures/GestureDetector.d.ts +16 -0
  272. package/lib/typescript/handlers/gestures/eventReceiver.d.ts +2 -0
  273. package/lib/typescript/handlers/gestures/flingGesture.d.ts +9 -0
  274. package/lib/typescript/handlers/gestures/forceTouchGesture.d.ts +16 -0
  275. package/lib/typescript/handlers/gestures/gesture.d.ts +97 -0
  276. package/lib/typescript/handlers/gestures/gestureComposition.d.ts +21 -0
  277. package/lib/typescript/handlers/gestures/gestureObjects.d.ts +39 -0
  278. package/lib/typescript/handlers/gestures/gestureStateManager.d.ts +9 -0
  279. package/lib/typescript/handlers/gestures/longPressGesture.d.ts +9 -0
  280. package/lib/typescript/handlers/gestures/manualGesture.d.ts +7 -0
  281. package/lib/typescript/handlers/gestures/nativeGesture.d.ts +9 -0
  282. package/lib/typescript/handlers/gestures/panGesture.d.ts +26 -0
  283. package/lib/typescript/handlers/gestures/pinchGesture.d.ts +12 -0
  284. package/lib/typescript/handlers/gestures/reanimatedWrapper.d.ts +14 -0
  285. package/lib/typescript/handlers/gestures/rotationGesture.d.ts +12 -0
  286. package/lib/typescript/handlers/gestures/tapGesture.d.ts +14 -0
  287. package/lib/typescript/handlers/handlersRegistry.d.ts +6 -0
  288. package/lib/typescript/index.d.ts +29 -2
  289. package/lib/typescript/init.d.ts +1 -0
  290. package/lib/typescript/mocks.d.ts +21 -2
  291. package/lib/typescript/utils.d.ts +1 -0
  292. package/lib/typescript/web/FlingGestureHandler.d.ts +0 -1
  293. package/lib/typescript/web/GestureHandler.d.ts +0 -1
  294. package/lib/typescript/web/PanGestureHandler.d.ts +0 -1
  295. package/lib/typescript/web/PinchGestureHandler.d.ts +0 -1
  296. package/lib/typescript/web/PressGestureHandler.d.ts +0 -1
  297. package/lib/typescript/web/RotationGestureHandler.d.ts +0 -1
  298. package/lib/typescript/web/TapGestureHandler.d.ts +0 -1
  299. package/package.json +8 -5
  300. package/src/EventType.ts +10 -0
  301. package/src/GestureHandlerRootView.android.tsx +9 -25
  302. package/src/GestureHandlerRootView.tsx +11 -2
  303. package/src/RNGestureHandlerModule.ts +5 -1
  304. package/src/RNGestureHandlerModule.web.ts +1 -0
  305. package/src/components/DrawerLayout.tsx +114 -41
  306. package/src/components/GestureButtons.tsx +45 -5
  307. package/src/components/GestureComponents.tsx +47 -41
  308. package/src/components/Swipeable.tsx +108 -21
  309. package/src/components/touchables/GenericTouchable.tsx +2 -1
  310. package/src/components/touchables/TouchableOpacity.tsx +1 -1
  311. package/src/handlers/FlingGestureHandler.ts +57 -0
  312. package/src/handlers/ForceTouchGestureHandler.ts +83 -0
  313. package/src/handlers/LongPressGestureHandler.ts +84 -0
  314. package/src/handlers/NativeViewGestureHandler.ts +31 -7
  315. package/src/handlers/PanGestureHandler.ts +321 -0
  316. package/src/handlers/PinchGestureHandler.ts +46 -0
  317. package/src/handlers/RotationGestureHandler.ts +46 -0
  318. package/src/handlers/TapGestureHandler.ts +90 -0
  319. package/src/handlers/createHandler.ts +54 -79
  320. package/src/handlers/gestureHandlerCommon.ts +185 -0
  321. package/src/handlers/gestureHandlerTypesCompat.ts +19 -5
  322. package/src/handlers/gestures/GestureDetector.tsx +519 -0
  323. package/src/handlers/gestures/eventReceiver.ts +151 -0
  324. package/src/handlers/gestures/flingGesture.ts +27 -0
  325. package/src/handlers/gestures/forceTouchGesture.ts +74 -0
  326. package/src/handlers/gestures/gesture.ts +292 -0
  327. package/src/handlers/gestures/gestureComposition.ts +109 -0
  328. package/src/handlers/gestures/gestureObjects.ts +79 -0
  329. package/src/handlers/gestures/gestureStateManager.ts +60 -0
  330. package/src/handlers/gestures/longPressGesture.ts +27 -0
  331. package/src/handlers/gestures/manualGesture.ts +31 -0
  332. package/src/handlers/gestures/nativeGesture.ts +27 -0
  333. package/src/handlers/gestures/panGesture.ts +147 -0
  334. package/src/handlers/gestures/pinchGesture.ts +51 -0
  335. package/src/handlers/gestures/reanimatedWrapper.ts +45 -0
  336. package/src/handlers/gestures/rotationGesture.ts +51 -0
  337. package/src/handlers/gestures/tapGesture.ts +52 -0
  338. package/src/handlers/handlersRegistry.ts +22 -0
  339. package/src/index.ts +57 -17
  340. package/src/init.ts +5 -0
  341. package/src/mocks.ts +42 -2
  342. package/src/utils.ts +7 -0
  343. package/src/web/GestureHandler.ts +1 -2
  344. package/src/web/NodeManager.ts +5 -0
  345. package/android/lib/src/main/java/com/swmansion/gesturehandler/BaseGestureHandlerInteractionController.java +0 -23
  346. package/android/lib/src/main/java/com/swmansion/gesturehandler/FlingGestureHandler.java +0 -110
  347. package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandler.java +0 -531
  348. package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandlerInteractionController.java +0 -8
  349. package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandlerOrchestrator.java +0 -543
  350. package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandlerRegistry.java +0 -10
  351. package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureHandlerRegistryImpl.java +0 -29
  352. package/android/lib/src/main/java/com/swmansion/gesturehandler/GestureUtils.java +0 -53
  353. package/android/lib/src/main/java/com/swmansion/gesturehandler/LongPressGestureHandler.java +0 -81
  354. package/android/lib/src/main/java/com/swmansion/gesturehandler/NativeViewGestureHandler.java +0 -110
  355. package/android/lib/src/main/java/com/swmansion/gesturehandler/OnTouchEventListener.java +0 -8
  356. package/android/lib/src/main/java/com/swmansion/gesturehandler/PanGestureHandler.java +0 -312
  357. package/android/lib/src/main/java/com/swmansion/gesturehandler/PinchGestureHandler.java +0 -109
  358. package/android/lib/src/main/java/com/swmansion/gesturehandler/RotationGestureDetector.java +0 -169
  359. package/android/lib/src/main/java/com/swmansion/gesturehandler/RotationGestureHandler.java +0 -96
  360. package/android/lib/src/main/java/com/swmansion/gesturehandler/TapGestureHandler.java +0 -172
  361. package/android/lib/src/main/java/com/swmansion/gesturehandler/ViewConfigurationHelper.java +0 -10
  362. package/android/src/main/java/com/facebook/react/views/modal/RNGHModalUtils.java +0 -21
  363. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerButtonViewManager.java +0 -296
  364. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEnabledRootView.java +0 -72
  365. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEvent.java +0 -77
  366. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEventDataExtractor.java +0 -8
  367. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerInteractionManager.java +0 -86
  368. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerModule.java +0 -731
  369. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerPackage.java +0 -31
  370. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRegistry.java +0 -101
  371. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootHelper.java +0 -151
  372. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootInterface.java +0 -7
  373. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootView.java +0 -76
  374. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootViewManager.java +0 -49
  375. package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerStateChangeEvent.java +0 -82
  376. package/android/src/main/java/com/swmansion/gesturehandler/react/RNViewConfigurationHelper.java +0 -61
  377. package/lib/commonjs/handlers/gestureHandlers.js +0 -236
  378. package/lib/commonjs/handlers/gestureHandlers.js.map +0 -1
  379. package/lib/module/handlers/gestureHandlers.js +0 -216
  380. package/lib/module/handlers/gestureHandlers.js.map +0 -1
  381. package/lib/typescript/handlers/gestureHandlers.d.ts +0 -158
  382. package/src/handlers/gestureHandlers.ts +0 -511
@@ -38,15 +38,20 @@
38
38
  NSInteger _maxNumberOfTouches;
39
39
  }
40
40
 
41
+ static const NSUInteger defaultNumberOfTaps = 1;
42
+ static const NSInteger defaultMinPointers = 1;
43
+ static const CGFloat defaultMaxDelay = 0.2;
44
+ static const NSTimeInterval defaultMaxDuration = 0.5;
45
+
41
46
  - (id)initWithGestureHandler:(RNGestureHandler*)gestureHandler
42
47
  {
43
48
  if ((self = [super initWithTarget:gestureHandler action:@selector(handleGesture:)])) {
44
49
  _gestureHandler = gestureHandler;
45
50
  _tapsSoFar = 0;
46
- _numberOfTaps = 1;
47
- _minPointers = 1;
48
- _maxDelay = 0.2;
49
- _maxDuration = NAN;
51
+ _numberOfTaps = defaultNumberOfTaps;
52
+ _minPointers = defaultMinPointers;
53
+ _maxDelay = defaultMaxDelay;
54
+ _maxDuration = defaultMaxDuration;
50
55
  _maxDeltaX = NAN;
51
56
  _maxDeltaY = NAN;
52
57
  _maxDistSq = NAN;
@@ -67,8 +72,14 @@
67
72
  - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
68
73
  {
69
74
  [super touchesBegan:touches withEvent:event];
75
+ [_gestureHandler.pointerTracker touchesBegan:touches withEvent:event];
76
+
70
77
  if (_tapsSoFar == 0) {
71
- _initPosition = [self locationInView:self.view];
78
+ // this recognizer sends UNDETERMINED -> BEGAN state change event before gestureRecognizerShouldBegin
79
+ // is called (it resets the gesture handler), making it send whatever the last known state as oldState
80
+ // in the event. If we reset it here it correctly sends UNDETERMINED as oldState.
81
+ [_gestureHandler reset];
82
+ _initPosition = [self locationInView:self.view.window];
72
83
  }
73
84
  _tapsSoFar++;
74
85
  if (_tapsSoFar) {
@@ -88,6 +99,8 @@
88
99
  - (void)touchesMoved:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
89
100
  {
90
101
  [super touchesMoved:touches withEvent:event];
102
+ [_gestureHandler.pointerTracker touchesMoved:touches withEvent:event];
103
+
91
104
  NSInteger numberOfTouches = [touches count];
92
105
  if (numberOfTouches > _maxNumberOfTouches) {
93
106
  _maxNumberOfTouches = numberOfTouches;
@@ -109,7 +122,7 @@
109
122
  }
110
123
 
111
124
  - (CGPoint)translationInView {
112
- CGPoint currentPosition = [self locationInView:self.view];
125
+ CGPoint currentPosition = [self locationInView:self.view.window];
113
126
  return CGPointMake(currentPosition.x - _initPosition.x, currentPosition.y - _initPosition.y);
114
127
  }
115
128
 
@@ -128,7 +141,7 @@
128
141
  if (TEST_MAX_IF_NOT_NAN(fabs(trans.y), _maxDeltaY)) {
129
142
  return YES;
130
143
  }
131
- if (TEST_MAX_IF_NOT_NAN(fabs(trans.y * trans.y + trans.x + trans.x), _maxDistSq)) {
144
+ if (TEST_MAX_IF_NOT_NAN(fabs(trans.y * trans.y + trans.x * trans.x), _maxDistSq)) {
132
145
  return YES;
133
146
  }
134
147
  return NO;
@@ -137,6 +150,8 @@
137
150
  - (void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
138
151
  {
139
152
  [super touchesEnded:touches withEvent:event];
153
+ [_gestureHandler.pointerTracker touchesEnded:touches withEvent:event];
154
+
140
155
  if (_numberOfTaps == _tapsSoFar && _maxNumberOfTouches >= _minPointers) {
141
156
  self.state = UIGestureRecognizerStateEnded;
142
157
  [self reset];
@@ -148,6 +163,8 @@
148
163
  - (void)touchesCancelled:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
149
164
  {
150
165
  [super touchesCancelled:touches withEvent:event];
166
+ [_gestureHandler.pointerTracker touchesCancelled:touches withEvent:event];
167
+
151
168
  self.state = UIGestureRecognizerStateCancelled;
152
169
  [self reset];
153
170
  }
@@ -157,6 +174,8 @@
157
174
  if (self.state == UIGestureRecognizerStateFailed) {
158
175
  [self triggerAction];
159
176
  }
177
+ [_gestureHandler.pointerTracker reset];
178
+
160
179
  [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(cancel) object:nil];
161
180
  _tapsSoFar = 0;
162
181
  _maxNumberOfTouches = 0;
@@ -178,6 +197,20 @@
178
197
  return self;
179
198
  }
180
199
 
200
+ - (void)resetConfig
201
+ {
202
+ [super resetConfig];
203
+ RNBetterTapGestureRecognizer *recognizer = (RNBetterTapGestureRecognizer *)_recognizer;
204
+
205
+ recognizer.numberOfTaps = defaultNumberOfTaps;
206
+ recognizer.minPointers = defaultMinPointers;
207
+ recognizer.maxDeltaX = NAN;
208
+ recognizer.maxDeltaY = NAN;
209
+ recognizer.maxDelay = defaultMaxDelay;
210
+ recognizer.maxDuration = defaultMaxDuration;
211
+ recognizer.maxDistSq = NAN;
212
+ }
213
+
181
214
  - (void)configure:(NSDictionary *)config
182
215
  {
183
216
  [super configure:config];
@@ -205,7 +238,8 @@
205
238
  }
206
239
  }
207
240
 
208
- - (RNGestureHandlerEventExtraData *)eventExtraData:(UIGestureRecognizer *)recognizer{
241
+ - (RNGestureHandlerEventExtraData *)eventExtraData:(UIGestureRecognizer *)recognizer
242
+ {
209
243
  if (recognizer.state == UIGestureRecognizerStateEnded) {
210
244
  return _lastData;
211
245
  }
@@ -214,5 +248,18 @@
214
248
  return _lastData;
215
249
  }
216
250
 
251
+ - (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
252
+ {
253
+ // UNDETERMINED -> BEGAN state change event is sent before this method is called,
254
+ // in RNGestureHandler it resets _lastSatate variable, making is seem like handler
255
+ // went from UNDETERMINED to BEGAN and then from UNDETERMINED to ACTIVE.
256
+ // This way we preserve _lastState between events and keep correct state flow.
257
+ RNGestureHandlerState savedState = _lastState;
258
+ BOOL shouldBegin = [super gestureRecognizerShouldBegin:gestureRecognizer];
259
+ _lastState = savedState;
260
+
261
+ return shouldBegin;
262
+ }
263
+
217
264
  @end
218
265
 
@@ -1,6 +1,7 @@
1
1
  #import "RNGestureHandlerState.h"
2
2
  #import "RNGestureHandlerDirection.h"
3
3
  #import "RNGestureHandlerEvents.h"
4
+ #import "RNGestureHandlerPointerTracker.h"
4
5
 
5
6
  #import <Foundation/Foundation.h>
6
7
  #import <UIKit/UIKit.h>
@@ -15,7 +16,7 @@
15
16
 
16
17
  #define APPLY_PROP(recognizer, config, type, prop, propName) do { \
17
18
  id value = config[propName]; \
18
- if (value != nil) recognizer.prop = [RCTConvert type:value]; \
19
+ if (value != nil) { recognizer.prop = [RCTConvert type:value]; }\
19
20
  } while(0)
20
21
 
21
22
  #define APPLY_FLOAT_PROP(prop) do { APPLY_PROP(recognizer, config, CGFloat, prop, @#prop); } while(0)
@@ -28,13 +29,17 @@ if (value != nil) recognizer.prop = [RCTConvert type:value]; \
28
29
 
29
30
  - (void)sendStateChangeEvent:(nonnull RNGestureHandlerStateChange *)event;
30
31
 
32
+ - (void)sendTouchDeviceEvent:(nonnull RNGestureHandlerEvent *)event;
33
+
34
+ - (void)sendStateChangeDeviceEvent:(nonnull RNGestureHandlerStateChange *)event;
35
+
31
36
  @end
32
37
 
33
38
 
34
39
  @protocol RNRootViewGestureRecognizerDelegate <UIGestureRecognizerDelegate>
35
40
 
36
41
  - (void)gestureRecognizer:(nullable UIGestureRecognizer *)gestureRecognizer
37
- didActivateInRootView:(nullable UIView *)rootView;
42
+ didActivateInViewWithTouchHandler:(nullable UIView *)viewWithTouchHandler;
38
43
 
39
44
  @end
40
45
 
@@ -53,21 +58,30 @@ if (value != nil) recognizer.prop = [RCTConvert type:value]; \
53
58
  @property (nonatomic, readonly, nonnull) NSNumber *tag;
54
59
  @property (nonatomic, weak, nullable) id<RNGestureHandlerEventEmitter> emitter;
55
60
  @property (nonatomic, readonly, nullable) UIGestureRecognizer *recognizer;
61
+ @property (nonatomic, readonly, nullable) RNGestureHandlerPointerTracker *pointerTracker;
56
62
  @property (nonatomic) BOOL enabled;
57
- @property(nonatomic) BOOL shouldCancelWhenOutside;
63
+ @property (nonatomic) BOOL usesDeviceEvents;
64
+ @property (nonatomic) BOOL shouldCancelWhenOutside;
65
+ @property (nonatomic) BOOL needsPointerData;
66
+ @property (nonatomic) BOOL manualActivation;
58
67
 
59
68
  - (void)bindToView:(nonnull UIView *)view;
60
69
  - (void)unbindFromView;
70
+ - (void)resetConfig NS_REQUIRES_SUPER;
61
71
  - (void)configure:(nullable NSDictionary *)config NS_REQUIRES_SUPER;
62
72
  - (void)handleGesture:(nonnull id)recognizer;
63
73
  - (BOOL)containsPointInView;
64
74
  - (RNGestureHandlerState)state;
65
75
  - (nullable RNGestureHandlerEventExtraData *)eventExtraData:(nonnull id)recognizer;
66
76
 
77
+ - (void)stopActivationBlocker;
67
78
  - (void)reset;
68
79
  - (void)sendEventsInState:(RNGestureHandlerState)state
69
80
  forViewWithTag:(nonnull NSNumber *)reactTag
70
- withExtraData:(RNGestureHandlerEventExtraData *)extraData;
81
+ withExtraData:(nonnull RNGestureHandlerEventExtraData *)extraData;
82
+ - (void)sendStateChangeEvent:(nonnull RNGestureHandlerStateChange *)event;
83
+ - (void)sendTouchEventInState:(RNGestureHandlerState)state
84
+ forViewWithTag:(nonnull NSNumber *)reactTag;
71
85
 
72
86
  @end
73
87
 
@@ -1,4 +1,5 @@
1
1
  #import "RNGestureHandler.h"
2
+ #import "RNManualActivationRecognizer.h"
2
3
 
3
4
  #import "Handlers/RNNativeViewHandler.h"
4
5
 
@@ -61,6 +62,9 @@ CGRect RNGHHitSlopInsetRect(CGRect rect, RNGHHitSlop hitSlop) {
61
62
  static NSHashTable<RNGestureHandler *> *allGestureHandlers;
62
63
 
63
64
  @implementation RNGestureHandler {
65
+ RNGestureHandlerPointerTracker *_pointerTracker;
66
+ RNGestureHandlerState _state;
67
+ RNManualActivationRecognizer *_manualActivationRecognizer;
64
68
  NSArray<NSNumber *> *_handlersToWaitFor;
65
69
  NSArray<NSNumber *> *_simultaneousHandlers;
66
70
  RNGHHitSlop _hitSlop;
@@ -70,9 +74,12 @@ static NSHashTable<RNGestureHandler *> *allGestureHandlers;
70
74
  - (instancetype)initWithTag:(NSNumber *)tag
71
75
  {
72
76
  if ((self = [super init])) {
77
+ _pointerTracker = [[RNGestureHandlerPointerTracker alloc] initWithGestureHandler:self];
73
78
  _tag = tag;
74
79
  _lastState = RNGestureHandlerStateUndetermined;
75
80
  _hitSlop = RNGHHitSlopEmpty;
81
+ _state = RNGestureHandlerStateBegan;
82
+ _manualActivationRecognizer = nil;
76
83
 
77
84
  static dispatch_once_t onceToken;
78
85
  dispatch_once(&onceToken, ^{
@@ -84,23 +91,42 @@ static NSHashTable<RNGestureHandler *> *allGestureHandlers;
84
91
  return self;
85
92
  }
86
93
 
94
+ - (void)resetConfig
95
+ {
96
+ self.enabled = YES;
97
+ _shouldCancelWhenOutside = NO;
98
+ _handlersToWaitFor = nil;
99
+ _simultaneousHandlers = nil;
100
+ _hitSlop = RNGHHitSlopEmpty;
101
+ _needsPointerData = NO;
102
+
103
+ self.manualActivation = NO;
104
+ }
105
+
87
106
  - (void)configure:(NSDictionary *)config
88
107
  {
108
+ [self resetConfig];
89
109
  _handlersToWaitFor = [RCTConvert NSNumberArray:config[@"waitFor"]];
90
110
  _simultaneousHandlers = [RCTConvert NSNumberArray:config[@"simultaneousHandlers"]];
91
111
 
92
112
  id prop = config[@"enabled"];
93
113
  if (prop != nil) {
94
114
  self.enabled = [RCTConvert BOOL:prop];
95
- } else {
96
- self.enabled = YES;
97
115
  }
98
116
 
99
117
  prop = config[@"shouldCancelWhenOutside"];
100
118
  if (prop != nil) {
101
119
  _shouldCancelWhenOutside = [RCTConvert BOOL:prop];
102
- } else {
103
- _shouldCancelWhenOutside = NO;
120
+ }
121
+
122
+ prop = config[@"needsPointerData"];
123
+ if (prop != nil) {
124
+ _needsPointerData = [RCTConvert BOOL:prop];
125
+ }
126
+
127
+ prop = config[@"manualActivation"];
128
+ if (prop != nil) {
129
+ self.manualActivation = [RCTConvert BOOL:prop];
104
130
  }
105
131
 
106
132
  prop = config[@"hitSlop"];
@@ -141,12 +167,16 @@ static NSHashTable<RNGestureHandler *> *allGestureHandlers;
141
167
  view.userInteractionEnabled = YES;
142
168
  self.recognizer.delegate = self;
143
169
  [view addGestureRecognizer:self.recognizer];
170
+
171
+ [self bindManualActivationToView:view];
144
172
  }
145
173
 
146
174
  - (void)unbindFromView
147
175
  {
148
176
  [self.recognizer.view removeGestureRecognizer:self.recognizer];
149
177
  self.recognizer.delegate = nil;
178
+
179
+ [self unbindManualActivation];
150
180
  }
151
181
 
152
182
  - (RNGestureHandlerEventExtraData *)eventExtraData:(UIGestureRecognizer *)recognizer
@@ -159,6 +189,7 @@ static NSHashTable<RNGestureHandler *> *allGestureHandlers;
159
189
 
160
190
  - (void)handleGesture:(UIGestureRecognizer *)recognizer
161
191
  {
192
+ _state = [self recognizerState];
162
193
  RNGestureHandlerEventExtraData *eventData = [self eventExtraData:recognizer];
163
194
  [self sendEventsInState:self.state forViewWithTag:recognizer.view.reactTag withExtraData:eventData];
164
195
  }
@@ -176,11 +207,12 @@ static NSHashTable<RNGestureHandler *> *allGestureHandlers;
176
207
  self->_eventCoalescingKey = nextEventCoalescingKey++;
177
208
 
178
209
  } else if (state == RNGestureHandlerStateEnd && _lastState != RNGestureHandlerStateActive) {
179
- [self.emitter sendStateChangeEvent:[[RNGestureHandlerStateChange alloc] initWithReactTag:reactTag
180
- handlerTag:_tag
181
- state:RNGestureHandlerStateActive
182
- prevState:_lastState
183
- extraData:extraData]];
210
+ id event = [[RNGestureHandlerStateChange alloc] initWithReactTag:reactTag
211
+ handlerTag:_tag
212
+ state:RNGestureHandlerStateActive
213
+ prevState:_lastState
214
+ extraData:extraData];
215
+ [self sendStateChangeEvent:event];
184
216
  _lastState = RNGestureHandlerStateActive;
185
217
  }
186
218
  id stateEvent = [[RNGestureHandlerStateChange alloc] initWithReactTag:reactTag
@@ -188,7 +220,7 @@ static NSHashTable<RNGestureHandler *> *allGestureHandlers;
188
220
  state:state
189
221
  prevState:_lastState
190
222
  extraData:extraData];
191
- [self.emitter sendStateChangeEvent:stateEvent];
223
+ [self sendStateChangeEvent:stateEvent];
192
224
  _lastState = state;
193
225
  }
194
226
 
@@ -198,11 +230,36 @@ static NSHashTable<RNGestureHandler *> *allGestureHandlers;
198
230
  state:state
199
231
  extraData:extraData
200
232
  coalescingKey:self->_eventCoalescingKey];
201
- [self.emitter sendTouchEvent:touchEvent];
233
+ [self sendStateChangeEvent:touchEvent];
202
234
  }
203
235
  }
204
236
 
205
- - (RNGestureHandlerState)state
237
+ - (void)sendStateChangeEvent:(RNGestureHandlerStateChange *)event
238
+ {
239
+ if (self.usesDeviceEvents) {
240
+ [self.emitter sendStateChangeDeviceEvent:event];
241
+ } else {
242
+ [self.emitter sendStateChangeEvent:event];
243
+ }
244
+ }
245
+
246
+ - (void)sendTouchEventInState:(RNGestureHandlerState)state
247
+ forViewWithTag:(NSNumber *)reactTag
248
+ {
249
+ id extraData = [RNGestureHandlerEventExtraData forEventType:_pointerTracker.eventType
250
+ withChangedPointers:_pointerTracker.changedPointersData
251
+ withAllPointers:_pointerTracker.allPointersData
252
+ withNumberOfTouches:_pointerTracker.trackedPointersCount];
253
+ id event = [[RNGestureHandlerEvent alloc] initWithReactTag:reactTag handlerTag:_tag state:state extraData:extraData coalescingKey:[_tag intValue]];
254
+
255
+ if (self.usesDeviceEvents) {
256
+ [self.emitter sendStateChangeDeviceEvent:event];
257
+ } else {
258
+ [self.emitter sendStateChangeEvent:event];
259
+ }
260
+ }
261
+
262
+ - (RNGestureHandlerState)recognizerState
206
263
  {
207
264
  switch (_recognizer.state) {
208
265
  case UIGestureRecognizerStateBegan:
@@ -220,6 +277,52 @@ static NSHashTable<RNGestureHandler *> *allGestureHandlers;
220
277
  return RNGestureHandlerStateUndetermined;
221
278
  }
222
279
 
280
+ - (RNGestureHandlerState)state
281
+ {
282
+ // instead of mapping state of the recognizer directly, use value mapped when handleGesture was
283
+ // called, making it correct while awaiting for another handler failure
284
+ return _state;
285
+ }
286
+
287
+ #pragma mark Manual activation
288
+
289
+ - (void)stopActivationBlocker
290
+ {
291
+ if (_manualActivationRecognizer != nil) {
292
+ [_manualActivationRecognizer fail];
293
+ }
294
+ }
295
+
296
+ - (void)setManualActivation:(BOOL)manualActivation
297
+ {
298
+ _manualActivation = manualActivation;
299
+
300
+ if (manualActivation) {
301
+ _manualActivationRecognizer = [[RNManualActivationRecognizer alloc] initWithGestureHandler:self];
302
+
303
+ if (_recognizer.view != nil) {
304
+ [_recognizer.view addGestureRecognizer:_manualActivationRecognizer];
305
+ }
306
+ } else if (_manualActivationRecognizer != nil) {
307
+ [_manualActivationRecognizer.view removeGestureRecognizer:_manualActivationRecognizer];
308
+ _manualActivationRecognizer = nil;
309
+ }
310
+ }
311
+
312
+ - (void)bindManualActivationToView:(UIView *)view
313
+ {
314
+ if (_manualActivationRecognizer != nil) {
315
+ [view addGestureRecognizer:_manualActivationRecognizer];
316
+ }
317
+ }
318
+
319
+ - (void)unbindManualActivation
320
+ {
321
+ if (_manualActivationRecognizer != nil) {
322
+ [_manualActivationRecognizer.view removeGestureRecognizer:_manualActivationRecognizer];
323
+ }
324
+ }
325
+
223
326
  #pragma mark UIGestureRecognizerDelegate
224
327
 
225
328
  + (RNGestureHandler *)findGestureHandlerByRecognizer:(UIGestureRecognizer *)recognizer
@@ -297,7 +400,14 @@ shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherG
297
400
 
298
401
  - (void)reset
299
402
  {
300
- _lastState = RNGestureHandlerStateUndetermined;
403
+ // do not reset states while gesture is tracking pointers, as gestureRecognizerShouldBegin
404
+ // might be called after some pointers are down, and after state manipulation by the user.
405
+ // Pointer tracker calls this method when it resets, and in that case it no longer tracks
406
+ // any pointers, thus entering this if
407
+ if (!_needsPointerData || _pointerTracker.trackedPointersCount == 0) {
408
+ _lastState = RNGestureHandlerStateUndetermined;
409
+ _state = RNGestureHandlerStateBegan;
410
+ }
301
411
  }
302
412
 
303
413
  - (BOOL)containsPointInView
@@ -4,6 +4,7 @@
4
4
  #import <UIKit/UIKit.h>
5
5
 
6
6
  #import "RNGestureHandlerState.h"
7
+ #import "RNTouchEventType.h"
7
8
 
8
9
  @interface RNGestureHandlerEventExtraData : NSObject
9
10
 
@@ -14,6 +15,10 @@
14
15
  + (RNGestureHandlerEventExtraData *)forPosition:(CGPoint)position
15
16
  withAbsolutePosition:(CGPoint)absolutePosition
16
17
  withNumberOfTouches:(NSUInteger)numberOfTouches;
18
+ + (RNGestureHandlerEventExtraData *)forPosition:(CGPoint)position
19
+ withAbsolutePosition:(CGPoint)absolutePosition
20
+ withNumberOfTouches:(NSUInteger)numberOfTouches
21
+ withDuration:(NSUInteger)duration;
17
22
  + (RNGestureHandlerEventExtraData *)forPan:(CGPoint)position
18
23
  withAbsolutePosition:(CGPoint)absolutePosition
19
24
  withTranslation:(CGPoint)translation
@@ -31,6 +36,10 @@
31
36
  withAnchorPoint:(CGPoint)anchorPoint
32
37
  withVelocity:(CGFloat)velocity
33
38
  withNumberOfTouches:(NSUInteger)numberOfTouches;
39
+ + (RNGestureHandlerEventExtraData *)forEventType:(RNTouchEventType)eventType
40
+ withChangedPointers:(NSArray<NSDictionary *> *)changedPointers
41
+ withAllPointers:(NSArray<NSDictionary *> *)allPointers
42
+ withNumberOfTouches:(NSUInteger)numberOfTouches;
34
43
  + (RNGestureHandlerEventExtraData *)forPointerInside:(BOOL)pointerInside;
35
44
  @end
36
45
 
@@ -25,6 +25,22 @@
25
25
  @"numberOfPointers": @(numberOfTouches)}];
26
26
  }
27
27
 
28
+ + (RNGestureHandlerEventExtraData *)forPosition:(CGPoint)position
29
+ withAbsolutePosition:(CGPoint)absolutePosition
30
+ withNumberOfTouches:(NSUInteger)numberOfTouches
31
+ withDuration:(NSUInteger)duration
32
+ {
33
+ return [[RNGestureHandlerEventExtraData alloc]
34
+ initWithData:@{
35
+ @"x": @(position.x),
36
+ @"y": @(position.y),
37
+ @"absoluteX": @(absolutePosition.x),
38
+ @"absoluteY": @(absolutePosition.y),
39
+ @"numberOfPointers": @(numberOfTouches),
40
+ @"duration":@(duration)
41
+ }];
42
+ }
43
+
28
44
  + (RNGestureHandlerEventExtraData *)forPan:(CGPoint)position
29
45
  withAbsolutePosition:(CGPoint)absolutePosition
30
46
  withTranslation:(CGPoint)translation
@@ -87,6 +103,24 @@
87
103
  @"numberOfPointers": @(numberOfTouches)}];
88
104
  }
89
105
 
106
+ + (RNGestureHandlerEventExtraData *)forEventType:(RNTouchEventType)eventType
107
+ withChangedPointers:(NSArray<NSDictionary *> *)changedPointers
108
+ withAllPointers:(NSArray<NSDictionary *> *)allPointers
109
+ withNumberOfTouches:(NSUInteger)numberOfTouches
110
+ {
111
+ if (changedPointers == nil || allPointers == nil) {
112
+ changedPointers = @[];
113
+ allPointers = @[];
114
+ eventType = RNTouchEventTypeUndetermined;
115
+ }
116
+
117
+ return [[RNGestureHandlerEventExtraData alloc]
118
+ initWithData:@{@"eventType": @(eventType),
119
+ @"changedTouches": changedPointers,
120
+ @"allTouches": allPointers,
121
+ @"numberOfTouches": @(numberOfTouches)}];
122
+ }
123
+
90
124
  + (RNGestureHandlerEventExtraData *)forPointerInside:(BOOL)pointerInside
91
125
  {
92
126
  return [[RNGestureHandlerEventExtraData alloc]
@@ -2,6 +2,8 @@
2
2
 
3
3
  #import <React/RCTBridgeModule.h>
4
4
 
5
+ #import "RNGestureHandler.h"
6
+
5
7
  @class RCTUIManager;
6
8
  @class RCTEventDispatcher;
7
9
 
@@ -17,6 +19,9 @@
17
19
  - (void)attachGestureHandler:(nonnull NSNumber *)handlerTag
18
20
  toViewWithTag:(nonnull NSNumber *)viewTag;
19
21
 
22
+ - (void)attachGestureHandlerForDeviceEvents:(nonnull NSNumber *)handlerTag
23
+ toViewWithTag:(nonnull NSNumber *)viewTag;
24
+
20
25
  - (void)updateGestureHandler:(nonnull NSNumber *)handlerTag config:(nonnull NSDictionary *)config;
21
26
 
22
27
  - (void)dropGestureHandler:(nonnull NSNumber *)handlerTag;
@@ -26,4 +31,6 @@
26
31
 
27
32
  - (void)handleClearJSResponder;
28
33
 
34
+ - (nullable RNGestureHandler *)handlerWithTag:(nonnull NSNumber *)handlerTag;
35
+
29
36
  @end