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

Sign up to get free protection for your applications and to get access to all the features.
Files changed (97) hide show
  1. package/DrawerLayout/index.ts +2 -0
  2. package/Swipeable/index.ts +2 -0
  3. package/harmony/gesture_handler.har +0 -0
  4. package/lib/commonjs/RNGestureHandlerModule.js.map +1 -1
  5. package/lib/commonjs/components/GestureHandlerRootView.js.map +1 -1
  6. package/lib/commonjs/handlers/createHandler.js.map +1 -1
  7. package/lib/commonjs/index.js +91 -137
  8. package/lib/commonjs/index.js.map +1 -1
  9. package/lib/commonjs/specs/NativeRNGestureHandlerModule.js.map +1 -1
  10. package/lib/commonjs/specs/RNGestureHandlerButtonNativeComponent.js.map +1 -1
  11. package/lib/commonjs/specs/RNGestureHandlerRootViewNativeComponent.js.map +1 -1
  12. package/lib/module/RNGestureHandlerModule.js.map +1 -1
  13. package/lib/module/components/GestureHandlerRootView.js.map +1 -1
  14. package/lib/module/handlers/createHandler.js.map +1 -1
  15. package/lib/module/index.js +10 -141
  16. package/lib/module/index.js.map +1 -1
  17. package/lib/module/specs/NativeRNGestureHandlerModule.js.map +1 -1
  18. package/lib/module/specs/RNGestureHandlerButtonNativeComponent.js.map +1 -1
  19. package/lib/module/specs/RNGestureHandlerRootViewNativeComponent.js.map +1 -1
  20. package/lib/typescript/RNGestureHandlerModule.d.ts +2 -2
  21. package/lib/typescript/components/GestureHandlerRootView.d.ts +6 -6
  22. package/lib/typescript/handlers/createHandler.d.ts +11 -11
  23. package/lib/typescript/index.d.ts +42 -9
  24. package/lib/typescript/index.d.ts.map +1 -1
  25. package/lib/typescript/specs/NativeRNGestureHandlerModule.d.ts +14 -14
  26. package/lib/typescript/specs/RNGestureHandlerButtonNativeComponent.d.ts +14 -14
  27. package/lib/typescript/specs/RNGestureHandlerRootViewNativeComponent.d.ts +6 -6
  28. package/package.json +69 -66
  29. package/src/RNGestureHandlerModule.ts +4 -4
  30. package/src/components/GestureHandlerRootView.tsx +23 -23
  31. package/src/handlers/createHandler.tsx +534 -534
  32. package/src/index.ts +172 -172
  33. package/src/specs/NativeRNGestureHandlerModule.ts +26 -26
  34. package/src/specs/RNGestureHandlerButtonNativeComponent.ts +18 -18
  35. package/src/specs/RNGestureHandlerRootViewNativeComponent.ts +6 -6
  36. package/harmony/gesture_handler/BuildProfile.ets +0 -5
  37. package/harmony/gesture_handler/build-profile.json5 +0 -19
  38. package/harmony/gesture_handler/hvigorfile.ts +0 -2
  39. package/harmony/gesture_handler/index.ets +0 -3
  40. package/harmony/gesture_handler/oh-package-lock.json5 +0 -17
  41. package/harmony/gesture_handler/oh-package.json5 +0 -12
  42. package/harmony/gesture_handler/src/main/cpp/CMakeLists.txt +0 -8
  43. package/harmony/gesture_handler/src/main/cpp/GestureHandlerPackage.cpp +0 -103
  44. package/harmony/gesture_handler/src/main/cpp/GestureHandlerPackage.h +0 -21
  45. package/harmony/gesture_handler/src/main/cpp/RNGestureHandlerButtonComponentDescriptor.h +0 -36
  46. package/harmony/gesture_handler/src/main/cpp/RNGestureHandlerButtonComponentInstance.h +0 -27
  47. package/harmony/gesture_handler/src/main/cpp/RNGestureHandlerButtonJSIBinder.h +0 -32
  48. package/harmony/gesture_handler/src/main/cpp/RNGestureHandlerModule.cpp +0 -22
  49. package/harmony/gesture_handler/src/main/cpp/RNGestureHandlerModule.h +0 -15
  50. package/harmony/gesture_handler/src/main/cpp/RNGestureHandlerPackage.h +0 -72
  51. package/harmony/gesture_handler/src/main/cpp/RNGestureHandlerRootViewComponentDescriptor.h +0 -36
  52. package/harmony/gesture_handler/src/main/cpp/RNGestureHandlerRootViewComponentInstance.h +0 -78
  53. package/harmony/gesture_handler/src/main/cpp/RNGestureHandlerRootViewJSIBinder.h +0 -25
  54. package/harmony/gesture_handler/src/main/ets/CircularBuffer.ts +0 -42
  55. package/harmony/gesture_handler/src/main/ets/Event.ts +0 -68
  56. package/harmony/gesture_handler/src/main/ets/EventDispatcher.ts +0 -53
  57. package/harmony/gesture_handler/src/main/ets/GestureHandler.ts +0 -663
  58. package/harmony/gesture_handler/src/main/ets/GestureHandlerArkUIAdapter.ts +0 -203
  59. package/harmony/gesture_handler/src/main/ets/GestureHandlerFactory.ts +0 -45
  60. package/harmony/gesture_handler/src/main/ets/GestureHandlerOrchestrator.ts +0 -280
  61. package/harmony/gesture_handler/src/main/ets/GestureHandlerPackage.ts +0 -22
  62. package/harmony/gesture_handler/src/main/ets/GestureHandlerRegistry.ts +0 -28
  63. package/harmony/gesture_handler/src/main/ets/InteractionManager.ts +0 -109
  64. package/harmony/gesture_handler/src/main/ets/LeastSquareSolver.ts +0 -182
  65. package/harmony/gesture_handler/src/main/ets/NativeViewGestureHandler.ts +0 -115
  66. package/harmony/gesture_handler/src/main/ets/OutgoingEvent.ts +0 -34
  67. package/harmony/gesture_handler/src/main/ets/PanGestureHandler.ts +0 -328
  68. package/harmony/gesture_handler/src/main/ets/PointerTracker.ts +0 -239
  69. package/harmony/gesture_handler/src/main/ets/RNGHError.ts +0 -5
  70. package/harmony/gesture_handler/src/main/ets/RNGHLogger.ts +0 -48
  71. package/harmony/gesture_handler/src/main/ets/RNGHRootTouchHandlerArkTS.ts +0 -60
  72. package/harmony/gesture_handler/src/main/ets/RNGHRootTouchHandlerCAPI.ts +0 -87
  73. package/harmony/gesture_handler/src/main/ets/RNGestureHandlerButton.ets +0 -38
  74. package/harmony/gesture_handler/src/main/ets/RNGestureHandlerModule.ts +0 -183
  75. package/harmony/gesture_handler/src/main/ets/RNGestureHandlerRootView.ets +0 -53
  76. package/harmony/gesture_handler/src/main/ets/RNOHScrollLocker.ts +0 -23
  77. package/harmony/gesture_handler/src/main/ets/State.ts +0 -47
  78. package/harmony/gesture_handler/src/main/ets/TapGestureHandler.ts +0 -206
  79. package/harmony/gesture_handler/src/main/ets/Vector2D.ts +0 -36
  80. package/harmony/gesture_handler/src/main/ets/VelocityTracker.ts +0 -98
  81. package/harmony/gesture_handler/src/main/ets/View.ts +0 -71
  82. package/harmony/gesture_handler/src/main/ets/ViewRegistry.ts +0 -43
  83. package/harmony/gesture_handler/src/main/ets/namespace/RNGestureHandlerButton.ts +0 -140
  84. package/harmony/gesture_handler/src/main/ets/namespace/RNGestureHandlerModule.ts +0 -25
  85. package/harmony/gesture_handler/src/main/ets/namespace/RNGestureHandlerRootView.ts +0 -101
  86. package/harmony/gesture_handler/src/main/ets/namespace/ts.ts +0 -3
  87. package/harmony/gesture_handler/src/main/ets/pages/Index.ets +0 -17
  88. package/harmony/gesture_handler/src/main/ets/types.ts +0 -25
  89. package/harmony/gesture_handler/src/main/ets/webviewability/WebviewAbility.ts +0 -41
  90. package/harmony/gesture_handler/src/main/module.json5 +0 -7
  91. package/harmony/gesture_handler/src/main/resources/base/element/color.json +0 -8
  92. package/harmony/gesture_handler/src/main/resources/base/element/string.json +0 -16
  93. package/harmony/gesture_handler/src/main/resources/base/media/icon.png +0 -0
  94. package/harmony/gesture_handler/src/main/resources/base/profile/main_pages.json +0 -5
  95. package/harmony/gesture_handler/src/main/resources/en_US/element/string.json +0 -16
  96. package/harmony/gesture_handler/src/main/resources/zh_CN/element/string.json +0 -16
  97. package/harmony/gesture_handler/ts.ts +0 -2
@@ -1,53 +0,0 @@
1
- import { RNOHContext, RNViewBase, ComponentBuilderContext, RNComponentFactory, Tag } from "@rnoh/react-native-openharmony"
2
- import { RNGestureHandlerRootView as RNC } from "./namespace/RNGestureHandlerRootView"
3
- import { RNGHRootTouchHandlerArkTS as RNGHRootTouchHandler } from "./RNGHRootTouchHandlerArkTS"
4
- import { RNGestureHandlerModule } from "./RNGestureHandlerModule"
5
-
6
-
7
- export type RNGestureHandlerRootViewDescriptor = RNC.Descriptor
8
-
9
- @Component
10
- export struct RNGestureHandlerRootView {
11
- static readonly NAME = RNC.NAME
12
- ctx!: RNOHContext
13
- tag: number = -1
14
- @BuilderParam buildCustomComponent: (componentBuilderContext: ComponentBuilderContext) => void
15
- @State descriptor: RNGestureHandlerRootViewDescriptor = {} as RNGestureHandlerRootViewDescriptor
16
- private unsubscribes: (() => void)[] = []
17
- private touchHandler: RNGHRootTouchHandler | undefined = undefined
18
-
19
- aboutToAppear() {
20
- const rnGestureHandlerModule = this.ctx.rnInstance.getTurboModule<RNGestureHandlerModule>(RNGestureHandlerModule.NAME)
21
- const rootTag = this.ctx.descriptorRegistry.getDescriptorLineage(this.tag)[0].tag
22
- this.touchHandler = new RNGHRootTouchHandler(rootTag, rnGestureHandlerModule.getViewRegistry(), rnGestureHandlerModule.getGestureHandlerRegistry(), rnGestureHandlerModule.getLogger())
23
- this.handleDescriptorChange(this.ctx.descriptorRegistry.getDescriptor<RNGestureHandlerRootViewDescriptor>(this.tag))
24
- this.unsubscribes.push(this.ctx.descriptorRegistry.subscribeToDescriptorChanges(this.tag, (d) => {
25
- this.handleDescriptorChange(d as RNGestureHandlerRootViewDescriptor)
26
- }))
27
- }
28
-
29
- aboutToDisappear() {
30
- this.unsubscribes.forEach(unsubscribe => unsubscribe())
31
- }
32
-
33
- handleDescriptorChange(newDescriptor: RNGestureHandlerRootViewDescriptor) {
34
- this.descriptor = newDescriptor
35
- }
36
-
37
- build() {
38
- RNViewBase({ ctx: this.ctx, tag: this.tag }) {
39
- ForEach(this.descriptor.childrenTags, (childrenTag: Tag) => {
40
- RNComponentFactory({ ctx: this.ctx, tag: childrenTag, buildCustomComponent: this.buildCustomComponent })
41
- })
42
- Stack() {
43
- }
44
- .width("100%")
45
- .height("100%")
46
- .onTouch((e) => {
47
- this.touchHandler?.handleTouch(e)
48
- })
49
- .hitTestBehavior(HitTestMode.Transparent)
50
-
51
- }
52
- }
53
- }
@@ -1,23 +0,0 @@
1
- import { RNInstance } from "@rnoh/react-native-openharmony/ts"
2
- import { ScrollLocker } from "./GestureHandler"
3
-
4
- export class RNOHScrollLockerArkTS implements ScrollLocker {
5
- constructor(private rnInstance: RNInstance) {
6
- }
7
-
8
- lockScrollContainingViewTag(viewTag: number) {
9
- return this.rnInstance.blockComponentsGestures(viewTag)
10
- }
11
- }
12
-
13
- export class RNOHScrollLockerCAPI implements ScrollLocker {
14
- constructor(private rnInstance: RNInstance) {
15
- }
16
-
17
- lockScrollContainingViewTag(viewTag: number) {
18
- this.rnInstance.postMessageToCpp("RNGH::SET_NATIVE_RESPONDERS_BLOCK", { targetTag: viewTag, shouldBlock: true });
19
- return () => {
20
- this.rnInstance.postMessageToCpp("RNGH::SET_NATIVE_RESPONDERS_BLOCK", { targetTag: viewTag, shouldBlock: false });
21
- }
22
- }
23
- }
@@ -1,47 +0,0 @@
1
- export enum State {
2
- /** This is the initial state of each handler and it goes into this state after it's done recognizing a gesture. */
3
- UNDETERMINED,
4
-
5
- /** A handler received some touches but for some reason didn't recognize them. For example, if a finger travels more
6
- * distance than a defined maxDist property allows, then the handler won't become active but will fail instead.
7
- * Afterwards, it's state will be reset to UNDETERMINED. */
8
- FAILED,
9
-
10
- /** Handler has started receiving touch stream but hasn't yet received enough data to either fail or activate. */
11
- BEGAN,
12
-
13
- /** The gesture recognizer has received a signal (possibly new touches or a command from the touch system controller)
14
- * resulting in the cancellation of a continuous gesture. The gesture's state will become CANCELLED until it is
15
- * finally reset to the initial state, UNDETERMINED. */
16
- CANCELLED,
17
-
18
- /** Handler has recognized a gesture. It will become and stay in the ACTIVE state until the gesture finishes
19
- * (e.g. when user lifts the finger) or gets cancelled by the touch system. Under normal circumstances the state will
20
- * then turn into END. In the case that a gesture is cancelled by the touch system, its state would then become
21
- * CANCELLED. Learn about discrete and continuous handlers here to understand how long a handler can be kept in the
22
- * ACTIVE state.
23
- * */
24
- ACTIVE,
25
-
26
- /** The gesture recognizer has received touches signalling the end of a gesture. Its state will become END until it is
27
- * reset to UNDETERMINED.
28
- * */
29
- END,
30
- }
31
-
32
- export function getStateName(state: State): string {
33
- switch (state) {
34
- case State.UNDETERMINED:
35
- return "UNDETERMINED"
36
- case State.FAILED:
37
- return "FAILED"
38
- case State.BEGAN:
39
- return "BEGAN"
40
- case State.CANCELLED:
41
- return "CANCELLED"
42
- case State.ACTIVE:
43
- return "ACTIVE"
44
- case State.END:
45
- return "END"
46
- }
47
- }
@@ -1,206 +0,0 @@
1
- import { GestureHandler, GestureHandlerDependencies } from "./GestureHandler"
2
- import { AdaptedEvent, EventType } from "./Event"
3
- import { State, getStateName } from "./State"
4
-
5
- const DEFAULT_MAX_DURATION_MS = 500;
6
- const DEFAULT_NUMBER_OF_TAPS = 1;
7
- const DEFAULT_MAX_DELAY_MS = 500;
8
-
9
- export class TapGestureHandler extends GestureHandler {
10
- private startX = 0;
11
- private startY = 0;
12
- private offsetX = 0;
13
- private offsetY = 0;
14
- private lastX = 0;
15
- private lastY = 0;
16
- private maxNumberOfPointersSoFar = 0;
17
- private numberOfTapsSoFar: number = 0;
18
- private waitTimeout: number | undefined;
19
- private delayTimeout: number | undefined;
20
-
21
- constructor(deps: GestureHandlerDependencies) {
22
- super({...deps, logger: deps.logger.cloneWithPrefix("TapGestureHandler")})
23
- }
24
-
25
- onPointerDown(event) {
26
- this.tracker.addToTracker(event);
27
- super.onPointerDown(event);
28
- this.trySettingPosition(event);
29
- this.lastX = event.x;
30
- this.lastY = event.y;
31
- this.updateState(event);
32
- }
33
-
34
- onAdditionalPointerAdd(event: AdaptedEvent): void {
35
- super.onAdditionalPointerAdd(event);
36
- this.tracker.addToTracker(event);
37
- this.trySettingPosition(event);
38
-
39
- this.offsetX += this.lastX - this.startX;
40
- this.offsetY += this.lastY - this.startY;
41
-
42
- this.lastX = this.tracker.getLastAvgX();
43
- this.lastY = this.tracker.getLastAvgY();
44
-
45
- this.startX = this.tracker.getLastAvgX();
46
- this.startY = this.tracker.getLastAvgY();
47
-
48
- this.updateState(event);
49
- }
50
-
51
- onPointerUp(event: AdaptedEvent): void {
52
- super.onPointerUp(event);
53
- this.lastX = this.tracker.getLastAvgX();
54
- this.lastY = this.tracker.getLastAvgY();
55
-
56
- this.tracker.removeFromTracker(event.pointerId);
57
-
58
- this.updateState(event);
59
- }
60
-
61
- onAdditionalPointerRemove(event: AdaptedEvent): void {
62
- super.onAdditionalPointerRemove(event);
63
- this.tracker.removeFromTracker(event.pointerId);
64
-
65
- this.offsetX += this.lastX - this.startX;
66
- this.offsetY += this.lastY = this.startY;
67
-
68
- this.lastX = this.tracker.getLastAvgX();
69
- this.lastY = this.tracker.getLastAvgY();
70
-
71
- this.startX = this.lastX;
72
- this.startY = this.lastY;
73
-
74
- this.updateState(event);
75
- }
76
-
77
- onPointerMove(event: AdaptedEvent): void {
78
- this.trySettingPosition(event);
79
- this.tracker.track(event);
80
-
81
- this.lastX = this.tracker.getLastAvgX();
82
- this.lastY = this.tracker.getLastAvgY();
83
-
84
- this.updateState(event);
85
-
86
- super.onPointerMove(event);
87
- }
88
-
89
- onPointerOutOfBounds(event: AdaptedEvent): void {
90
- this.trySettingPosition(event);
91
- this.tracker.track(event);
92
-
93
- this.lastX = this.tracker.getLastAvgX();
94
- this.lastY = this.tracker.getLastAvgY();
95
-
96
- this.updateState(event);
97
-
98
- super.onPointerOutOfBounds(event);
99
- }
100
-
101
- getDefaultConfig() {
102
- return {}
103
- }
104
-
105
- private trySettingPosition(event: AdaptedEvent): void {
106
- if (this.currentState !== State.UNDETERMINED) return;
107
- this.offsetX = 0;
108
- this.offsetY = 0;
109
- this.startX = event.x;
110
- this.startY = event.y;
111
- }
112
-
113
- private updateState(event: AdaptedEvent): void {
114
- const logger = this.logger.cloneWithPrefix("updateState")
115
- if (this.maxNumberOfPointersSoFar < this.tracker.getTrackedPointersCount()) {
116
- this.maxNumberOfPointersSoFar = this.tracker.getTrackedPointersCount()
117
- }
118
- if (this.shouldFail()) {
119
- logger.info("fail")
120
- this.fail()
121
- return;
122
- }
123
- switch (this.currentState) {
124
- case State.UNDETERMINED:
125
- if (event.eventType === EventType.DOWN) {
126
- this.begin()
127
- }
128
- this.startTap();
129
- break;
130
- case State.BEGAN:
131
- if (event.eventType === EventType.UP) {
132
- logger.info("endTap")
133
- this.endTap();
134
- }
135
- if (event.eventType === EventType.DOWN) {
136
- this.startTap();
137
- }
138
- break;
139
- default:
140
- logger.info(`default case - currentState ${getStateName(this.currentState)}`)
141
- break;
142
- }
143
- }
144
-
145
- private shouldFail(): boolean {
146
- const maxDeltaX = this.config.maxDeltaX ?? Number.MIN_SAFE_INTEGER
147
- const maxDeltaY = this.config.maxDeltaY ?? Number.MIN_SAFE_INTEGER
148
- const maxDistSq = this.config.maxDistSq ?? Number.MIN_SAFE_INTEGER
149
-
150
- const dx = this.lastX - this.startX + this.offsetX;
151
- if (
152
- maxDeltaX !== Number.MIN_SAFE_INTEGER &&
153
- Math.abs(dx) > maxDeltaX
154
- ) {
155
- return true;
156
- }
157
- const dy = this.lastY - this.startY + this.offsetY;
158
- if (
159
- maxDeltaY !== Number.MIN_SAFE_INTEGER &&
160
- Math.abs(dy) > maxDeltaY
161
- ) {
162
- return true;
163
- }
164
- const distSq = dy * dy + dx * dx;
165
- const result = maxDistSq !== Number.MIN_SAFE_INTEGER && distSq > maxDistSq
166
- return result;
167
- }
168
-
169
- private startTap() {
170
- this.clearTimeouts();
171
- this.waitTimeout = setTimeout(() => this.fail(), this.config.maxDurationMs ?? DEFAULT_MAX_DURATION_MS);
172
- }
173
-
174
- private clearTimeouts() {
175
- clearTimeout(this.waitTimeout);
176
- clearTimeout(this.delayTimeout);
177
- }
178
-
179
- private endTap() {
180
- this.clearTimeouts();
181
- if (
182
- ++this.numberOfTapsSoFar === (this.config.numberOfTaps ?? DEFAULT_NUMBER_OF_TAPS) &&
183
- this.maxNumberOfPointersSoFar >= (this.config.minNumberOfPointers ?? 0)
184
- ) {
185
- this.activate();
186
- } else {
187
- this.delayTimeout = setTimeout(() => this.fail(), this.config.maxDelayMs ?? DEFAULT_MAX_DELAY_MS);
188
- }
189
- }
190
-
191
- public activate(): void {
192
- super.activate();
193
- this.end();
194
- }
195
-
196
- protected onCancel() {
197
- super.onCancel()
198
- this.resetProgress()
199
- }
200
-
201
- protected resetProgress(): void {
202
- this.clearTimeouts();
203
- this.numberOfTapsSoFar = 0;
204
- this.maxNumberOfPointersSoFar = 0;
205
- }
206
- }
@@ -1,36 +0,0 @@
1
- export class Vector2D {
2
- constructor(
3
- private val: {
4
- x: number;
5
- y: number;
6
- } = {x: 0, y: 0},
7
- ) {}
8
-
9
- get x() {
10
- return this.val.x;
11
- }
12
-
13
- get y() {
14
- return this.val.y;
15
- }
16
-
17
- get value() {
18
- return {...this.val};
19
- }
20
-
21
- public clone() {
22
- return new Vector2D({...this.val});
23
- }
24
-
25
- public subtract(vec: Vector2D) {
26
- this.val.x -= vec.x;
27
- this.val.y -= vec.y;
28
- return this;
29
- }
30
-
31
- public add(vec: Vector2D) {
32
- this.val.x += vec.x;
33
- this.val.y += vec.y;
34
- return this;
35
- }
36
- }
@@ -1,98 +0,0 @@
1
- import { AdaptedEvent } from './Event';
2
- import { CircularBuffer } from './CircularBuffer';
3
- import { LeastSquareSolver } from './LeastSquareSolver';
4
-
5
- export default class VelocityTracker {
6
- private assumePointerMoveStoppedMilliseconds = 40;
7
- private historySize = 20;
8
- private horizonMilliseconds = 300;
9
- private minSampleSize = 3;
10
-
11
- private samples: CircularBuffer<AdaptedEvent>;
12
-
13
- constructor() {
14
- this.samples = new CircularBuffer<AdaptedEvent>(this.historySize);
15
- }
16
-
17
- public add(event: AdaptedEvent): void {
18
- this.samples.push(event);
19
- }
20
-
21
- /// Returns an estimate of the velocity of the object being tracked by the
22
- /// tracker given the current information available to the tracker.
23
- ///
24
- /// Information is added using [addPosition].
25
- ///
26
- /// Returns null if there is no data on which to base an estimate.
27
- private getVelocityEstimate(): [number, number] | null {
28
- const x = [];
29
- const y = [];
30
- const w = [];
31
- const time = [];
32
-
33
- let sampleCount = 0;
34
- let index = this.samples.size - 1;
35
- const newestSample = this.samples.get(index);
36
- if (!newestSample) {
37
- return null;
38
- }
39
-
40
- let previousSample = newestSample;
41
-
42
- // Starting with the most recent PointAtTime sample, iterate backwards while
43
- // the samples represent continuous motion.
44
- while (sampleCount < this.samples.size) {
45
- const sample = this.samples.get(index);
46
-
47
- const age = newestSample.time - sample.time;
48
- const delta = Math.abs(sample.time - previousSample.time);
49
- previousSample = sample;
50
-
51
- if (
52
- age > this.horizonMilliseconds ||
53
- delta > this.assumePointerMoveStoppedMilliseconds
54
- ) {
55
- break;
56
- }
57
-
58
- x.push(sample.x);
59
- y.push(sample.y);
60
- w.push(1);
61
- time.push(-age);
62
-
63
- sampleCount++;
64
- index--;
65
- }
66
-
67
- if (sampleCount >= this.minSampleSize) {
68
- const xSolver = new LeastSquareSolver(time, x, w);
69
- const xFit = xSolver.solve(2);
70
-
71
- if (xFit !== null) {
72
- const ySolver = new LeastSquareSolver(time, y, w);
73
- const yFit = ySolver.solve(2);
74
-
75
- if (yFit !== null) {
76
- const xVelocity = xFit.coefficients[1] * 1000;
77
- const yVelocity = yFit.coefficients[1] * 1000;
78
-
79
- return [xVelocity, yVelocity];
80
- }
81
- }
82
- }
83
-
84
- return null;
85
- }
86
-
87
- public getVelocity(): [number, number] {
88
- const estimate = this.getVelocityEstimate();
89
- if (estimate !== null) {
90
- return estimate;
91
- }
92
- return [0, 0];
93
- }
94
-
95
- public reset(): void {
96
- this.samples.clear();
97
- }
98
- }
@@ -1,71 +0,0 @@
1
- import { DescriptorRegistry, Descriptor, Tag } from "@rnoh/react-native-openharmony/ts"
2
- import { Vector2D } from "./Vector2D"
3
-
4
- export type BoundingBox = {
5
- x: number,
6
- y: number,
7
- width: number,
8
- height: number
9
- }
10
-
11
- export class View {
12
- constructor(private descriptorRegistry: DescriptorRegistry, private viewTag: number) {
13
- }
14
-
15
- public getChildren() {
16
- return this.getDescriptor().childrenTags.map(childrenTag => {
17
- return new View(this.descriptorRegistry, childrenTag)
18
- })
19
- }
20
-
21
- public getTag(): Tag {
22
- return this.viewTag
23
- }
24
-
25
- public isPositionInBounds({x, y}: {
26
- x: number,
27
- y: number
28
- }): boolean {
29
- const rect = this.getBoundingRect()
30
- return x >= rect.x && x <= (rect.x + rect.width) && y >= rect.y && y <= (rect.y + rect.height);
31
- }
32
-
33
- public getBoundingRect(): BoundingBox {
34
- const d = this.getDescriptor()
35
- if (!d) {
36
- return { x: 0, y: 0, width: 0, height: 0 }
37
- }
38
- const offsetToAbsolutePosition = this.getOffsetToAbsolutePosition()
39
- return {
40
- x: d.layoutMetrics.frame.origin.x - offsetToAbsolutePosition.x,
41
- y: d.layoutMetrics.frame.origin.y - offsetToAbsolutePosition.y,
42
- width: d.layoutMetrics.frame.size.width,
43
- height: d.layoutMetrics.frame.size.height
44
- }
45
- }
46
-
47
- private getDescriptor() {
48
- return this.descriptorRegistry.getDescriptor(this.viewTag)
49
- }
50
-
51
-
52
- private getOffsetToAbsolutePosition(): Vector2D {
53
- const currentOffset = new Vector2D()
54
- let parentTag = this.getDescriptor()?.parentTag
55
- while (parentTag !== undefined) {
56
- const d = this.descriptorRegistry.getDescriptor(parentTag)
57
- currentOffset.add(this.extractScrollOffsetFromDescriptor(d))
58
- currentOffset.subtract(new Vector2D(d.layoutMetrics.frame.origin))
59
- parentTag = d.parentTag
60
- }
61
- return currentOffset
62
- }
63
-
64
- private extractScrollOffsetFromDescriptor(descriptor: Descriptor<any>) {
65
- if (descriptor.type !== "ScrollView") {
66
- return new Vector2D();
67
- }
68
- const scrollViewState: any = descriptor.state;
69
- return new Vector2D({ x: scrollViewState.contentOffsetX, y: scrollViewState.contentOffsetY })
70
- }
71
- }
@@ -1,43 +0,0 @@
1
- import { DescriptorRegistry, ComponentManagerRegistry, Tag } from "@rnoh/react-native-openharmony/ts"
2
- import { View } from "./View"
3
-
4
- export class ViewRegistry {
5
- constructor(private descriptorRegistry: DescriptorRegistry, private componentManagerRegistry: ComponentManagerRegistry) {
6
- }
7
-
8
- public getViewByTag(viewTag: Tag) {
9
- return this.createView(viewTag)
10
- }
11
-
12
- private createView(tag: Tag): View {
13
- return new View(this.descriptorRegistry, tag)
14
- }
15
-
16
- public getTouchableViewsAt(pos: {
17
- x: number,
18
- y: number
19
- }, rootTag: Tag): View[] {
20
- const rootView = this.createView(rootTag)
21
- const results: View[] = []
22
- for (const view of this.getTouchableViewsAtPosInView(pos, rootView)) {
23
- results.push(view)
24
- }
25
- return results
26
- }
27
-
28
- private getTouchableViewsAtPosInView(pos: {
29
- x: number,
30
- y: number
31
- }, view: View) {
32
- if (!view.isPositionInBounds(pos))
33
- return [];
34
- const results: View[] = []
35
- results.push(view)
36
- for (const child of view.getChildren()) {
37
- for (const result of this.getTouchableViewsAtPosInView(pos, child)) {
38
- results.push(result)
39
- }
40
- }
41
- return results
42
- }
43
- }