@react-native-oh-tpl/react-native-gesture-handler 2.12.6-1 → 2.12.9

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 (211) hide show
  1. package/harmony/gesture_handler/BuildProfile.ets +5 -0
  2. package/harmony/gesture_handler/build-profile.json5 +18 -7
  3. package/harmony/gesture_handler/hvigorfile.ts +2 -2
  4. package/harmony/gesture_handler/index.ets +3 -3
  5. package/harmony/gesture_handler/oh-package-lock.json5 +17 -0
  6. package/harmony/gesture_handler/oh-package.json5 +12 -11
  7. package/harmony/gesture_handler/src/main/cpp/CMakeLists.txt +8 -8
  8. package/harmony/gesture_handler/src/main/cpp/GestureHandlerPackage.cpp +103 -34
  9. package/harmony/gesture_handler/src/main/cpp/GestureHandlerPackage.h +21 -15
  10. package/harmony/gesture_handler/src/main/cpp/RNGestureHandlerButtonComponentDescriptor.h +36 -60
  11. package/harmony/gesture_handler/src/main/cpp/RNGestureHandlerButtonComponentInstance.h +27 -0
  12. package/harmony/gesture_handler/src/main/cpp/RNGestureHandlerButtonJSIBinder.h +32 -0
  13. package/harmony/gesture_handler/src/main/cpp/RNGestureHandlerModule.cpp +22 -17
  14. package/harmony/gesture_handler/src/main/cpp/RNGestureHandlerModule.h +15 -12
  15. package/harmony/gesture_handler/src/main/cpp/RNGestureHandlerPackage.h +72 -0
  16. package/harmony/gesture_handler/src/main/cpp/RNGestureHandlerRootViewComponentDescriptor.h +36 -60
  17. package/harmony/gesture_handler/src/main/cpp/RNGestureHandlerRootViewComponentInstance.h +78 -0
  18. package/harmony/gesture_handler/src/main/cpp/RNGestureHandlerRootViewJSIBinder.h +25 -0
  19. package/harmony/gesture_handler/src/main/ets/CircularBuffer.ts +42 -42
  20. package/harmony/gesture_handler/src/main/ets/Event.ts +67 -67
  21. package/harmony/gesture_handler/src/main/ets/EventDispatcher.ts +52 -37
  22. package/harmony/gesture_handler/src/main/ets/GestureHandler.ts +663 -663
  23. package/harmony/gesture_handler/src/main/ets/{GestureHandlerArkUIAdapter.ets → GestureHandlerArkUIAdapter.ts} +202 -201
  24. package/harmony/gesture_handler/src/main/ets/GestureHandlerFactory.ts +44 -44
  25. package/harmony/gesture_handler/src/main/ets/GestureHandlerOrchestrator.ts +280 -280
  26. package/harmony/gesture_handler/src/main/ets/GestureHandlerPackage.ts +22 -22
  27. package/harmony/gesture_handler/src/main/ets/GestureHandlerRegistry.ts +27 -27
  28. package/harmony/gesture_handler/src/main/ets/InteractionManager.ts +108 -108
  29. package/harmony/gesture_handler/src/main/ets/LeastSquareSolver.ts +182 -182
  30. package/harmony/gesture_handler/src/main/ets/NativeViewGestureHandler.ts +114 -114
  31. package/harmony/gesture_handler/src/main/ets/OutgoingEvent.ts +33 -33
  32. package/harmony/gesture_handler/src/main/ets/PanGestureHandler.ts +327 -327
  33. package/harmony/gesture_handler/src/main/ets/PointerTracker.ts +239 -239
  34. package/harmony/gesture_handler/src/main/ets/RNGHError.ts +4 -4
  35. package/harmony/gesture_handler/src/main/ets/RNGHLogger.ts +47 -28
  36. package/harmony/gesture_handler/src/main/ets/{RNGHRootTouchHandler.ets → RNGHRootTouchHandlerArkTS.ts} +59 -57
  37. package/harmony/gesture_handler/src/main/ets/RNGHRootTouchHandlerCAPI.ts +87 -0
  38. package/harmony/gesture_handler/src/main/ets/RNGestureHandlerButton.ets +37 -36
  39. package/harmony/gesture_handler/src/main/ets/RNGestureHandlerModule.ts +183 -125
  40. package/harmony/gesture_handler/src/main/ets/RNGestureHandlerRootView.ets +52 -55
  41. package/harmony/gesture_handler/src/main/ets/RNOHScrollLocker.ts +23 -11
  42. package/harmony/gesture_handler/src/main/ets/State.ts +46 -46
  43. package/harmony/gesture_handler/src/main/ets/TapGestureHandler.ts +205 -205
  44. package/harmony/gesture_handler/src/main/ets/Vector2D.ts +36 -36
  45. package/harmony/gesture_handler/src/main/ets/VelocityTracker.ts +98 -98
  46. package/harmony/gesture_handler/src/main/ets/View.ts +70 -70
  47. package/harmony/gesture_handler/src/main/ets/ViewRegistry.ts +42 -42
  48. package/harmony/gesture_handler/src/main/ets/namespace/RNGestureHandlerButton.ts +140 -0
  49. package/harmony/gesture_handler/src/main/ets/namespace/RNGestureHandlerModule.ts +25 -0
  50. package/harmony/gesture_handler/src/main/ets/namespace/RNGestureHandlerRootView.ts +101 -0
  51. package/harmony/gesture_handler/src/main/ets/namespace/ts.ts +3 -0
  52. package/harmony/gesture_handler/src/main/ets/pages/Index.ets +16 -16
  53. package/harmony/gesture_handler/src/main/ets/types.ts +25 -0
  54. package/harmony/gesture_handler/src/main/ets/webviewability/WebviewAbility.ts +41 -41
  55. package/harmony/gesture_handler/src/main/module.json5 +7 -7
  56. package/harmony/gesture_handler/src/main/resources/base/element/color.json +7 -7
  57. package/harmony/gesture_handler/src/main/resources/base/element/string.json +15 -15
  58. package/harmony/gesture_handler/src/main/resources/base/profile/main_pages.json +5 -5
  59. package/harmony/gesture_handler/src/main/resources/en_US/element/string.json +15 -15
  60. package/harmony/gesture_handler/src/main/resources/zh_CN/element/string.json +15 -15
  61. package/harmony/gesture_handler/ts.ts +2 -1
  62. package/harmony/gesture_handler.har +0 -0
  63. package/lib/commonjs/RNGestureHandlerModule.js +6 -3
  64. package/lib/commonjs/RNGestureHandlerModule.js.map +1 -1
  65. package/lib/commonjs/components/GestureHandlerRootView.js +5 -13
  66. package/lib/commonjs/components/GestureHandlerRootView.js.map +1 -1
  67. package/lib/commonjs/handlers/createHandler.js +31 -28
  68. package/lib/commonjs/handlers/createHandler.js.map +1 -1
  69. package/lib/commonjs/index.js +42 -19
  70. package/lib/commonjs/index.js.map +1 -1
  71. package/lib/commonjs/specs/NativeRNGestureHandlerModule.js +10 -0
  72. package/lib/commonjs/specs/NativeRNGestureHandlerModule.js.map +1 -0
  73. package/lib/commonjs/specs/RNGestureHandlerButtonNativeComponent.js +11 -0
  74. package/lib/commonjs/specs/RNGestureHandlerButtonNativeComponent.js.map +1 -0
  75. package/lib/commonjs/specs/RNGestureHandlerRootViewNativeComponent.js +11 -0
  76. package/lib/commonjs/specs/RNGestureHandlerRootViewNativeComponent.js.map +1 -0
  77. package/lib/module/RNGestureHandlerModule.js +3 -2
  78. package/lib/module/RNGestureHandlerModule.js.map +1 -1
  79. package/lib/module/components/GestureHandlerRootView.js +3 -11
  80. package/lib/module/components/GestureHandlerRootView.js.map +1 -1
  81. package/lib/module/handlers/createHandler.js +20 -19
  82. package/lib/module/handlers/createHandler.js.map +1 -1
  83. package/lib/module/index.js +6 -14
  84. package/lib/module/index.js.map +1 -1
  85. package/lib/module/specs/NativeRNGestureHandlerModule.js +3 -0
  86. package/lib/module/specs/NativeRNGestureHandlerModule.js.map +1 -0
  87. package/lib/module/specs/RNGestureHandlerButtonNativeComponent.js +3 -0
  88. package/lib/module/specs/RNGestureHandlerButtonNativeComponent.js.map +1 -0
  89. package/lib/module/specs/RNGestureHandlerRootViewNativeComponent.js +3 -0
  90. package/lib/module/specs/RNGestureHandlerRootViewNativeComponent.js.map +1 -0
  91. package/lib/typescript/RNGestureHandlerModule.d.ts +2 -6
  92. package/lib/typescript/RNGestureHandlerModule.d.ts.map +1 -1
  93. package/lib/typescript/components/GestureHandlerRootView.d.ts +6 -6
  94. package/lib/typescript/components/GestureHandlerRootView.d.ts.map +1 -1
  95. package/lib/typescript/handlers/createHandler.d.ts +11 -11
  96. package/lib/typescript/handlers/createHandler.d.ts.map +1 -1
  97. package/lib/typescript/index.d.ts +9 -8
  98. package/lib/typescript/index.d.ts.map +1 -1
  99. package/lib/typescript/specs/NativeRNGestureHandlerModule.d.ts +15 -0
  100. package/lib/typescript/specs/NativeRNGestureHandlerModule.d.ts.map +1 -0
  101. package/lib/typescript/specs/RNGestureHandlerButtonNativeComponent.d.ts +15 -0
  102. package/lib/typescript/specs/RNGestureHandlerButtonNativeComponent.d.ts.map +1 -0
  103. package/lib/typescript/specs/RNGestureHandlerRootViewNativeComponent.d.ts +7 -0
  104. package/lib/typescript/specs/RNGestureHandlerRootViewNativeComponent.d.ts.map +1 -0
  105. package/package.json +66 -70
  106. package/src/RNGestureHandlerModule.ts +5 -6
  107. package/src/components/GestureHandlerRootView.tsx +23 -34
  108. package/src/handlers/createHandler.tsx +534 -535
  109. package/src/index.ts +172 -172
  110. package/src/specs/NativeRNGestureHandlerModule.ts +26 -0
  111. package/src/specs/RNGestureHandlerButtonNativeComponent.ts +18 -0
  112. package/src/specs/RNGestureHandlerRootViewNativeComponent.ts +6 -0
  113. package/README.md +0 -1
  114. package/lib/commonjs/components/GestureButtons.js +0 -186
  115. package/lib/commonjs/components/GestureButtons.js.map +0 -1
  116. package/lib/commonjs/components/GestureHandlerButton.js +0 -9
  117. package/lib/commonjs/components/GestureHandlerButton.js.map +0 -1
  118. package/lib/commonjs/components/RNGestureHandlerButton.js +0 -23
  119. package/lib/commonjs/components/RNGestureHandlerButton.js.map +0 -1
  120. package/lib/commonjs/components/touchables/GenericTouchable.js +0 -247
  121. package/lib/commonjs/components/touchables/GenericTouchable.js.map +0 -1
  122. package/lib/commonjs/components/touchables/TouchableOpacity.js +0 -58
  123. package/lib/commonjs/components/touchables/TouchableOpacity.js.map +0 -1
  124. package/lib/commonjs/components/touchables/TouchableWithoutFeedback.js +0 -18
  125. package/lib/commonjs/components/touchables/TouchableWithoutFeedback.js.map +0 -1
  126. package/lib/commonjs/components/touchables/index.js +0 -21
  127. package/lib/commonjs/components/touchables/index.js.map +0 -1
  128. package/lib/commonjs/handlers/NativeViewGestureHandler.js +0 -19
  129. package/lib/commonjs/handlers/NativeViewGestureHandler.js.map +0 -1
  130. package/lib/commonjs/handlers/PanGestureHandler.js +0 -103
  131. package/lib/commonjs/handlers/PanGestureHandler.js.map +0 -1
  132. package/lib/commonjs/handlers/TapGestureHandler.js +0 -22
  133. package/lib/commonjs/handlers/TapGestureHandler.js.map +0 -1
  134. package/lib/commonjs/handlers/createNativeWrapper.js +0 -64
  135. package/lib/commonjs/handlers/createNativeWrapper.js.map +0 -1
  136. package/lib/commonjs/handlers/gestureHandlerCommon.js +0 -22
  137. package/lib/commonjs/handlers/gestureHandlerCommon.js.map +0 -1
  138. package/lib/commonjs/handlers/gestures/GestureDetector.js +0 -554
  139. package/lib/commonjs/handlers/gestures/GestureDetector.js.map +0 -1
  140. package/lib/commonjs/init.js +0 -24
  141. package/lib/commonjs/init.js.map +0 -1
  142. package/lib/module/components/GestureButtons.js +0 -168
  143. package/lib/module/components/GestureButtons.js.map +0 -1
  144. package/lib/module/components/GestureHandlerButton.js +0 -3
  145. package/lib/module/components/GestureHandlerButton.js.map +0 -1
  146. package/lib/module/components/RNGestureHandlerButton.js +0 -17
  147. package/lib/module/components/RNGestureHandlerButton.js.map +0 -1
  148. package/lib/module/components/touchables/GenericTouchable.js +0 -238
  149. package/lib/module/components/touchables/GenericTouchable.js.map +0 -1
  150. package/lib/module/components/touchables/TouchableOpacity.js +0 -49
  151. package/lib/module/components/touchables/TouchableOpacity.js.map +0 -1
  152. package/lib/module/components/touchables/TouchableWithoutFeedback.js +0 -9
  153. package/lib/module/components/touchables/TouchableWithoutFeedback.js.map +0 -1
  154. package/lib/module/components/touchables/index.js +0 -8
  155. package/lib/module/components/touchables/index.js.map +0 -1
  156. package/lib/module/handlers/NativeViewGestureHandler.js +0 -12
  157. package/lib/module/handlers/NativeViewGestureHandler.js.map +0 -1
  158. package/lib/module/handlers/PanGestureHandler.js +0 -92
  159. package/lib/module/handlers/PanGestureHandler.js.map +0 -1
  160. package/lib/module/handlers/TapGestureHandler.js +0 -14
  161. package/lib/module/handlers/TapGestureHandler.js.map +0 -1
  162. package/lib/module/handlers/createNativeWrapper.js +0 -57
  163. package/lib/module/handlers/createNativeWrapper.js.map +0 -1
  164. package/lib/module/handlers/gestureHandlerCommon.js +0 -15
  165. package/lib/module/handlers/gestureHandlerCommon.js.map +0 -1
  166. package/lib/module/handlers/gestures/GestureDetector.js +0 -543
  167. package/lib/module/handlers/gestures/GestureDetector.js.map +0 -1
  168. package/lib/module/init.js +0 -17
  169. package/lib/module/init.js.map +0 -1
  170. package/lib/typescript/components/GestureButtons.d.ts +0 -122
  171. package/lib/typescript/components/GestureButtons.d.ts.map +0 -1
  172. package/lib/typescript/components/GestureHandlerButton.d.ts +0 -5
  173. package/lib/typescript/components/GestureHandlerButton.d.ts.map +0 -1
  174. package/lib/typescript/components/RNGestureHandlerButton.d.ts +0 -2
  175. package/lib/typescript/components/RNGestureHandlerButton.d.ts.map +0 -1
  176. package/lib/typescript/components/touchables/GenericTouchable.d.ts +0 -68
  177. package/lib/typescript/components/touchables/GenericTouchable.d.ts.map +0 -1
  178. package/lib/typescript/components/touchables/TouchableOpacity.d.ts +0 -26
  179. package/lib/typescript/components/touchables/TouchableOpacity.d.ts.map +0 -1
  180. package/lib/typescript/components/touchables/TouchableWithoutFeedback.d.ts +0 -8
  181. package/lib/typescript/components/touchables/TouchableWithoutFeedback.d.ts.map +0 -1
  182. package/lib/typescript/components/touchables/index.d.ts +0 -4
  183. package/lib/typescript/components/touchables/index.d.ts.map +0 -1
  184. package/lib/typescript/handlers/NativeViewGestureHandler.d.ts +0 -29
  185. package/lib/typescript/handlers/NativeViewGestureHandler.d.ts.map +0 -1
  186. package/lib/typescript/handlers/PanGestureHandler.d.ts +0 -140
  187. package/lib/typescript/handlers/PanGestureHandler.d.ts.map +0 -1
  188. package/lib/typescript/handlers/TapGestureHandler.d.ts +0 -58
  189. package/lib/typescript/handlers/TapGestureHandler.d.ts.map +0 -1
  190. package/lib/typescript/handlers/createNativeWrapper.d.ts +0 -4
  191. package/lib/typescript/handlers/createNativeWrapper.d.ts.map +0 -1
  192. package/lib/typescript/handlers/gestureHandlerCommon.d.ts +0 -2
  193. package/lib/typescript/handlers/gestureHandlerCommon.d.ts.map +0 -1
  194. package/lib/typescript/handlers/gestures/GestureDetector.d.ts +0 -24
  195. package/lib/typescript/handlers/gestures/GestureDetector.d.ts.map +0 -1
  196. package/lib/typescript/init.d.ts +0 -3
  197. package/lib/typescript/init.d.ts.map +0 -1
  198. package/src/components/GestureButtons.tsx +0 -334
  199. package/src/components/GestureHandlerButton.tsx +0 -5
  200. package/src/components/RNGestureHandlerButton.tsx +0 -23
  201. package/src/components/touchables/GenericTouchable.tsx +0 -301
  202. package/src/components/touchables/TouchableOpacity.tsx +0 -76
  203. package/src/components/touchables/TouchableWithoutFeedback.tsx +0 -14
  204. package/src/components/touchables/index.ts +0 -7
  205. package/src/handlers/NativeViewGestureHandler.ts +0 -55
  206. package/src/handlers/PanGestureHandler.ts +0 -327
  207. package/src/handlers/TapGestureHandler.ts +0 -95
  208. package/src/handlers/createNativeWrapper.tsx +0 -81
  209. package/src/handlers/gestureHandlerCommon.ts +0 -15
  210. package/src/handlers/gestures/GestureDetector.tsx +0 -823
  211. package/src/init.ts +0 -18
@@ -1,202 +1,203 @@
1
- import { Point } from "rnoh"
2
- import { GestureHandler } from "./GestureHandler"
3
- import { AdaptedEvent, EventType, PointerType, TouchEventType, Touch } from "./Event"
4
- import { View } from "./View"
5
- import { RNGHLogger } from "./RNGHLogger"
6
-
7
- export class GestureHandlerArkUIAdapter {
8
- private activePointerIds = new Set<number>()
9
- private pointersIdInBounds = new Set<number>()
10
- private gestureHandler: GestureHandler
11
- private view: View
12
- private logger: RNGHLogger
13
-
14
- constructor(gestureHandler: GestureHandler, view: View, logger: RNGHLogger) {
15
- logger.info("constructor")
16
- this.gestureHandler = gestureHandler
17
- this.view = view
18
- this.logger = logger
19
- }
20
-
21
- handleTouch(e: TouchEvent) {
22
- for (const changedTouch of e.changedTouches) {
23
- if (this.shouldSkipTouch(changedTouch)) continue;
24
- const wasInBounds = this.pointersIdInBounds.has(changedTouch.id)
25
- const isInBounds = this.isInBounds({ x: changedTouch.windowX, y: changedTouch.windowY })
26
- this.logger.info(`handleTouch: ${JSON.stringify({ type: changedTouch.type, wasInBounds, isInBounds })}`)
27
- const adaptedEvent = this.adaptTouchEvent(e, changedTouch)
28
- switch (adaptedEvent.eventType) {
29
- case EventType.DOWN:
30
- this.gestureHandler.onPointerDown(adaptedEvent)
31
- break;
32
- case EventType.ADDITIONAL_POINTER_DOWN:
33
- this.gestureHandler.onAdditionalPointerAdd(adaptedEvent)
34
- break;
35
- case EventType.UP:
36
- this.gestureHandler.onPointerUp(adaptedEvent)
37
- break;
38
- case EventType.ADDITIONAL_POINTER_UP:
39
- this.gestureHandler.onAdditionalPointerRemove(adaptedEvent)
40
- break;
41
- case EventType.MOVE:
42
- if (!wasInBounds && !isInBounds)
43
- this.gestureHandler.onPointerOutOfBounds(adaptedEvent)
44
- else
45
- this.gestureHandler.onPointerMove(adaptedEvent)
46
- break;
47
- case EventType.ENTER:
48
- this.gestureHandler.onPointerEnter(adaptedEvent)
49
- break;
50
- case EventType.OUT:
51
- this.gestureHandler.onPointerOut(adaptedEvent)
52
- break;
53
- case EventType.CANCEL:
54
- this.gestureHandler.onPointerCancel(adaptedEvent)
55
- break;
56
- }
57
- }
58
- }
59
-
60
- private shouldSkipTouch(changedTouch: TouchObject): boolean {
61
- return changedTouch.type === TouchType.Down && !this.isInBounds({
62
- x: changedTouch.windowX,
63
- y: changedTouch.windowY
64
- })
65
- }
66
-
67
- private adaptTouchEvent(e: TouchEvent, changedTouch: TouchObject): AdaptedEvent {
68
- const xAbsolute = changedTouch.windowX
69
- const yAbsolute = changedTouch.windowY
70
-
71
- const eventType = this.mapTouchTypeToEventType(
72
- changedTouch.type,
73
- this.activePointerIds.size,
74
- this.isInBounds({ x: xAbsolute, y: yAbsolute }),
75
- this.pointersIdInBounds.has(changedTouch.id)
76
- )
77
- this.updateIsInBoundsByPointerId(
78
- changedTouch.type,
79
- changedTouch.id,
80
- xAbsolute,
81
- yAbsolute
82
- )
83
- this.updateActivePointers(changedTouch.type, changedTouch.id)
84
- return {
85
- x: xAbsolute,
86
- y: yAbsolute,
87
- offsetX: xAbsolute - this.view.getBoundingRect().x,
88
- offsetY: yAbsolute - this.view.getBoundingRect().y,
89
- pointerId: changedTouch.id,
90
- eventType: eventType,
91
- pointerType: PointerType.TOUCH,
92
- buttons: 0,
93
- time: e.timestamp,
94
- allTouches: e.touches.map((touch) => this.mapTouchObjectToTouch(touch)),
95
- changedTouches: e.changedTouches.map((touch) => this.mapTouchObjectToTouch(touch)),
96
- touchEventType: this.mapTouchTypeToTouchEventType(changedTouch.type)
97
- }
98
- }
99
-
100
- private updateIsInBoundsByPointerId(
101
- touchType: TouchType,
102
- pointerId: number,
103
- x: number,
104
- y: number
105
- ) {
106
- switch (touchType) {
107
- case TouchType.Down:
108
- if (this.isInBounds({ x, y }))
109
- this.pointersIdInBounds.add(pointerId)
110
- break;
111
- case TouchType.Move:
112
- if (this.isInBounds({ x, y }))
113
- this.pointersIdInBounds.add(pointerId)
114
- else
115
- this.pointersIdInBounds.delete(pointerId)
116
- break;
117
- case TouchType.Up:
118
- this.pointersIdInBounds.delete(pointerId)
119
- break;
120
- case TouchType.Cancel:
121
- this.pointersIdInBounds.delete(pointerId)
122
- break;
123
- }
124
- }
125
-
126
- private isInBounds(point: Point): boolean {
127
- const x = point.x
128
- const y = point.y
129
- const rect = this.view.getBoundingRect()
130
- const result = x >= rect.x && x <= (rect.x + rect.width) && y >= rect.y && y <= (rect.y + rect.height)
131
- return result;
132
- }
133
-
134
- private updateActivePointers(touchType: TouchType, pointerId: number): void {
135
- switch (touchType) {
136
- case TouchType.Down:
137
- this.activePointerIds.add(pointerId)
138
- case TouchType.Up:
139
- this.activePointerIds.delete(pointerId)
140
- case TouchType.Cancel:
141
- this.activePointerIds.clear()
142
- default:
143
- return
144
- }
145
- }
146
-
147
- private mapTouchObjectToTouch(touchObject: TouchObject): Touch {
148
- return {
149
- id: touchObject.id,
150
- x: touchObject.x,
151
- y: touchObject.y,
152
- absoluteX: touchObject.windowX,
153
- absoluteY: touchObject.windowY
154
- }
155
- }
156
-
157
- private mapTouchTypeToEventType(
158
- touchType: TouchType,
159
- activePointersCounter: number,
160
- isCurrentlyInBounds: boolean,
161
- wasInBounds: boolean
162
- ): EventType {
163
- switch (touchType) {
164
- case TouchType.Down:
165
- if (activePointersCounter > 0)
166
- return EventType.ADDITIONAL_POINTER_DOWN
167
- else
168
- return EventType.DOWN
169
- case TouchType.Up:
170
- if (activePointersCounter > 1)
171
- return EventType.ADDITIONAL_POINTER_UP
172
- else
173
- return EventType.UP
174
- case TouchType.Move:
175
- if (isCurrentlyInBounds) {
176
- return wasInBounds ? EventType.MOVE : EventType.ENTER
177
- } else {
178
- return wasInBounds ? EventType.OUT : EventType.MOVE
179
- }
180
- case TouchType.Cancel:
181
- return EventType.CANCEL
182
- default:
183
- console.error("RNGH", "Unknown touchType:", touchType)
184
- throw new Error("Unknown touchType")
185
- }
186
- }
187
-
188
- private mapTouchTypeToTouchEventType(touchType: TouchType): TouchEventType {
189
- switch (touchType) {
190
- case TouchType.Down:
191
- return TouchEventType.DOWN
192
- case TouchType.Up:
193
- return TouchEventType.UP
194
- case TouchType.Move:
195
- return TouchEventType.MOVE
196
- case TouchType.Cancel:
197
- return TouchEventType.CANCELLED
198
- default:
199
- return TouchEventType.UNDETERMINED
200
- }
201
- }
1
+ import { Point } from "@rnoh/react-native-openharmony/ts"
2
+ import { GestureHandler } from "./GestureHandler"
3
+ import { AdaptedEvent, EventType, PointerType, TouchEventType, Touch } from "./Event"
4
+ import { View } from "./View"
5
+ import { RNGHLogger } from "./RNGHLogger"
6
+ import { TouchEvent, TouchType, TouchObject } from "./types"
7
+
8
+ export class GestureHandlerArkUIAdapter {
9
+ private activePointerIds = new Set<number>()
10
+ private pointersIdInBounds = new Set<number>()
11
+ private gestureHandler: GestureHandler
12
+ private view: View
13
+ private logger: RNGHLogger
14
+
15
+ constructor(gestureHandler: GestureHandler, view: View, logger: RNGHLogger) {
16
+ logger.info("constructor")
17
+ this.gestureHandler = gestureHandler
18
+ this.view = view
19
+ this.logger = logger
20
+ }
21
+
22
+ handleTouch(e: TouchEvent) {
23
+ for (const changedTouch of e.changedTouches) {
24
+ if (this.shouldSkipTouch(changedTouch)) continue;
25
+ const wasInBounds = this.pointersIdInBounds.has(changedTouch.id)
26
+ const isInBounds = this.isInBounds({ x: changedTouch.windowX, y: changedTouch.windowY })
27
+ this.logger.info(`handleTouch: ${JSON.stringify({ type: changedTouch.type, wasInBounds, isInBounds })}`)
28
+ const adaptedEvent = this.adaptTouchEvent(e, changedTouch)
29
+ switch (adaptedEvent.eventType) {
30
+ case EventType.DOWN:
31
+ this.gestureHandler.onPointerDown(adaptedEvent)
32
+ break;
33
+ case EventType.ADDITIONAL_POINTER_DOWN:
34
+ this.gestureHandler.onAdditionalPointerAdd(adaptedEvent)
35
+ break;
36
+ case EventType.UP:
37
+ this.gestureHandler.onPointerUp(adaptedEvent)
38
+ break;
39
+ case EventType.ADDITIONAL_POINTER_UP:
40
+ this.gestureHandler.onAdditionalPointerRemove(adaptedEvent)
41
+ break;
42
+ case EventType.MOVE:
43
+ if (!wasInBounds && !isInBounds)
44
+ this.gestureHandler.onPointerOutOfBounds(adaptedEvent)
45
+ else
46
+ this.gestureHandler.onPointerMove(adaptedEvent)
47
+ break;
48
+ case EventType.ENTER:
49
+ this.gestureHandler.onPointerEnter(adaptedEvent)
50
+ break;
51
+ case EventType.OUT:
52
+ this.gestureHandler.onPointerOut(adaptedEvent)
53
+ break;
54
+ case EventType.CANCEL:
55
+ this.gestureHandler.onPointerCancel(adaptedEvent)
56
+ break;
57
+ }
58
+ }
59
+ }
60
+
61
+ private shouldSkipTouch(changedTouch: TouchObject): boolean {
62
+ return changedTouch.type === TouchType.Down && !this.isInBounds({
63
+ x: changedTouch.windowX,
64
+ y: changedTouch.windowY
65
+ })
66
+ }
67
+
68
+ private adaptTouchEvent(e: TouchEvent, changedTouch: TouchObject): AdaptedEvent {
69
+ const xAbsolute = changedTouch.windowX
70
+ const yAbsolute = changedTouch.windowY
71
+
72
+ const eventType = this.mapTouchTypeToEventType(
73
+ changedTouch.type,
74
+ this.activePointerIds.size,
75
+ this.isInBounds({ x: xAbsolute, y: yAbsolute }),
76
+ this.pointersIdInBounds.has(changedTouch.id)
77
+ )
78
+ this.updateIsInBoundsByPointerId(
79
+ changedTouch.type,
80
+ changedTouch.id,
81
+ xAbsolute,
82
+ yAbsolute
83
+ )
84
+ this.updateActivePointers(changedTouch.type, changedTouch.id)
85
+ return {
86
+ x: xAbsolute,
87
+ y: yAbsolute,
88
+ offsetX: xAbsolute - this.view.getBoundingRect().x,
89
+ offsetY: yAbsolute - this.view.getBoundingRect().y,
90
+ pointerId: changedTouch.id,
91
+ eventType: eventType,
92
+ pointerType: PointerType.TOUCH,
93
+ buttons: 0,
94
+ time: e.timestamp,
95
+ allTouches: e.touches.map((touch) => this.mapTouchObjectToTouch(touch)),
96
+ changedTouches: e.changedTouches.map((touch) => this.mapTouchObjectToTouch(touch)),
97
+ touchEventType: this.mapTouchTypeToTouchEventType(changedTouch.type)
98
+ }
99
+ }
100
+
101
+ private updateIsInBoundsByPointerId(
102
+ touchType: TouchType,
103
+ pointerId: number,
104
+ x: number,
105
+ y: number
106
+ ) {
107
+ switch (touchType) {
108
+ case TouchType.Down:
109
+ if (this.isInBounds({ x, y }))
110
+ this.pointersIdInBounds.add(pointerId)
111
+ break;
112
+ case TouchType.Move:
113
+ if (this.isInBounds({ x, y }))
114
+ this.pointersIdInBounds.add(pointerId)
115
+ else
116
+ this.pointersIdInBounds.delete(pointerId)
117
+ break;
118
+ case TouchType.Up:
119
+ this.pointersIdInBounds.delete(pointerId)
120
+ break;
121
+ case TouchType.Cancel:
122
+ this.pointersIdInBounds.delete(pointerId)
123
+ break;
124
+ }
125
+ }
126
+
127
+ private isInBounds(point: Point): boolean {
128
+ const x = point.x
129
+ const y = point.y
130
+ const rect = this.view.getBoundingRect()
131
+ const result = x >= rect.x && x <= (rect.x + rect.width) && y >= rect.y && y <= (rect.y + rect.height)
132
+ return result;
133
+ }
134
+
135
+ private updateActivePointers(touchType: TouchType, pointerId: number): void {
136
+ switch (touchType) {
137
+ case TouchType.Down:
138
+ this.activePointerIds.add(pointerId)
139
+ case TouchType.Up:
140
+ this.activePointerIds.delete(pointerId)
141
+ case TouchType.Cancel:
142
+ this.activePointerIds.clear()
143
+ default:
144
+ return
145
+ }
146
+ }
147
+
148
+ private mapTouchObjectToTouch(touchObject: TouchObject): Touch {
149
+ return {
150
+ id: touchObject.id,
151
+ x: touchObject.x,
152
+ y: touchObject.y,
153
+ absoluteX: touchObject.windowX,
154
+ absoluteY: touchObject.windowY
155
+ }
156
+ }
157
+
158
+ private mapTouchTypeToEventType(
159
+ touchType: TouchType,
160
+ activePointersCounter: number,
161
+ isCurrentlyInBounds: boolean,
162
+ wasInBounds: boolean
163
+ ): EventType {
164
+ switch (touchType) {
165
+ case TouchType.Down:
166
+ if (activePointersCounter > 0)
167
+ return EventType.ADDITIONAL_POINTER_DOWN
168
+ else
169
+ return EventType.DOWN
170
+ case TouchType.Up:
171
+ if (activePointersCounter > 1)
172
+ return EventType.ADDITIONAL_POINTER_UP
173
+ else
174
+ return EventType.UP
175
+ case TouchType.Move:
176
+ if (isCurrentlyInBounds) {
177
+ return wasInBounds ? EventType.MOVE : EventType.ENTER
178
+ } else {
179
+ return wasInBounds ? EventType.OUT : EventType.MOVE
180
+ }
181
+ case TouchType.Cancel:
182
+ return EventType.CANCEL
183
+ default:
184
+ console.error("RNGH", "Unknown touchType:", touchType)
185
+ throw new Error("Unknown touchType")
186
+ }
187
+ }
188
+
189
+ private mapTouchTypeToTouchEventType(touchType: TouchType): TouchEventType {
190
+ switch (touchType) {
191
+ case TouchType.Down:
192
+ return TouchEventType.DOWN
193
+ case TouchType.Up:
194
+ return TouchEventType.UP
195
+ case TouchType.Move:
196
+ return TouchEventType.MOVE
197
+ case TouchType.Cancel:
198
+ return TouchEventType.CANCELLED
199
+ default:
200
+ return TouchEventType.UNDETERMINED
201
+ }
202
+ }
202
203
  }
@@ -1,45 +1,45 @@
1
- import { GestureHandlerOrchestrator } from './GestureHandlerOrchestrator';
2
- import { GestureHandler, GestureHandlerDependencies, ScrollLocker } from "./GestureHandler"
3
- import { PointerTracker } from './PointerTracker';
4
- import { RNGHError } from "./RNGHError"
5
- import { InteractionManager } from './InteractionManager';
6
- import { RNGHLogger } from './RNGHLogger';
7
- import { TapGestureHandler } from './TapGestureHandler';
8
- import { PanGestureHandler } from "./PanGestureHandler"
9
- import { NativeViewGestureHandler } from "./NativeViewGestureHandler"
10
-
11
-
12
- export class GestureHandlerFactory {
13
- private orchestrator: GestureHandlerOrchestrator
14
- private interactionManager = new InteractionManager()
15
- private factoryLogger: RNGHLogger
16
-
17
- constructor(private logger: RNGHLogger, private scrollLocker: ScrollLocker) {
18
- this.factoryLogger = logger.cloneWithPrefix("Factory")
19
- this.orchestrator = new GestureHandlerOrchestrator(logger.cloneWithPrefix("Orchestrator"))
20
- }
21
-
22
- create(handlerName: string, handlerTag: number): GestureHandler {
23
- this.factoryLogger.info(`create ${handlerName} with handlerTag: ${handlerTag}`)
24
- const deps: GestureHandlerDependencies = {
25
- tracker: new PointerTracker(),
26
- orchestrator: this.orchestrator,
27
- handlerTag,
28
- interactionManager: this.interactionManager,
29
- logger: this.logger.cloneWithPrefix("GestureHandler"),
30
- scrollLocker: this.scrollLocker,
31
- }
32
- switch (handlerName) {
33
- case "TapGestureHandler":
34
- return new TapGestureHandler(deps)
35
- case "PanGestureHandler":
36
- return new PanGestureHandler(deps)
37
- case "NativeViewGestureHandler":
38
- return new NativeViewGestureHandler(deps)
39
- default:
40
- const msg = `Unknown handler type: ${handlerName}`
41
- this.factoryLogger.info(msg)
42
- throw new RNGHError(msg)
43
- }
44
- }
1
+ import { GestureHandlerOrchestrator } from './GestureHandlerOrchestrator';
2
+ import { GestureHandler, GestureHandlerDependencies, ScrollLocker } from "./GestureHandler"
3
+ import { PointerTracker } from './PointerTracker';
4
+ import { RNGHError } from "./RNGHError"
5
+ import { InteractionManager } from './InteractionManager';
6
+ import { RNGHLogger } from './RNGHLogger';
7
+ import { TapGestureHandler } from './TapGestureHandler';
8
+ import { PanGestureHandler } from "./PanGestureHandler"
9
+ import { NativeViewGestureHandler } from "./NativeViewGestureHandler"
10
+
11
+
12
+ export class GestureHandlerFactory {
13
+ private orchestrator: GestureHandlerOrchestrator
14
+ private interactionManager = new InteractionManager()
15
+ private factoryLogger: RNGHLogger
16
+
17
+ constructor(private logger: RNGHLogger, private scrollLocker: ScrollLocker) {
18
+ this.factoryLogger = logger.cloneWithPrefix("Factory")
19
+ this.orchestrator = new GestureHandlerOrchestrator(logger.cloneWithPrefix("Orchestrator"))
20
+ }
21
+
22
+ create(handlerName: string, handlerTag: number): GestureHandler {
23
+ this.factoryLogger.info(`create ${handlerName} with handlerTag: ${handlerTag}`)
24
+ const deps: GestureHandlerDependencies = {
25
+ tracker: new PointerTracker(),
26
+ orchestrator: this.orchestrator,
27
+ handlerTag,
28
+ interactionManager: this.interactionManager,
29
+ logger: this.logger.cloneWithPrefix("GestureHandler"),
30
+ scrollLocker: this.scrollLocker,
31
+ }
32
+ switch (handlerName) {
33
+ case "TapGestureHandler":
34
+ return new TapGestureHandler(deps)
35
+ case "PanGestureHandler":
36
+ return new PanGestureHandler(deps)
37
+ case "NativeViewGestureHandler":
38
+ return new NativeViewGestureHandler(deps)
39
+ default:
40
+ const msg = `Unknown handler type: ${handlerName}`
41
+ this.factoryLogger.info(msg)
42
+ throw new RNGHError(msg)
43
+ }
44
+ }
45
45
  }