@react-native-oh-tpl/react-native-gesture-handler 2.12.6-1 → 2.12.6-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 (79) hide show
  1. package/harmony/gesture_handler/LICENSE +21 -0
  2. package/harmony/gesture_handler/OAT.xml +44 -0
  3. package/harmony/gesture_handler/README.OpenSource +11 -0
  4. package/harmony/gesture_handler/README.md +1 -0
  5. package/harmony/gesture_handler/build-profile.json5 +7 -7
  6. package/harmony/gesture_handler/hvigorfile.ts +2 -2
  7. package/harmony/gesture_handler/index.ets +2 -2
  8. package/harmony/gesture_handler/oh-package.json5 +13 -11
  9. package/harmony/gesture_handler/src/main/cpp/CMakeLists.txt +8 -8
  10. package/harmony/gesture_handler/src/main/cpp/GestureHandlerPackage.cpp +33 -33
  11. package/harmony/gesture_handler/src/main/cpp/GestureHandlerPackage.h +14 -14
  12. package/harmony/gesture_handler/src/main/cpp/RNGestureHandlerButtonComponentDescriptor.h +60 -60
  13. package/harmony/gesture_handler/src/main/cpp/RNGestureHandlerModule.cpp +17 -17
  14. package/harmony/gesture_handler/src/main/cpp/RNGestureHandlerModule.h +11 -11
  15. package/harmony/gesture_handler/src/main/cpp/RNGestureHandlerRootViewComponentDescriptor.h +60 -60
  16. package/harmony/gesture_handler/src/main/ets/CircularBuffer.ts +42 -42
  17. package/harmony/gesture_handler/src/main/ets/Event.ts +67 -67
  18. package/harmony/gesture_handler/src/main/ets/EventDispatcher.ts +37 -37
  19. package/harmony/gesture_handler/src/main/ets/GestureHandler.ts +663 -663
  20. package/harmony/gesture_handler/src/main/ets/GestureHandlerArkUIAdapter.ets +201 -201
  21. package/harmony/gesture_handler/src/main/ets/GestureHandlerFactory.ts +44 -44
  22. package/harmony/gesture_handler/src/main/ets/GestureHandlerOrchestrator.ts +280 -280
  23. package/harmony/gesture_handler/src/main/ets/GestureHandlerPackage.ts +22 -22
  24. package/harmony/gesture_handler/src/main/ets/GestureHandlerRegistry.ts +27 -27
  25. package/harmony/gesture_handler/src/main/ets/InteractionManager.ts +108 -108
  26. package/harmony/gesture_handler/src/main/ets/LeastSquareSolver.ts +182 -182
  27. package/harmony/gesture_handler/src/main/ets/NativeViewGestureHandler.ts +114 -114
  28. package/harmony/gesture_handler/src/main/ets/OutgoingEvent.ts +33 -33
  29. package/harmony/gesture_handler/src/main/ets/PanGestureHandler.ts +327 -327
  30. package/harmony/gesture_handler/src/main/ets/PointerTracker.ts +239 -239
  31. package/harmony/gesture_handler/src/main/ets/RNGHError.ts +4 -4
  32. package/harmony/gesture_handler/src/main/ets/RNGHLogger.ts +28 -28
  33. package/harmony/gesture_handler/src/main/ets/RNGHRootTouchHandler.ets +57 -57
  34. package/harmony/gesture_handler/src/main/ets/RNGestureHandlerButton.ets +36 -36
  35. package/harmony/gesture_handler/src/main/ets/RNGestureHandlerModule.ts +125 -125
  36. package/harmony/gesture_handler/src/main/ets/RNGestureHandlerRootView.ets +56 -55
  37. package/harmony/gesture_handler/src/main/ets/RNOHScrollLocker.ts +10 -10
  38. package/harmony/gesture_handler/src/main/ets/State.ts +46 -46
  39. package/harmony/gesture_handler/src/main/ets/TapGestureHandler.ts +205 -205
  40. package/harmony/gesture_handler/src/main/ets/Vector2D.ts +36 -36
  41. package/harmony/gesture_handler/src/main/ets/VelocityTracker.ts +98 -98
  42. package/harmony/gesture_handler/src/main/ets/View.ts +70 -70
  43. package/harmony/gesture_handler/src/main/ets/ViewRegistry.ts +42 -42
  44. package/harmony/gesture_handler/src/main/ets/pages/Index.ets +16 -16
  45. package/harmony/gesture_handler/src/main/ets/webviewability/WebviewAbility.ts +41 -41
  46. package/harmony/gesture_handler/src/main/module.json5 +6 -6
  47. package/harmony/gesture_handler/src/main/resources/base/element/color.json +7 -7
  48. package/harmony/gesture_handler/src/main/resources/base/element/string.json +15 -15
  49. package/harmony/gesture_handler/src/main/resources/base/profile/main_pages.json +5 -5
  50. package/harmony/gesture_handler/src/main/resources/en_US/element/string.json +15 -15
  51. package/harmony/gesture_handler/src/main/resources/zh_CN/element/string.json +15 -15
  52. package/harmony/gesture_handler.har +0 -0
  53. package/lib/commonjs/components/touchables/GenericTouchable.js +9 -9
  54. package/lib/commonjs/components/touchables/TouchableOpacity.js +2 -2
  55. package/lib/commonjs/handlers/createNativeWrapper.js +6 -6
  56. package/lib/commonjs/handlers/gestures/GestureDetector.js +3 -3
  57. package/lib/module/components/touchables/GenericTouchable.js +9 -9
  58. package/lib/module/components/touchables/TouchableOpacity.js +2 -2
  59. package/lib/module/handlers/createNativeWrapper.js +6 -6
  60. package/lib/module/handlers/gestures/GestureDetector.js +3 -3
  61. package/package.json +70 -70
  62. package/src/RNGestureHandlerModule.ts +6 -6
  63. package/src/components/GestureButtons.tsx +334 -334
  64. package/src/components/GestureHandlerButton.tsx +5 -5
  65. package/src/components/GestureHandlerRootView.tsx +34 -34
  66. package/src/components/RNGestureHandlerButton.tsx +23 -23
  67. package/src/components/touchables/GenericTouchable.tsx +301 -301
  68. package/src/components/touchables/TouchableOpacity.tsx +76 -76
  69. package/src/components/touchables/TouchableWithoutFeedback.tsx +14 -14
  70. package/src/components/touchables/index.ts +7 -7
  71. package/src/handlers/NativeViewGestureHandler.ts +55 -55
  72. package/src/handlers/PanGestureHandler.ts +327 -327
  73. package/src/handlers/TapGestureHandler.ts +95 -95
  74. package/src/handlers/createHandler.tsx +535 -535
  75. package/src/handlers/createNativeWrapper.tsx +81 -81
  76. package/src/handlers/gestureHandlerCommon.ts +15 -15
  77. package/src/handlers/gestures/GestureDetector.tsx +823 -823
  78. package/src/index.ts +172 -172
  79. package/src/init.ts +18 -18
@@ -1,202 +1,202 @@
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"
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
+ }
202
202
  }
@@ -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
  }