@react-native-oh-tpl/react-native-gesture-handler 2.12.9 → 2.14.1-2.14.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 (86) hide show
  1. package/DrawerLayout/index.ts +2 -0
  2. package/Swipeable/index.ts +2 -0
  3. package/harmony/gesture_handler/BuildProfile.ets +15 -3
  4. package/harmony/gesture_handler/hvigorfile.ts +1 -1
  5. package/harmony/gesture_handler/index.ets +2 -2
  6. package/harmony/gesture_handler/oh-package-lock.json5 +4 -3
  7. package/harmony/gesture_handler/oh-package.json5 +4 -4
  8. package/harmony/gesture_handler/src/main/cpp/GestureHandlerPackage.cpp +63 -17
  9. package/harmony/gesture_handler/src/main/cpp/GestureHandlerPackage.h +3 -3
  10. package/harmony/gesture_handler/src/main/cpp/RNGestureHandlerRootViewJSIBinder.h +2 -2
  11. package/harmony/gesture_handler/src/main/cpp/{RNGestureHandlerButtonComponentInstance.h → componentInstances/RNGestureHandlerButtonComponentInstance.h} +2 -2
  12. package/harmony/gesture_handler/src/main/cpp/componentInstances/RNGestureHandlerRootViewComponentInstance.h +234 -0
  13. package/harmony/gesture_handler/src/main/ets/{GestureHandler.ts → core/GestureHandler.ts} +46 -25
  14. package/harmony/gesture_handler/src/main/ets/{GestureHandlerOrchestrator.ts → core/GestureHandlerOrchestrator.ts} +122 -67
  15. package/harmony/gesture_handler/src/main/ets/{GestureHandlerRegistry.ts → core/GestureHandlerRegistry.ts} +7 -0
  16. package/harmony/gesture_handler/src/main/ets/{Event.ts → core/IncomingEvent.ts} +30 -20
  17. package/harmony/gesture_handler/src/main/ets/core/InteractionManager.ts +144 -0
  18. package/harmony/gesture_handler/src/main/ets/{OutgoingEvent.ts → core/OutgoingEvent.ts} +1 -1
  19. package/harmony/gesture_handler/src/main/ets/core/OutgoingEventDispatcher.ts +12 -0
  20. package/harmony/gesture_handler/src/main/ets/{PointerTracker.ts → core/PointerTracker.ts} +4 -4
  21. package/harmony/gesture_handler/src/main/ets/core/RNGHLogger.ts +12 -0
  22. package/harmony/gesture_handler/src/main/ets/core/Vector2D.ts +80 -0
  23. package/harmony/gesture_handler/src/main/ets/{VelocityTracker.ts → core/VelocityTracker.ts} +13 -5
  24. package/harmony/gesture_handler/src/main/ets/core/View.ts +19 -0
  25. package/harmony/gesture_handler/src/main/ets/core/index.ts +13 -0
  26. package/harmony/gesture_handler/src/main/ets/detectors/ScaleGestureDetector.ts +169 -0
  27. package/harmony/gesture_handler/src/main/ets/gesture-handlers/FlingGestureHandler.ts +211 -0
  28. package/harmony/gesture_handler/src/main/ets/gesture-handlers/GestureHandlerFactory.ts +64 -0
  29. package/harmony/gesture_handler/src/main/ets/gesture-handlers/LongPressGestureHandler.ts +127 -0
  30. package/harmony/gesture_handler/src/main/ets/gesture-handlers/ManualGestureHandler.ts +42 -0
  31. package/harmony/gesture_handler/src/main/ets/{NativeViewGestureHandler.ts → gesture-handlers/NativeViewGestureHandler.ts} +10 -12
  32. package/harmony/gesture_handler/src/main/ets/{PanGestureHandler.ts → gesture-handlers/PanGestureHandler.ts} +27 -13
  33. package/harmony/gesture_handler/src/main/ets/gesture-handlers/PinchGestureHandler.ts +159 -0
  34. package/harmony/gesture_handler/src/main/ets/gesture-handlers/RotationGestureHandler.ts +164 -0
  35. package/harmony/gesture_handler/src/main/ets/{TapGestureHandler.ts → gesture-handlers/TapGestureHandler.ts} +11 -11
  36. package/harmony/gesture_handler/src/main/ets/gesture-handlers/detectors/RotationGestureDetector.ts +167 -0
  37. package/harmony/gesture_handler/src/main/ets/gesture-handlers/index.ts +1 -0
  38. package/harmony/gesture_handler/src/main/ets/namespace/RNGestureHandlerModule.ts +8 -9
  39. package/harmony/gesture_handler/src/main/ets/namespace/{RNGestureHandlerButton.ts → components/RNGestureHandlerButton.ts} +35 -36
  40. package/harmony/gesture_handler/src/main/ets/namespace/{RNGestureHandlerRootView.ts → components/RNGestureHandlerRootView.ts} +23 -23
  41. package/harmony/gesture_handler/src/main/ets/namespace/components/ts.ts +2 -0
  42. package/harmony/gesture_handler/src/main/ets/namespace/ts.ts +2 -3
  43. package/harmony/gesture_handler/src/main/ets/rnoh/GestureHandlerArkUIAdapter.ts +240 -0
  44. package/harmony/gesture_handler/src/main/ets/{GestureHandlerPackage.ts → rnoh/GestureHandlerPackage.ts} +4 -4
  45. package/harmony/gesture_handler/src/main/ets/rnoh/Logger.ts +49 -0
  46. package/harmony/gesture_handler/src/main/ets/rnoh/OutgoingEventDispatchers.ts +71 -0
  47. package/harmony/gesture_handler/src/main/ets/rnoh/RNGHRootTouchHandlerArkTS.ts +104 -0
  48. package/harmony/gesture_handler/src/main/ets/rnoh/RNGHRootTouchHandlerCAPI.ts +110 -0
  49. package/harmony/gesture_handler/src/main/ets/{RNGestureHandlerButton.ets → rnoh/RNGestureHandlerButton.ets} +3 -3
  50. package/harmony/gesture_handler/src/main/ets/{RNGestureHandlerModule.ts → rnoh/RNGestureHandlerModule.ts} +74 -27
  51. package/harmony/gesture_handler/src/main/ets/{RNGestureHandlerRootView.ets → rnoh/RNGestureHandlerRootView.ets} +3 -3
  52. package/harmony/gesture_handler/src/main/ets/rnoh/RNOHGestureResponder.ts +24 -0
  53. package/harmony/gesture_handler/src/main/ets/rnoh/RNOHScrollLocker.ts +32 -0
  54. package/harmony/gesture_handler/src/main/ets/rnoh/View.ts +119 -0
  55. package/harmony/gesture_handler/src/main/ets/rnoh/ViewRegistry.ts +95 -0
  56. package/harmony/gesture_handler/src/main/module.json5 +8 -6
  57. package/harmony/gesture_handler/ts.ts +2 -2
  58. package/harmony/gesture_handler.har +0 -0
  59. package/lib/commonjs/index.js +98 -138
  60. package/lib/commonjs/index.js.map +1 -1
  61. package/lib/module/index.js +9 -142
  62. package/lib/module/index.js.map +1 -1
  63. package/lib/typescript/index.d.ts +35 -1
  64. package/lib/typescript/index.d.ts.map +1 -1
  65. package/package.json +13 -10
  66. package/src/index.ts +136 -136
  67. package/harmony/gesture_handler/src/main/cpp/RNGestureHandlerPackage.h +0 -72
  68. package/harmony/gesture_handler/src/main/cpp/RNGestureHandlerRootViewComponentInstance.h +0 -78
  69. package/harmony/gesture_handler/src/main/ets/EventDispatcher.ts +0 -53
  70. package/harmony/gesture_handler/src/main/ets/GestureHandlerArkUIAdapter.ts +0 -203
  71. package/harmony/gesture_handler/src/main/ets/GestureHandlerFactory.ts +0 -45
  72. package/harmony/gesture_handler/src/main/ets/InteractionManager.ts +0 -109
  73. package/harmony/gesture_handler/src/main/ets/RNGHLogger.ts +0 -48
  74. package/harmony/gesture_handler/src/main/ets/RNGHRootTouchHandlerArkTS.ts +0 -60
  75. package/harmony/gesture_handler/src/main/ets/RNGHRootTouchHandlerCAPI.ts +0 -87
  76. package/harmony/gesture_handler/src/main/ets/RNOHScrollLocker.ts +0 -23
  77. package/harmony/gesture_handler/src/main/ets/Vector2D.ts +0 -36
  78. package/harmony/gesture_handler/src/main/ets/View.ts +0 -71
  79. package/harmony/gesture_handler/src/main/ets/ViewRegistry.ts +0 -43
  80. package/harmony/gesture_handler/src/main/ets/pages/Index.ets +0 -17
  81. package/harmony/gesture_handler/src/main/ets/webviewability/WebviewAbility.ts +0 -41
  82. /package/harmony/gesture_handler/src/main/ets/{CircularBuffer.ts → core/CircularBuffer.ts} +0 -0
  83. /package/harmony/gesture_handler/src/main/ets/{LeastSquareSolver.ts → core/LeastSquareSolver.ts} +0 -0
  84. /package/harmony/gesture_handler/src/main/ets/{RNGHError.ts → core/RNGHError.ts} +0 -0
  85. /package/harmony/gesture_handler/src/main/ets/{State.ts → core/State.ts} +0 -0
  86. /package/harmony/gesture_handler/src/main/ets/{types.ts → rnoh/types.ts} +0 -0
@@ -0,0 +1,211 @@
1
+ import {
2
+ GestureHandler,
3
+ State,
4
+ DiagonalDirections,
5
+ Directions,
6
+ Vector2D,
7
+ IncomingEvent,
8
+ GestureHandlerDependencies
9
+ } from '../core';
10
+
11
+ const DEFAULT_MAX_DURATION_MS = 800;
12
+ const DEFAULT_MIN_VELOCITY = 700;
13
+ /**
14
+ * DEFAULT_ALIGNMENT_CONE defines the angular tolerance for fling gestures in degrees.
15
+ * *
16
+ * *
17
+ * *
18
+ * *------------>
19
+ * *
20
+ * *
21
+ * *
22
+ */
23
+ const DEFAULT_ALIGNMENT_CONE = 30;
24
+ const DEFAULT_DIRECTION: Directions = Directions.RIGHT;
25
+ const DEFAULT_NUMBER_OF_TOUCHES_REQUIRED = 1;
26
+ const AXIAL_DEVIATION_COSINE = coneToDeviation(DEFAULT_ALIGNMENT_CONE);
27
+ const DIAGONAL_DEVIATION_COSINE = coneToDeviation(90 - DEFAULT_ALIGNMENT_CONE);
28
+
29
+ export class FlingGestureHandler extends GestureHandler {
30
+ constructor(deps: GestureHandlerDependencies) {
31
+ super({ ...deps, logger: deps.logger.cloneWithPrefix("FlingGestureHandler") })
32
+ }
33
+
34
+ getDefaultConfig() {
35
+ return {}
36
+ }
37
+
38
+ private get direction(): Directions {
39
+ return this.config.direction ?? DEFAULT_DIRECTION
40
+ }
41
+
42
+ private get numberOfPointersRequired() {
43
+ return this.config.numberOfPointers ?? DEFAULT_NUMBER_OF_TOUCHES_REQUIRED
44
+ }
45
+
46
+ private get maxDurationMs() {
47
+ return this.config.maxDurationMs ?? DEFAULT_MAX_DURATION_MS
48
+ }
49
+
50
+ private get minVelocity() {
51
+ return this.config.minVelocity ?? DEFAULT_MIN_VELOCITY
52
+ }
53
+
54
+ private delayTimeout!: number;
55
+ private maxNumberOfPointersSimultaneously = 0;
56
+ private keyPointer = NaN;
57
+
58
+ private startFling(): void {
59
+ this.logger.info("startFling")
60
+ this.begin();
61
+
62
+ this.maxNumberOfPointersSimultaneously = 1;
63
+
64
+ this.delayTimeout = setTimeout(() => this.fail(), this.maxDurationMs);
65
+ }
66
+
67
+ private tryEndFling(): boolean {
68
+ const logger = this.logger.cloneWithPrefix("tryEndFling")
69
+ const velocityVector = this.tracker.getVelocity(this.keyPointer);
70
+
71
+ const getAlignment = (
72
+ direction: Directions | DiagonalDirections,
73
+ minimalAlignmentCosine: number
74
+ ) => {
75
+ return (
76
+ (direction & this.direction) === direction &&
77
+ velocityVector.computeCosine(
78
+ Vector2D.fromDirection(direction),
79
+ ) > minimalAlignmentCosine
80
+ );
81
+ };
82
+
83
+ const axialDirectionsList = Object.values(Directions);
84
+ const diagonalDirectionsList = Object.values(DiagonalDirections);
85
+
86
+ // list of alignments to all activated directions
87
+ const axialAlignmentList = axialDirectionsList.map((direction) =>
88
+ getAlignment(direction, AXIAL_DEVIATION_COSINE)
89
+ );
90
+
91
+ const diagonalAlignmentList = diagonalDirectionsList.map((direction) =>
92
+ getAlignment(direction, DIAGONAL_DEVIATION_COSINE)
93
+ );
94
+
95
+ const isAligned =
96
+ axialAlignmentList.some(Boolean) || diagonalAlignmentList.some(Boolean);
97
+
98
+ const isFast = velocityVector.magnitude > this.minVelocity;
99
+
100
+ if (
101
+ this.maxNumberOfPointersSimultaneously ===
102
+ this.numberOfPointersRequired &&
103
+ isAligned &&
104
+ isFast
105
+ ) {
106
+ clearTimeout(this.delayTimeout);
107
+ this.activate();
108
+
109
+ return true;
110
+ }
111
+
112
+ return false;
113
+ }
114
+
115
+ private endFling() {
116
+ this.logger.info("endFling")
117
+ if (!this.tryEndFling()) {
118
+ this.fail();
119
+ }
120
+ }
121
+
122
+ public onPointerDown(event: IncomingEvent): void {
123
+ this.tracker.addToTracker(event);
124
+ this.keyPointer = event.pointerId;
125
+
126
+ super.onPointerDown(event);
127
+ this.newPointerAction();
128
+ }
129
+
130
+ public onAdditionalPointerAdd(event: IncomingEvent): void {
131
+ this.tracker.addToTracker(event);
132
+ super.onAdditionalPointerAdd(event);
133
+ this.newPointerAction();
134
+ }
135
+
136
+ private newPointerAction(): void {
137
+ if (this.currentState === State.UNDETERMINED) {
138
+ this.startFling();
139
+ }
140
+
141
+ if (this.currentState !== State.BEGAN) {
142
+ return;
143
+ }
144
+
145
+ this.tryEndFling();
146
+
147
+ if (
148
+ this.tracker.getTrackedPointersCount() >
149
+ this.maxNumberOfPointersSimultaneously
150
+ ) {
151
+ this.maxNumberOfPointersSimultaneously =
152
+ this.tracker.getTrackedPointersCount();
153
+ }
154
+ }
155
+
156
+ private pointerMoveAction(event: IncomingEvent): void {
157
+ this.logger.cloneWithPrefix("pointerMoveAction").info(JSON.stringify(event))
158
+ this.tracker.track(event);
159
+
160
+ if (this.currentState !== State.BEGAN) {
161
+ return;
162
+ }
163
+
164
+ this.tryEndFling();
165
+ }
166
+
167
+ public onPointerMove(event: IncomingEvent): void {
168
+ this.pointerMoveAction(event);
169
+ super.onPointerMove(event);
170
+ }
171
+
172
+ public onPointerOutOfBounds(event: IncomingEvent): void {
173
+ this.pointerMoveAction(event);
174
+ super.onPointerOutOfBounds(event);
175
+ }
176
+
177
+ public onPointerUp(event: IncomingEvent): void {
178
+ super.onPointerUp(event);
179
+ this.onUp(event);
180
+
181
+ this.keyPointer = NaN;
182
+ }
183
+
184
+ public onAdditionalPointerRemove(event: IncomingEvent): void {
185
+ super.onAdditionalPointerRemove(event);
186
+ this.onUp(event);
187
+ }
188
+
189
+ private onUp(event: IncomingEvent): void {
190
+ const logger = this.logger.cloneWithPrefix("onUp")
191
+ logger.info("start")
192
+ if (this.currentState === State.BEGAN) {
193
+ this.endFling();
194
+ }
195
+ logger.info(`removeFromTracker: pointerId=${event.pointerId}`)
196
+ this.tracker.removeFromTracker(event.pointerId);
197
+ }
198
+
199
+ public activate(): void {
200
+ super.activate();
201
+ this.end();
202
+ }
203
+ }
204
+
205
+ function coneToDeviation(degrees: number) {
206
+ return Math.cos(degToRad(degrees / 2));
207
+ }
208
+
209
+ function degToRad(degrees: number) {
210
+ return (degrees * Math.PI) / 180;
211
+ }
@@ -0,0 +1,64 @@
1
+ import {
2
+ RNGHLogger,
3
+ InteractionManager,
4
+ RNGHError,
5
+ PointerTracker,
6
+ GestureHandler,
7
+ GestureHandlerDependencies,
8
+ ScrollLocker,
9
+ GestureHandlerOrchestrator,
10
+ RNGestureResponder
11
+ } from "../core"
12
+ import { TapGestureHandler } from './TapGestureHandler';
13
+ import { PanGestureHandler } from "./PanGestureHandler"
14
+ import { PinchGestureHandler } from "./PinchGestureHandler"
15
+ import { NativeViewGestureHandler } from "./NativeViewGestureHandler"
16
+ import { ManualGestureHandler } from './ManualGestureHandler';
17
+ import { LongPressGestureHandler } from "./LongPressGestureHandler"
18
+ import { FlingGestureHandler } from "./FlingGestureHandler"
19
+ import { RotationGestureHandler } from "./RotationGestureHandler"
20
+
21
+ export class GestureHandlerFactory {
22
+ private orchestrator: GestureHandlerOrchestrator
23
+ private logger: RNGHLogger
24
+
25
+ constructor(private cleanLogger: RNGHLogger, private scrollLocker: ScrollLocker, private interactionManager: InteractionManager, private rnGestureResponder: RNGestureResponder) {
26
+ this.logger = cleanLogger.cloneWithPrefix("Factory")
27
+ this.orchestrator = new GestureHandlerOrchestrator(cleanLogger.cloneWithPrefix("Orchestrator"))
28
+ }
29
+
30
+ create(handlerName: string, handlerTag: number): GestureHandler {
31
+ this.logger.info(`create ${handlerName} with handlerTag: ${handlerTag}`)
32
+ const deps: GestureHandlerDependencies = {
33
+ tracker: new PointerTracker(),
34
+ orchestrator: this.orchestrator,
35
+ handlerTag,
36
+ interactionManager: this.interactionManager,
37
+ logger: this.cleanLogger.cloneWithPrefix("GestureHandler"),
38
+ scrollLocker: this.scrollLocker,
39
+ rnGestureResponder: this.rnGestureResponder,
40
+ }
41
+ switch (handlerName) {
42
+ case "TapGestureHandler":
43
+ return new TapGestureHandler(deps)
44
+ case "PanGestureHandler":
45
+ return new PanGestureHandler(deps)
46
+ case "PinchGestureHandler":
47
+ return new PinchGestureHandler(deps)
48
+ case "NativeViewGestureHandler":
49
+ return new NativeViewGestureHandler(deps)
50
+ case "ManualGestureHandler":
51
+ return new ManualGestureHandler(deps)
52
+ case "LongPressGestureHandler":
53
+ return new LongPressGestureHandler(deps)
54
+ case "FlingGestureHandler":
55
+ return new FlingGestureHandler(deps)
56
+ case "RotationGestureHandler":
57
+ return new RotationGestureHandler(deps)
58
+ default:
59
+ const msg = `Unknown handler type: ${handlerName}`
60
+ this.logger.info(msg)
61
+ throw new RNGHError(msg)
62
+ }
63
+ }
64
+ }
@@ -0,0 +1,127 @@
1
+ import { GestureHandler, IncomingEvent, GestureConfig, State, GestureHandlerDependencies } from '../core';
2
+
3
+ const DEFAULT_MIN_DURATION_MS = 500;
4
+ const DEFAULT_MAX_DIST_DP = 10;
5
+ const SCALING_FACTOR = 10;
6
+
7
+ export class LongPressGestureHandler extends GestureHandler {
8
+ private minDurationMs = DEFAULT_MIN_DURATION_MS;
9
+ private defaultMaxDistSq = DEFAULT_MAX_DIST_DP * SCALING_FACTOR;
10
+
11
+ private maxDistSq = this.defaultMaxDistSq;
12
+ private startX = 0;
13
+ private startY = 0;
14
+
15
+ private startTime = 0;
16
+ private previousTime = 0;
17
+
18
+ private activationTimeout: number | undefined;
19
+
20
+ constructor(deps: GestureHandlerDependencies) {
21
+ super({...deps, logger: deps.logger.cloneWithPrefix("LongPressGestureHandler")})
22
+ }
23
+
24
+ public getDefaultConfig() {
25
+ return {}
26
+ }
27
+
28
+ protected transformNativeEvent() {
29
+ return {
30
+ ...super.transformNativeEvent(),
31
+ duration: Date.now() - this.startTime,
32
+ };
33
+ }
34
+
35
+ public updateGestureConfig({ enabled = true, ...props }: GestureConfig): void {
36
+ super.updateGestureConfig({ enabled: enabled, ...props });
37
+
38
+ if (this.config.minDurationMs !== undefined) {
39
+ this.minDurationMs = this.config.minDurationMs;
40
+ }
41
+
42
+ if (this.config.maxDist !== undefined) {
43
+ this.maxDistSq = this.config.maxDist * this.config.maxDist;
44
+ }
45
+ }
46
+
47
+
48
+
49
+ protected resetConfig(): void {
50
+ super.resetConfig();
51
+ this.minDurationMs = DEFAULT_MIN_DURATION_MS;
52
+ this.maxDistSq = this.defaultMaxDistSq;
53
+ }
54
+
55
+ protected onStateChange(newState: State, oldState: State): void {
56
+ super.onStateChange(newState, oldState)
57
+ clearTimeout(this.activationTimeout);
58
+ }
59
+
60
+ public onPointerDown(event: IncomingEvent): void {
61
+ this.tracker.addToTracker(event);
62
+ super.onPointerDown(event);
63
+ this.tryBegin(event);
64
+ this.tryActivate();
65
+ this.checkDistanceFail(event);
66
+ }
67
+
68
+ public onPointerMove(event: IncomingEvent): void {
69
+ super.onPointerMove(event);
70
+ this.tracker.track(event);
71
+ this.checkDistanceFail(event);
72
+ }
73
+
74
+ public onPointerUp(event: IncomingEvent): void {
75
+ super.onPointerUp(event);
76
+ this.tracker.removeFromTracker(event.pointerId);
77
+
78
+ if (this.currentState === State.ACTIVE) {
79
+ this.end();
80
+ } else {
81
+ this.fail();
82
+ }
83
+ }
84
+
85
+ private tryBegin(event: IncomingEvent): void {
86
+ if (this.currentState !== State.UNDETERMINED) {
87
+ return;
88
+ }
89
+
90
+ this.previousTime = Date.now();
91
+ this.startTime = this.previousTime;
92
+
93
+ this.begin();
94
+
95
+ this.startX = event.x;
96
+ this.startY = event.y;
97
+ }
98
+
99
+ private tryActivate(): void {
100
+ if (this.minDurationMs > 0) {
101
+ if (this.activationTimeout) {
102
+ clearTimeout(this.activationTimeout)
103
+ }
104
+ this.activationTimeout = setTimeout(() => {
105
+ this.activate();
106
+ }, this.minDurationMs);
107
+ } else if (this.minDurationMs === 0) {
108
+ this.activate();
109
+ }
110
+ }
111
+
112
+ private checkDistanceFail(event: IncomingEvent): void {
113
+ const dx = event.x - this.startX;
114
+ const dy = event.y - this.startY;
115
+ const distSq = dx * dx + dy * dy;
116
+
117
+ if (distSq <= this.maxDistSq) {
118
+ return;
119
+ }
120
+
121
+ if (this.currentState === State.ACTIVE) {
122
+ this.cancel();
123
+ } else {
124
+ this.fail();
125
+ }
126
+ }
127
+ }
@@ -0,0 +1,42 @@
1
+ import { GestureHandler, GestureHandlerDependencies, IncomingEvent } from '../core';
2
+
3
+ export class ManualGestureHandler extends GestureHandler {
4
+ constructor(deps: GestureHandlerDependencies) {
5
+ super({...deps, logger: deps.logger.cloneWithPrefix("ManualGestureHandler")})
6
+ }
7
+
8
+ public getDefaultConfig() {
9
+ return {}
10
+ }
11
+
12
+ public onPointerDown(event: IncomingEvent): void {
13
+ this.tracker.addToTracker(event);
14
+ super.onPointerDown(event);
15
+ this.begin();
16
+ }
17
+
18
+ public onAdditionalPointerAdd(event: IncomingEvent): void {
19
+ this.tracker.addToTracker(event);
20
+ super.onAdditionalPointerAdd(event);
21
+ }
22
+
23
+ public onPointerMove(event: IncomingEvent): void {
24
+ this.tracker.track(event);
25
+ super.onPointerMove(event);
26
+ }
27
+
28
+ public onPointerOutOfBounds(event: IncomingEvent): void {
29
+ this.tracker.track(event);
30
+ super.onPointerOutOfBounds(event);
31
+ }
32
+
33
+ public onPointerUp(event: IncomingEvent): void {
34
+ super.onPointerUp(event);
35
+ this.tracker.removeFromTracker(event.pointerId);
36
+ }
37
+
38
+ public onAdditionalPointerRemove(event: IncomingEvent): void {
39
+ super.onAdditionalPointerRemove(event);
40
+ this.tracker.removeFromTracker(event.pointerId);
41
+ }
42
+ }
@@ -1,7 +1,5 @@
1
- import { GestureHandler, GestureHandlerDependencies, DEFAULT_TOUCH_SLOP } from "./GestureHandler"
2
- import { Vector2D } from './Vector2D';
3
- import { State } from "./State"
4
- import { AdaptedEvent } from './Event';
1
+ import { GestureHandler, GestureHandlerDependencies, DEFAULT_TOUCH_SLOP, Vector2D, State, IncomingEvent } from "../core"
2
+
5
3
 
6
4
  export class NativeViewGestureHandler extends GestureHandler {
7
5
  private minDistSq = DEFAULT_TOUCH_SLOP * DEFAULT_TOUCH_SLOP;
@@ -20,7 +18,7 @@ export class NativeViewGestureHandler extends GestureHandler {
20
18
  return {}
21
19
  }
22
20
 
23
- public onPointerDown(e: AdaptedEvent) {
21
+ public onPointerDown(e: IncomingEvent) {
24
22
  this.tracker.addToTracker(e);
25
23
  super.onPointerDown(e);
26
24
  this.onNewPointer();
@@ -34,13 +32,13 @@ export class NativeViewGestureHandler extends GestureHandler {
34
32
  this.activate();
35
33
  }
36
34
 
37
- public onAdditionalPointerAdd(e: AdaptedEvent) {
35
+ public onAdditionalPointerAdd(e: IncomingEvent) {
38
36
  this.tracker.addToTracker(e);
39
37
  super.onPointerDown(e);
40
38
  this.onNewPointer();
41
39
  }
42
40
 
43
- public onPointerMove(e: AdaptedEvent): void {
41
+ public onPointerMove(e: IncomingEvent): void {
44
42
  this.tracker.track(e);
45
43
  const {x: dx, y: dy} = this.startPos.clone().subtract(this.tracker.getLastAvgPos()).value
46
44
  const distSq = dx * dx + dy * dy;
@@ -61,12 +59,12 @@ export class NativeViewGestureHandler extends GestureHandler {
61
59
  }
62
60
  }
63
61
 
64
- public onPointerUp(event: AdaptedEvent): void {
62
+ public onPointerUp(event: IncomingEvent): void {
65
63
  super.onPointerUp(event);
66
64
  this.onAnyPointerUp(event);
67
65
  }
68
66
 
69
- private onAnyPointerUp(e: AdaptedEvent) {
67
+ private onAnyPointerUp(e: IncomingEvent) {
70
68
  this.tracker.removeFromTracker(e.pointerId);
71
69
  if (this.tracker.getTrackedPointersCount() === 0) {
72
70
  if (this.currentState === State.ACTIVE) {
@@ -77,7 +75,7 @@ export class NativeViewGestureHandler extends GestureHandler {
77
75
  }
78
76
  }
79
77
 
80
- public onAdditionalPointerRemove(e: AdaptedEvent) {
78
+ public onAdditionalPointerRemove(e: IncomingEvent) {
81
79
  super.onAdditionalPointerRemove(e)
82
80
  this.onAnyPointerUp(e)
83
81
  }
@@ -97,14 +95,14 @@ export class NativeViewGestureHandler extends GestureHandler {
97
95
  if (
98
96
  this.currentState === State.ACTIVE &&
99
97
  handler.getState() === State.ACTIVE &&
100
- this.canBeInterrupted()
98
+ this.canBeInterrupted()
101
99
  ) {
102
100
  return false;
103
101
  }
104
102
 
105
103
  return (
106
104
  this.currentState === State.ACTIVE &&
107
- this.canBeInterrupted() &&
105
+ this.canBeInterrupted() &&
108
106
  handler.getTag() > 0
109
107
  );
110
108
  }
@@ -1,7 +1,14 @@
1
- import { GestureHandler, GestureConfig, GestureHandlerDependencies, DEFAULT_TOUCH_SLOP } from "./GestureHandler"
2
- import { AdaptedEvent } from "./Event"
3
- import { State } from "./State"
4
- import { Vector2D } from "./Vector2D"
1
+ import {
2
+ GestureHandler,
3
+ GestureConfig,
4
+ GestureHandlerDependencies,
5
+ DEFAULT_TOUCH_SLOP,
6
+ IncomingEvent,
7
+ State,
8
+ Vector2D,
9
+ getStateName
10
+ } from "../core"
11
+
5
12
 
6
13
  const DEFAULT_MIN_DIST_SQ = DEFAULT_TOUCH_SLOP * DEFAULT_TOUCH_SLOP;
7
14
 
@@ -82,6 +89,7 @@ export class PanGestureHandler extends GestureHandler<PanGestureHandlerConfig> {
82
89
  }
83
90
 
84
91
  private unlockScrolls: (() => void) | undefined
92
+ private unlockRNGestureResponder: (() => void) | undefined
85
93
 
86
94
  public constructor(deps: GestureHandlerDependencies) {
87
95
  super({ ...deps, logger: deps.logger.cloneWithPrefix("PanGestureHandler") })
@@ -174,9 +182,10 @@ export class PanGestureHandler extends GestureHandler<PanGestureHandlerConfig> {
174
182
  clearTimeout(this.activationTimeout);
175
183
  }
176
184
 
177
- private tryBegin(e: AdaptedEvent): void {
185
+ private tryBegin(e: IncomingEvent): void {
186
+ this.logger.cloneWithPrefix("tryBegin").debug({currentState: getStateName(this.currentState), trackedPointersCount: this.tracker.getTrackedPointersCount(), minPointers: this.minPointers})
178
187
  if (
179
- this.currentState === State.UNDETERMINED &&
188
+ (this.currentState === State.UNDETERMINED) &&
180
189
  this.tracker.getTrackedPointersCount() >= this.minPointers
181
190
  ) {
182
191
  this.resetProgress();
@@ -233,7 +242,7 @@ export class PanGestureHandler extends GestureHandler<PanGestureHandlerConfig> {
233
242
  return false
234
243
  }
235
244
 
236
- public onAdditionalPointerAdd(event: AdaptedEvent): void {
245
+ public onAdditionalPointerAdd(event: IncomingEvent): void {
237
246
  this.tracker.addToTracker(event);
238
247
  super.onAdditionalPointerAdd(event);
239
248
  this.tryBegin(event);
@@ -251,7 +260,7 @@ export class PanGestureHandler extends GestureHandler<PanGestureHandlerConfig> {
251
260
  }
252
261
  }
253
262
 
254
- public onPointerUp(event: AdaptedEvent): void {
263
+ public onPointerUp(event: IncomingEvent): void {
255
264
  super.onPointerUp(event);
256
265
  if (this.currentState === State.ACTIVE) {
257
266
  this.lastPos = this.tracker.getLastAvgPos();
@@ -265,7 +274,7 @@ export class PanGestureHandler extends GestureHandler<PanGestureHandlerConfig> {
265
274
  }
266
275
  }
267
276
 
268
- public onAdditionalPointerRemove(event: AdaptedEvent): void {
277
+ public onAdditionalPointerRemove(event: IncomingEvent): void {
269
278
  super.onAdditionalPointerRemove(event);
270
279
  this.tracker.removeFromTracker(event.pointerId);
271
280
  this.offset.add(this.lastPos).subtract(this.startPos)
@@ -281,7 +290,7 @@ export class PanGestureHandler extends GestureHandler<PanGestureHandlerConfig> {
281
290
  }
282
291
  }
283
292
 
284
- public onPointerMove(event: AdaptedEvent): void {
293
+ public onPointerMove(event: IncomingEvent): void {
285
294
  this.tracker.track(event);
286
295
  this.lastPos = this.tracker.getLastAvgPos()
287
296
  this.velocity = this.tracker.getVelocity(event.pointerId)
@@ -289,7 +298,7 @@ export class PanGestureHandler extends GestureHandler<PanGestureHandlerConfig> {
289
298
  super.onPointerMove(event);
290
299
  }
291
300
 
292
- public onPointerOutOfBounds(event: AdaptedEvent): void {
301
+ public onPointerOutOfBounds(event: IncomingEvent): void {
293
302
  if (this.shouldCancelWhenOutside) {
294
303
  return;
295
304
  }
@@ -317,12 +326,17 @@ export class PanGestureHandler extends GestureHandler<PanGestureHandlerConfig> {
317
326
  };
318
327
  }
319
328
 
320
- protected stateDidChange(newState: State, oldState: State) {
321
- super.stateDidChange(newState, oldState)
329
+ protected onStateChange(newState: State, oldState: State) {
330
+ super.onStateChange(newState, oldState)
322
331
  if (newState === State.BEGAN) {
323
332
  this.unlockScrolls = this.scrollLocker.lockScrollContainingViewTag(this.view.getTag())
324
333
  } else if (newState !== State.ACTIVE) {
325
334
  this.unlockScrolls?.()
326
335
  }
336
+ if (newState === State.ACTIVE) {
337
+ this.unlockRNGestureResponder = this.rnGestureResponder.lock(this.view.getTag())
338
+ } else {
339
+ this.unlockRNGestureResponder?.()
340
+ }
327
341
  }
328
342
  }