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

Sign up to get free protection for your applications and to get access to all the features.
Files changed (211) hide show
  1. package/harmony/gesture_handler/BuildProfile.ets +6 -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 +18 -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 +123 -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
  }