@react-native-oh-tpl/react-native-gesture-handler 2.12.9 → 2.14.1

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 (104) 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 +2 -3
  5. package/lib/commonjs/RNGestureHandlerModule.js.map +1 -1
  6. package/lib/commonjs/components/GestureHandlerRootView.js +3 -3
  7. package/lib/commonjs/components/GestureHandlerRootView.js.map +1 -1
  8. package/lib/commonjs/handlers/createHandler.js +15 -18
  9. package/lib/commonjs/handlers/createHandler.js.map +1 -1
  10. package/lib/commonjs/index.js +94 -137
  11. package/lib/commonjs/index.js.map +1 -1
  12. package/lib/commonjs/specs/NativeRNGestureHandlerModule.js +1 -2
  13. package/lib/commonjs/specs/NativeRNGestureHandlerModule.js.map +1 -1
  14. package/lib/commonjs/specs/RNGestureHandlerButtonNativeComponent.js +2 -3
  15. package/lib/commonjs/specs/RNGestureHandlerButtonNativeComponent.js.map +1 -1
  16. package/lib/commonjs/specs/RNGestureHandlerRootViewNativeComponent.js +2 -3
  17. package/lib/commonjs/specs/RNGestureHandlerRootViewNativeComponent.js.map +1 -1
  18. package/lib/module/RNGestureHandlerModule.js.map +1 -1
  19. package/lib/module/components/GestureHandlerRootView.js.map +1 -1
  20. package/lib/module/handlers/createHandler.js +12 -15
  21. package/lib/module/handlers/createHandler.js.map +1 -1
  22. package/lib/module/index.js +10 -141
  23. package/lib/module/index.js.map +1 -1
  24. package/lib/module/specs/NativeRNGestureHandlerModule.js.map +1 -1
  25. package/lib/module/specs/RNGestureHandlerButtonNativeComponent.js.map +1 -1
  26. package/lib/module/specs/RNGestureHandlerRootViewNativeComponent.js.map +1 -1
  27. package/lib/typescript/RNGestureHandlerModule.d.ts +2 -2
  28. package/lib/typescript/components/GestureHandlerRootView.d.ts +6 -6
  29. package/lib/typescript/handlers/createHandler.d.ts +11 -11
  30. package/lib/typescript/index.d.ts +42 -9
  31. package/lib/typescript/index.d.ts.map +1 -1
  32. package/lib/typescript/specs/NativeRNGestureHandlerModule.d.ts +14 -14
  33. package/lib/typescript/specs/RNGestureHandlerButtonNativeComponent.d.ts +14 -14
  34. package/lib/typescript/specs/RNGestureHandlerRootViewNativeComponent.d.ts +6 -6
  35. package/package.json +74 -66
  36. package/src/RNGestureHandlerModule.ts +4 -4
  37. package/src/components/GestureHandlerRootView.tsx +23 -23
  38. package/src/handlers/createHandler.tsx +534 -534
  39. package/src/index.ts +172 -172
  40. package/src/specs/NativeRNGestureHandlerModule.ts +26 -26
  41. package/src/specs/RNGestureHandlerButtonNativeComponent.ts +18 -18
  42. package/src/specs/RNGestureHandlerRootViewNativeComponent.ts +6 -6
  43. package/harmony/gesture_handler/BuildProfile.ets +0 -5
  44. package/harmony/gesture_handler/build-profile.json5 +0 -19
  45. package/harmony/gesture_handler/hvigorfile.ts +0 -2
  46. package/harmony/gesture_handler/index.ets +0 -3
  47. package/harmony/gesture_handler/oh-package-lock.json5 +0 -17
  48. package/harmony/gesture_handler/oh-package.json5 +0 -12
  49. package/harmony/gesture_handler/src/main/cpp/CMakeLists.txt +0 -8
  50. package/harmony/gesture_handler/src/main/cpp/GestureHandlerPackage.cpp +0 -103
  51. package/harmony/gesture_handler/src/main/cpp/GestureHandlerPackage.h +0 -21
  52. package/harmony/gesture_handler/src/main/cpp/RNGestureHandlerButtonComponentDescriptor.h +0 -36
  53. package/harmony/gesture_handler/src/main/cpp/RNGestureHandlerButtonComponentInstance.h +0 -27
  54. package/harmony/gesture_handler/src/main/cpp/RNGestureHandlerButtonJSIBinder.h +0 -32
  55. package/harmony/gesture_handler/src/main/cpp/RNGestureHandlerModule.cpp +0 -22
  56. package/harmony/gesture_handler/src/main/cpp/RNGestureHandlerModule.h +0 -15
  57. package/harmony/gesture_handler/src/main/cpp/RNGestureHandlerPackage.h +0 -72
  58. package/harmony/gesture_handler/src/main/cpp/RNGestureHandlerRootViewComponentDescriptor.h +0 -36
  59. package/harmony/gesture_handler/src/main/cpp/RNGestureHandlerRootViewComponentInstance.h +0 -78
  60. package/harmony/gesture_handler/src/main/cpp/RNGestureHandlerRootViewJSIBinder.h +0 -25
  61. package/harmony/gesture_handler/src/main/ets/CircularBuffer.ts +0 -42
  62. package/harmony/gesture_handler/src/main/ets/Event.ts +0 -68
  63. package/harmony/gesture_handler/src/main/ets/EventDispatcher.ts +0 -53
  64. package/harmony/gesture_handler/src/main/ets/GestureHandler.ts +0 -663
  65. package/harmony/gesture_handler/src/main/ets/GestureHandlerArkUIAdapter.ts +0 -203
  66. package/harmony/gesture_handler/src/main/ets/GestureHandlerFactory.ts +0 -45
  67. package/harmony/gesture_handler/src/main/ets/GestureHandlerOrchestrator.ts +0 -280
  68. package/harmony/gesture_handler/src/main/ets/GestureHandlerPackage.ts +0 -22
  69. package/harmony/gesture_handler/src/main/ets/GestureHandlerRegistry.ts +0 -28
  70. package/harmony/gesture_handler/src/main/ets/InteractionManager.ts +0 -109
  71. package/harmony/gesture_handler/src/main/ets/LeastSquareSolver.ts +0 -182
  72. package/harmony/gesture_handler/src/main/ets/NativeViewGestureHandler.ts +0 -115
  73. package/harmony/gesture_handler/src/main/ets/OutgoingEvent.ts +0 -34
  74. package/harmony/gesture_handler/src/main/ets/PanGestureHandler.ts +0 -328
  75. package/harmony/gesture_handler/src/main/ets/PointerTracker.ts +0 -239
  76. package/harmony/gesture_handler/src/main/ets/RNGHError.ts +0 -5
  77. package/harmony/gesture_handler/src/main/ets/RNGHLogger.ts +0 -48
  78. package/harmony/gesture_handler/src/main/ets/RNGHRootTouchHandlerArkTS.ts +0 -60
  79. package/harmony/gesture_handler/src/main/ets/RNGHRootTouchHandlerCAPI.ts +0 -87
  80. package/harmony/gesture_handler/src/main/ets/RNGestureHandlerButton.ets +0 -38
  81. package/harmony/gesture_handler/src/main/ets/RNGestureHandlerModule.ts +0 -183
  82. package/harmony/gesture_handler/src/main/ets/RNGestureHandlerRootView.ets +0 -53
  83. package/harmony/gesture_handler/src/main/ets/RNOHScrollLocker.ts +0 -23
  84. package/harmony/gesture_handler/src/main/ets/State.ts +0 -47
  85. package/harmony/gesture_handler/src/main/ets/TapGestureHandler.ts +0 -206
  86. package/harmony/gesture_handler/src/main/ets/Vector2D.ts +0 -36
  87. package/harmony/gesture_handler/src/main/ets/VelocityTracker.ts +0 -98
  88. package/harmony/gesture_handler/src/main/ets/View.ts +0 -71
  89. package/harmony/gesture_handler/src/main/ets/ViewRegistry.ts +0 -43
  90. package/harmony/gesture_handler/src/main/ets/namespace/RNGestureHandlerButton.ts +0 -140
  91. package/harmony/gesture_handler/src/main/ets/namespace/RNGestureHandlerModule.ts +0 -25
  92. package/harmony/gesture_handler/src/main/ets/namespace/RNGestureHandlerRootView.ts +0 -101
  93. package/harmony/gesture_handler/src/main/ets/namespace/ts.ts +0 -3
  94. package/harmony/gesture_handler/src/main/ets/pages/Index.ets +0 -17
  95. package/harmony/gesture_handler/src/main/ets/types.ts +0 -25
  96. package/harmony/gesture_handler/src/main/ets/webviewability/WebviewAbility.ts +0 -41
  97. package/harmony/gesture_handler/src/main/module.json5 +0 -7
  98. package/harmony/gesture_handler/src/main/resources/base/element/color.json +0 -8
  99. package/harmony/gesture_handler/src/main/resources/base/element/string.json +0 -16
  100. package/harmony/gesture_handler/src/main/resources/base/media/icon.png +0 -0
  101. package/harmony/gesture_handler/src/main/resources/base/profile/main_pages.json +0 -5
  102. package/harmony/gesture_handler/src/main/resources/en_US/element/string.json +0 -16
  103. package/harmony/gesture_handler/src/main/resources/zh_CN/element/string.json +0 -16
  104. 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
- }