react-native-gesture-handler 2.9.0 → 2.10.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.
- package/README.md +1 -0
- package/RNGestureHandler.podspec +1 -1
- package/android/build.gradle +69 -29
- package/android/src/main/java/com/swmansion/gesturehandler/core/GestureHandler.kt +1 -1
- package/android/src/main/java/com/swmansion/gesturehandler/core/GestureHandlerOrchestrator.kt +2 -0
- package/android/src/main/java/com/swmansion/gesturehandler/core/NativeViewGestureHandler.kt +39 -0
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerButtonViewManager.kt +8 -2
- package/ios/Handlers/RNNativeViewHandler.mm +4 -4
- package/ios/RNGestureHandlerButtonComponentView.h +2 -2
- package/ios/RNGestureHandlerButtonComponentView.mm +2 -2
- package/ios/RNGestureHandlerManager.mm +65 -16
- package/ios/RNGestureHandlerModule.mm +20 -16
- package/ios/RNGestureHandlerRootViewComponentView.mm +2 -2
- package/ios/RNRootViewGestureRecognizer.m +3 -3
- package/lib/commonjs/EnableNewWebImplementation.js +35 -0
- package/lib/commonjs/EnableNewWebImplementation.js.map +1 -0
- package/lib/commonjs/GestureHandlerRootViewContext.js +15 -0
- package/lib/commonjs/GestureHandlerRootViewContext.js.map +1 -0
- package/lib/commonjs/RNGestureHandlerModule.macos.js +6 -6
- package/lib/commonjs/RNGestureHandlerModule.macos.js.map +1 -1
- package/lib/commonjs/RNGestureHandlerModule.web.js +6 -6
- package/lib/commonjs/RNGestureHandlerModule.web.js.map +1 -1
- package/lib/commonjs/RNGestureHandlerModule.windows.js +6 -6
- package/lib/commonjs/RNGestureHandlerModule.windows.js.map +1 -1
- package/lib/commonjs/components/GestureComponents.web.js +6 -5
- package/lib/commonjs/components/GestureComponents.web.js.map +1 -1
- package/lib/commonjs/components/GestureHandlerButton.js +3 -5
- package/lib/commonjs/components/GestureHandlerButton.js.map +1 -1
- package/lib/commonjs/{GestureHandlerRootView.android.js → components/GestureHandlerRootView.android.js} +8 -7
- package/lib/commonjs/components/GestureHandlerRootView.android.js.map +1 -0
- package/lib/commonjs/{GestureHandlerRootView.js → components/GestureHandlerRootView.js} +8 -2
- package/lib/commonjs/components/GestureHandlerRootView.js.map +1 -0
- package/lib/commonjs/{GestureHandlerRootView.web.js → components/GestureHandlerRootView.web.js} +7 -1
- package/lib/commonjs/components/GestureHandlerRootView.web.js.map +1 -0
- package/lib/commonjs/components/Swipeable.js +17 -3
- package/lib/commonjs/components/Swipeable.js.map +1 -1
- package/lib/commonjs/{gestureHandlerRootHOC.js.map → components/gestureHandlerRootHOC.js.map} +1 -1
- package/lib/commonjs/handlers/createHandler.js +21 -13
- package/lib/commonjs/handlers/createHandler.js.map +1 -1
- package/lib/commonjs/handlers/gestureHandlerCommon.js +5 -4
- package/lib/commonjs/handlers/gestureHandlerCommon.js.map +1 -1
- package/lib/commonjs/handlers/gestures/GestureDetector.js +19 -9
- package/lib/commonjs/handlers/gestures/GestureDetector.js.map +1 -1
- package/lib/commonjs/handlers/gestures/reanimatedWrapper.js +22 -19
- package/lib/commonjs/handlers/gestures/reanimatedWrapper.js.map +1 -1
- package/lib/commonjs/index.js +16 -4
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/utils.js +0 -6
- package/lib/commonjs/utils.js.map +1 -1
- package/lib/commonjs/web/handlers/FlingGestureHandler.js +0 -5
- package/lib/commonjs/web/handlers/FlingGestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/GestureHandler.js +3 -0
- package/lib/commonjs/web/handlers/GestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/ManualGestureHandler.js +0 -5
- package/lib/commonjs/web/handlers/ManualGestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/NativeViewGestureHandler.js +0 -6
- package/lib/commonjs/web/handlers/NativeViewGestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/PanGestureHandler.js +2 -12
- package/lib/commonjs/web/handlers/PanGestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/PinchGestureHandler.js +0 -5
- package/lib/commonjs/web/handlers/PinchGestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/RotationGestureHandler.js +0 -6
- package/lib/commonjs/web/handlers/RotationGestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/TapGestureHandler.js +0 -6
- package/lib/commonjs/web/handlers/TapGestureHandler.js.map +1 -1
- package/lib/commonjs/web/tools/CircularBuffer.js +59 -0
- package/lib/commonjs/web/tools/CircularBuffer.js.map +1 -0
- package/lib/commonjs/web/tools/LeastSquareSolver.js +204 -0
- package/lib/commonjs/web/tools/LeastSquareSolver.js.map +1 -0
- package/lib/commonjs/web/tools/PointerEventManager.js +27 -0
- package/lib/commonjs/web/tools/PointerEventManager.js.map +1 -1
- package/lib/commonjs/web/tools/PointerTracker.js +11 -7
- package/lib/commonjs/web/tools/PointerTracker.js.map +1 -1
- package/lib/commonjs/web/tools/VelocityTracker.js +111 -0
- package/lib/commonjs/web/tools/VelocityTracker.js.map +1 -0
- package/lib/commonjs/web_hammer/GestureHandler.js +1 -1
- package/lib/commonjs/web_hammer/GestureHandler.js.map +1 -1
- package/lib/module/EnableNewWebImplementation.js +22 -0
- package/lib/module/EnableNewWebImplementation.js.map +1 -0
- package/lib/module/GestureHandlerRootViewContext.js +3 -0
- package/lib/module/GestureHandlerRootViewContext.js.map +1 -0
- package/lib/module/RNGestureHandlerModule.macos.js +6 -6
- package/lib/module/RNGestureHandlerModule.macos.js.map +1 -1
- package/lib/module/RNGestureHandlerModule.web.js +6 -6
- package/lib/module/RNGestureHandlerModule.web.js.map +1 -1
- package/lib/module/RNGestureHandlerModule.windows.js +6 -6
- package/lib/module/RNGestureHandlerModule.windows.js.map +1 -1
- package/lib/module/components/GestureComponents.web.js +5 -6
- package/lib/module/components/GestureComponents.web.js.map +1 -1
- package/lib/module/components/GestureHandlerButton.js +1 -4
- package/lib/module/components/GestureHandlerButton.js.map +1 -1
- package/lib/module/components/GestureHandlerRootView.android.js +14 -0
- package/lib/module/components/GestureHandlerRootView.android.js.map +1 -0
- package/lib/module/{GestureHandlerRootView.js → components/GestureHandlerRootView.js} +5 -2
- package/lib/module/components/GestureHandlerRootView.js.map +1 -0
- package/lib/module/components/GestureHandlerRootView.web.js +9 -0
- package/lib/module/components/GestureHandlerRootView.web.js.map +1 -0
- package/lib/module/components/Swipeable.js +17 -3
- package/lib/module/components/Swipeable.js.map +1 -1
- package/lib/module/{gestureHandlerRootHOC.js.map → components/gestureHandlerRootHOC.js.map} +1 -1
- package/lib/module/handlers/createHandler.js +20 -13
- package/lib/module/handlers/createHandler.js.map +1 -1
- package/lib/module/handlers/gestureHandlerCommon.js +5 -4
- package/lib/module/handlers/gestureHandlerCommon.js.map +1 -1
- package/lib/module/handlers/gestures/GestureDetector.js +18 -10
- package/lib/module/handlers/gestures/GestureDetector.js.map +1 -1
- package/lib/module/handlers/gestures/reanimatedWrapper.js +19 -16
- package/lib/module/handlers/gestures/reanimatedWrapper.js.map +1 -1
- package/lib/module/index.js +4 -4
- package/lib/module/index.js.map +1 -1
- package/lib/module/utils.js +0 -4
- package/lib/module/utils.js.map +1 -1
- package/lib/module/web/handlers/FlingGestureHandler.js +0 -5
- package/lib/module/web/handlers/FlingGestureHandler.js.map +1 -1
- package/lib/module/web/handlers/GestureHandler.js +3 -0
- package/lib/module/web/handlers/GestureHandler.js.map +1 -1
- package/lib/module/web/handlers/ManualGestureHandler.js +0 -5
- package/lib/module/web/handlers/ManualGestureHandler.js.map +1 -1
- package/lib/module/web/handlers/NativeViewGestureHandler.js +0 -6
- package/lib/module/web/handlers/NativeViewGestureHandler.js.map +1 -1
- package/lib/module/web/handlers/PanGestureHandler.js +2 -9
- package/lib/module/web/handlers/PanGestureHandler.js.map +1 -1
- package/lib/module/web/handlers/PinchGestureHandler.js +0 -5
- package/lib/module/web/handlers/PinchGestureHandler.js.map +1 -1
- package/lib/module/web/handlers/RotationGestureHandler.js +0 -6
- package/lib/module/web/handlers/RotationGestureHandler.js.map +1 -1
- package/lib/module/web/handlers/TapGestureHandler.js +0 -6
- package/lib/module/web/handlers/TapGestureHandler.js.map +1 -1
- package/lib/module/web/tools/CircularBuffer.js +50 -0
- package/lib/module/web/tools/CircularBuffer.js.map +1 -0
- package/lib/module/web/tools/LeastSquareSolver.js +195 -0
- package/lib/module/web/tools/LeastSquareSolver.js.map +1 -0
- package/lib/module/web/tools/PointerEventManager.js +27 -0
- package/lib/module/web/tools/PointerEventManager.js.map +1 -1
- package/lib/module/web/tools/PointerTracker.js +8 -7
- package/lib/module/web/tools/PointerTracker.js.map +1 -1
- package/lib/module/web/tools/VelocityTracker.js +98 -0
- package/lib/module/web/tools/VelocityTracker.js.map +1 -0
- package/lib/module/web_hammer/GestureHandler.js +1 -1
- package/lib/module/web_hammer/GestureHandler.js.map +1 -1
- package/lib/typescript/EnableNewWebImplementation.d.ts +3 -0
- package/lib/typescript/GestureHandlerRootViewContext.d.ts +3 -0
- package/lib/typescript/components/GestureComponents.web.d.ts +1 -1
- package/lib/typescript/components/Swipeable.d.ts +12 -1
- package/lib/typescript/{gestureHandlerRootHOC.d.ts → components/gestureHandlerRootHOC.d.ts} +1 -1
- package/lib/typescript/index.d.ts +4 -4
- package/lib/typescript/utils.d.ts +0 -1
- package/lib/typescript/web/handlers/FlingGestureHandler.d.ts +0 -1
- package/lib/typescript/web/handlers/ManualGestureHandler.d.ts +0 -1
- package/lib/typescript/web/handlers/NativeViewGestureHandler.d.ts +0 -1
- package/lib/typescript/web/handlers/PanGestureHandler.d.ts +0 -1
- package/lib/typescript/web/handlers/PinchGestureHandler.d.ts +0 -1
- package/lib/typescript/web/handlers/RotationGestureHandler.d.ts +0 -1
- package/lib/typescript/web/handlers/TapGestureHandler.d.ts +0 -1
- package/lib/typescript/web/tools/CircularBuffer.d.ts +11 -0
- package/lib/typescript/web/tools/LeastSquareSolver.d.ts +12 -0
- package/lib/typescript/web/tools/PointerEventManager.d.ts +2 -0
- package/lib/typescript/web/tools/PointerTracker.d.ts +1 -0
- package/lib/typescript/web/tools/VelocityTracker.d.ts +13 -0
- package/package.json +3 -3
- package/src/EnableNewWebImplementation.ts +35 -0
- package/src/GestureHandlerRootViewContext.ts +3 -0
- package/src/RNGestureHandlerModule.macos.ts +6 -6
- package/src/RNGestureHandlerModule.web.ts +6 -6
- package/src/RNGestureHandlerModule.windows.ts +6 -6
- package/src/components/GestureComponents.web.tsx +5 -6
- package/src/components/GestureHandlerButton.tsx +2 -7
- package/src/components/GestureHandlerRootView.android.tsx +24 -0
- package/src/{GestureHandlerRootView.tsx → components/GestureHandlerRootView.tsx} +7 -2
- package/src/{GestureHandlerRootView.web.tsx → components/GestureHandlerRootView.web.tsx} +6 -1
- package/src/components/Swipeable.tsx +30 -4
- package/src/{gestureHandlerRootHOC.tsx → components/gestureHandlerRootHOC.tsx} +1 -1
- package/src/handlers/createHandler.tsx +20 -9
- package/src/handlers/gestureHandlerCommon.ts +5 -6
- package/src/handlers/gestures/GestureDetector.tsx +19 -9
- package/src/handlers/gestures/reanimatedWrapper.ts +21 -20
- package/src/index.ts +7 -3
- package/src/utils.ts +0 -5
- package/src/web/handlers/FlingGestureHandler.ts +0 -5
- package/src/web/handlers/GestureHandler.ts +3 -0
- package/src/web/handlers/ManualGestureHandler.ts +0 -5
- package/src/web/handlers/NativeViewGestureHandler.ts +0 -6
- package/src/web/handlers/PanGestureHandler.ts +2 -9
- package/src/web/handlers/PinchGestureHandler.ts +0 -5
- package/src/web/handlers/RotationGestureHandler.ts +0 -7
- package/src/web/handlers/TapGestureHandler.ts +0 -6
- package/src/web/tools/CircularBuffer.ts +42 -0
- package/src/web/tools/LeastSquareSolver.ts +182 -0
- package/src/web/tools/PointerEventManager.ts +29 -0
- package/src/web/tools/PointerTracker.ts +7 -7
- package/src/web/tools/VelocityTracker.ts +98 -0
- package/src/web_hammer/GestureHandler.ts +1 -1
- package/lib/commonjs/EnableExperimentalWebImplementation.js +0 -31
- package/lib/commonjs/EnableExperimentalWebImplementation.js.map +0 -1
- package/lib/commonjs/GestureHandlerRootView.android.js.map +0 -1
- package/lib/commonjs/GestureHandlerRootView.js.map +0 -1
- package/lib/commonjs/GestureHandlerRootView.web.js.map +0 -1
- package/lib/module/EnableExperimentalWebImplementation.js +0 -20
- package/lib/module/EnableExperimentalWebImplementation.js.map +0 -1
- package/lib/module/GestureHandlerRootView.android.js +0 -14
- package/lib/module/GestureHandlerRootView.android.js.map +0 -1
- package/lib/module/GestureHandlerRootView.js.map +0 -1
- package/lib/module/GestureHandlerRootView.web.js +0 -6
- package/lib/module/GestureHandlerRootView.web.js.map +0 -1
- package/lib/typescript/EnableExperimentalWebImplementation.d.ts +0 -2
- package/src/EnableExperimentalWebImplementation.ts +0 -27
- package/src/GestureHandlerRootView.android.tsx +0 -24
- /package/lib/commonjs/{gestureHandlerRootHOC.js → components/gestureHandlerRootHOC.js} +0 -0
- /package/lib/commonjs/{fabric → specs}/RNGestureHandlerButtonNativeComponent.js +0 -0
- /package/lib/commonjs/{fabric → specs}/RNGestureHandlerButtonNativeComponent.js.map +0 -0
- /package/lib/commonjs/{fabric → specs}/RNGestureHandlerRootViewNativeComponent.js +0 -0
- /package/lib/commonjs/{fabric → specs}/RNGestureHandlerRootViewNativeComponent.js.map +0 -0
- /package/lib/module/{gestureHandlerRootHOC.js → components/gestureHandlerRootHOC.js} +0 -0
- /package/lib/module/{fabric → specs}/RNGestureHandlerButtonNativeComponent.js +0 -0
- /package/lib/module/{fabric → specs}/RNGestureHandlerButtonNativeComponent.js.map +0 -0
- /package/lib/module/{fabric → specs}/RNGestureHandlerRootViewNativeComponent.js +0 -0
- /package/lib/module/{fabric → specs}/RNGestureHandlerRootViewNativeComponent.js.map +0 -0
- /package/lib/typescript/{GestureHandlerRootView.android.d.ts → components/GestureHandlerRootView.android.d.ts} +0 -0
- /package/lib/typescript/{GestureHandlerRootView.d.ts → components/GestureHandlerRootView.d.ts} +0 -0
- /package/lib/typescript/{GestureHandlerRootView.web.d.ts → components/GestureHandlerRootView.web.d.ts} +0 -0
- /package/lib/typescript/{fabric → specs}/RNGestureHandlerButtonNativeComponent.d.ts +0 -0
- /package/lib/typescript/{fabric → specs}/RNGestureHandlerRootViewNativeComponent.d.ts +0 -0
- /package/src/{fabric → specs}/RNGestureHandlerButtonNativeComponent.ts +0 -0
- /package/src/{fabric → specs}/RNGestureHandlerRootViewNativeComponent.ts +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import React, { useEffect, useRef, useState } from 'react';
|
|
1
|
+
import React, { useContext, useEffect, useRef, useState } from 'react';
|
|
2
2
|
import {
|
|
3
3
|
GestureType,
|
|
4
4
|
HandlerCallbacks,
|
|
@@ -42,7 +42,9 @@ import { Platform } from 'react-native';
|
|
|
42
42
|
import type RNGestureHandlerModuleWeb from '../../RNGestureHandlerModule.web';
|
|
43
43
|
import { onGestureHandlerEvent } from './eventReceiver';
|
|
44
44
|
import { RNRenderer } from '../../RNRenderer';
|
|
45
|
-
import {
|
|
45
|
+
import { isNewWebImplementationEnabled } from '../../EnableNewWebImplementation';
|
|
46
|
+
import { nativeViewGestureHandlerProps } from '../NativeViewGestureHandler';
|
|
47
|
+
import GestureHandlerRootViewContext from '../../GestureHandlerRootViewContext';
|
|
46
48
|
|
|
47
49
|
declare const global: {
|
|
48
50
|
isFormsStackingContext: (node: unknown) => boolean | null; // JSI function
|
|
@@ -56,6 +58,7 @@ const ALLOWED_PROPS = [
|
|
|
56
58
|
...longPressGestureHandlerProps,
|
|
57
59
|
...forceTouchGestureHandlerProps,
|
|
58
60
|
...flingGestureHandlerProps,
|
|
61
|
+
...nativeViewGestureHandlerProps,
|
|
59
62
|
];
|
|
60
63
|
|
|
61
64
|
export type GestureConfigReference = {
|
|
@@ -147,9 +150,9 @@ function attachHandlers({
|
|
|
147
150
|
preparedGesture.firstExecution = false;
|
|
148
151
|
}
|
|
149
152
|
|
|
150
|
-
// use
|
|
153
|
+
// use queueMicrotask to extract handlerTags, because all refs should be initialized
|
|
151
154
|
// when it's ran
|
|
152
|
-
|
|
155
|
+
queueMicrotask(() => {
|
|
153
156
|
if (!mountedRef.current) {
|
|
154
157
|
return;
|
|
155
158
|
}
|
|
@@ -167,9 +170,9 @@ function attachHandlers({
|
|
|
167
170
|
registerHandler(handler.handlerTag, handler, handler.config.testId);
|
|
168
171
|
}
|
|
169
172
|
|
|
170
|
-
// use
|
|
173
|
+
// use queueMicrotask to extract handlerTags, because all refs should be initialized
|
|
171
174
|
// when it's ran
|
|
172
|
-
|
|
175
|
+
queueMicrotask(() => {
|
|
173
176
|
if (!mountedRef.current) {
|
|
174
177
|
return;
|
|
175
178
|
}
|
|
@@ -254,10 +257,10 @@ function updateHandlers(
|
|
|
254
257
|
}
|
|
255
258
|
}
|
|
256
259
|
|
|
257
|
-
// use
|
|
260
|
+
// use queueMicrotask to extract handlerTags, because when it's ran, all refs should be updated
|
|
258
261
|
// and handlerTags in BaseGesture references should be updated in the loop above (we need to wait
|
|
259
262
|
// in case of external relations)
|
|
260
|
-
|
|
263
|
+
queueMicrotask(() => {
|
|
261
264
|
if (!mountedRef.current) {
|
|
262
265
|
return;
|
|
263
266
|
}
|
|
@@ -603,6 +606,13 @@ interface GestureDetectorState {
|
|
|
603
606
|
forceReattach: boolean;
|
|
604
607
|
}
|
|
605
608
|
export const GestureDetector = (props: GestureDetectorProps) => {
|
|
609
|
+
const rootViewContext = useContext(GestureHandlerRootViewContext);
|
|
610
|
+
if (__DEV__ && !rootViewContext) {
|
|
611
|
+
throw new Error(
|
|
612
|
+
'GestureDetector must be used as a descendant of GestureHandlerRootView. Otherwise the gestures will not be recognized. See https://docs.swmansion.com/react-native-gesture-handler/docs/installation for more details.'
|
|
613
|
+
);
|
|
614
|
+
}
|
|
615
|
+
|
|
606
616
|
const gestureConfig = props.gesture;
|
|
607
617
|
|
|
608
618
|
if (props.userSelect) {
|
|
@@ -624,7 +634,7 @@ export const GestureDetector = (props: GestureDetectorProps) => {
|
|
|
624
634
|
onGestureHandlerEvent: (e: HandlerStateChangeEvent<unknown>) => {
|
|
625
635
|
onGestureHandlerEvent(e.nativeEvent);
|
|
626
636
|
},
|
|
627
|
-
onGestureHandlerStateChange:
|
|
637
|
+
onGestureHandlerStateChange: isNewWebImplementationEnabled()
|
|
628
638
|
? (e: HandlerStateChangeEvent<unknown>) => {
|
|
629
639
|
onGestureHandlerEvent(e.nativeEvent);
|
|
630
640
|
}
|
|
@@ -29,27 +29,28 @@ let Reanimated: {
|
|
|
29
29
|
|
|
30
30
|
try {
|
|
31
31
|
Reanimated = require('react-native-reanimated');
|
|
32
|
+
} catch (e) {
|
|
33
|
+
// When 'react-native-reanimated' is not available we want to quietly continue
|
|
34
|
+
// @ts-ignore TS demands the variable to be initialized
|
|
35
|
+
Reanimated = undefined;
|
|
36
|
+
}
|
|
32
37
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
}
|
|
38
|
+
if (!Reanimated?.useSharedValue) {
|
|
39
|
+
// @ts-ignore Make sure the loaded module is actually Reanimated, if it's not
|
|
40
|
+
// reset the module to undefined so we can fallback to the default implementation
|
|
41
|
+
Reanimated = undefined;
|
|
42
|
+
}
|
|
39
43
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
)
|
|
48
|
-
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
// quietly continue
|
|
52
|
-
// eslint-disable-next-line no-empty
|
|
53
|
-
} catch (e) {}
|
|
44
|
+
if (Reanimated !== undefined && !Reanimated.setGestureState) {
|
|
45
|
+
// The loaded module is Reanimated but it doesn't have the setGestureState defined
|
|
46
|
+
Reanimated.setGestureState = () => {
|
|
47
|
+
'worklet';
|
|
48
|
+
console.warn(
|
|
49
|
+
tagMessage(
|
|
50
|
+
'Please use newer version of react-native-reanimated in order to control state of the gestures.'
|
|
51
|
+
)
|
|
52
|
+
);
|
|
53
|
+
};
|
|
54
|
+
}
|
|
54
55
|
|
|
55
56
|
export { Reanimated };
|
package/src/index.ts
CHANGED
|
@@ -2,8 +2,8 @@ import { initialize } from './init';
|
|
|
2
2
|
|
|
3
3
|
export { Directions } from './Directions';
|
|
4
4
|
export { State } from './State';
|
|
5
|
-
export { default as gestureHandlerRootHOC } from './gestureHandlerRootHOC';
|
|
6
|
-
export { default as GestureHandlerRootView } from './GestureHandlerRootView';
|
|
5
|
+
export { default as gestureHandlerRootHOC } from './components/gestureHandlerRootHOC';
|
|
6
|
+
export { default as GestureHandlerRootView } from './components/GestureHandlerRootView';
|
|
7
7
|
export type {
|
|
8
8
|
// event types
|
|
9
9
|
GestureEvent,
|
|
@@ -92,6 +92,7 @@ export {
|
|
|
92
92
|
BaseButton,
|
|
93
93
|
RectButton,
|
|
94
94
|
BorderlessButton,
|
|
95
|
+
PureNativeButton,
|
|
95
96
|
} from './components/GestureButtons';
|
|
96
97
|
export {
|
|
97
98
|
TouchableHighlight,
|
|
@@ -157,6 +158,9 @@ export type {
|
|
|
157
158
|
} from './components/DrawerLayout';
|
|
158
159
|
export { default as DrawerLayout } from './components/DrawerLayout';
|
|
159
160
|
|
|
160
|
-
export {
|
|
161
|
+
export {
|
|
162
|
+
enableExperimentalWebImplementation,
|
|
163
|
+
enableLegacyWebImplementation,
|
|
164
|
+
} from './EnableNewWebImplementation';
|
|
161
165
|
|
|
162
166
|
initialize();
|
package/src/utils.ts
CHANGED
|
@@ -55,11 +55,6 @@ export function isFabric(): boolean {
|
|
|
55
55
|
return !!global?.nativeFabricUIManager;
|
|
56
56
|
}
|
|
57
57
|
|
|
58
|
-
export function shouldUseCodegenNativeComponent(): boolean {
|
|
59
|
-
// use codegenNativeComponent starting with RN 0.68
|
|
60
|
-
return REACT_NATIVE_VERSION.minor >= 68 || REACT_NATIVE_VERSION.major > 0;
|
|
61
|
-
}
|
|
62
|
-
|
|
63
58
|
export function isRemoteDebuggingEnabled(): boolean {
|
|
64
59
|
// react-native-reanimated checks if in remote debugging in the same way
|
|
65
60
|
// @ts-ignore global is available but node types are not included
|
|
@@ -159,11 +159,6 @@ export default class FlingGestureHandler extends GestureHandler {
|
|
|
159
159
|
this.endFling();
|
|
160
160
|
}
|
|
161
161
|
|
|
162
|
-
protected onPointerCancel(event: AdaptedEvent): void {
|
|
163
|
-
super.onPointerCancel(event);
|
|
164
|
-
this.reset();
|
|
165
|
-
}
|
|
166
|
-
|
|
167
162
|
public activate(force?: boolean): void {
|
|
168
163
|
super.activate(force);
|
|
169
164
|
this.end();
|
|
@@ -352,6 +352,9 @@ export default abstract class GestureHandler {
|
|
|
352
352
|
if (this.config.needsPointerData) {
|
|
353
353
|
this.sendTouchEvent(event);
|
|
354
354
|
}
|
|
355
|
+
|
|
356
|
+
this.cancel();
|
|
357
|
+
this.reset();
|
|
355
358
|
}
|
|
356
359
|
protected onPointerOutOfBounds(event: AdaptedEvent): void {
|
|
357
360
|
this.tryToSendMoveEvent(true);
|
|
@@ -40,9 +40,4 @@ export default class ManualGestureHandler extends GestureHandler {
|
|
|
40
40
|
super.onPointerRemove(event);
|
|
41
41
|
this.tracker.removeFromTracker(event.pointerId);
|
|
42
42
|
}
|
|
43
|
-
|
|
44
|
-
protected onPointerCancel(event: AdaptedEvent): void {
|
|
45
|
-
super.onPointerCancel(event);
|
|
46
|
-
this.reset();
|
|
47
|
-
}
|
|
48
43
|
}
|
|
@@ -115,12 +115,6 @@ export default class NativeViewGestureHandler extends GestureHandler {
|
|
|
115
115
|
}
|
|
116
116
|
}
|
|
117
117
|
|
|
118
|
-
protected onPointerCancel(event: AdaptedEvent): void {
|
|
119
|
-
super.onPointerCancel(event);
|
|
120
|
-
this.cancel();
|
|
121
|
-
this.reset();
|
|
122
|
-
}
|
|
123
|
-
|
|
124
118
|
public shouldRecognizeSimultaneously(handler: GestureHandler): boolean {
|
|
125
119
|
if (super.shouldRecognizeSimultaneously(handler)) {
|
|
126
120
|
return true;
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { PixelRatio } from 'react-native';
|
|
2
1
|
import { State } from '../../State';
|
|
3
2
|
import { DEFAULT_TOUCH_SLOP } from '../constants';
|
|
4
3
|
import { AdaptedEvent, Config } from '../interfaces';
|
|
@@ -188,7 +187,6 @@ export default class PanGestureHandler extends GestureHandler {
|
|
|
188
187
|
|
|
189
188
|
protected transformNativeEvent() {
|
|
190
189
|
const rect: DOMRect = this.view.getBoundingClientRect();
|
|
191
|
-
const ratio = PixelRatio.get();
|
|
192
190
|
|
|
193
191
|
const translationX: number = this.getTranslationX();
|
|
194
192
|
const translationY: number = this.getTranslationY();
|
|
@@ -198,8 +196,8 @@ export default class PanGestureHandler extends GestureHandler {
|
|
|
198
196
|
translationY: isNaN(translationY) ? 0 : translationY,
|
|
199
197
|
absoluteX: this.tracker.getLastAvgX(),
|
|
200
198
|
absoluteY: this.tracker.getLastAvgY(),
|
|
201
|
-
velocityX: this.velocityX
|
|
202
|
-
velocityY: this.velocityY
|
|
199
|
+
velocityX: this.velocityX,
|
|
200
|
+
velocityY: this.velocityY,
|
|
203
201
|
x: this.tracker.getLastAvgX() - rect.left,
|
|
204
202
|
y: this.tracker.getLastAvgY() - rect.top,
|
|
205
203
|
};
|
|
@@ -306,11 +304,6 @@ export default class PanGestureHandler extends GestureHandler {
|
|
|
306
304
|
super.onPointerMove(event);
|
|
307
305
|
}
|
|
308
306
|
|
|
309
|
-
protected onPointerCancel(event: AdaptedEvent): void {
|
|
310
|
-
super.onPointerCancel(event);
|
|
311
|
-
|
|
312
|
-
this.reset();
|
|
313
|
-
}
|
|
314
307
|
protected onPointerOutOfBounds(event: AdaptedEvent): void {
|
|
315
308
|
if (this.getShouldCancelWhenOutside()) {
|
|
316
309
|
return;
|
|
@@ -127,11 +127,6 @@ export default class PinchGestureHandler extends GestureHandler {
|
|
|
127
127
|
super.onPointerOutOfBounds(event);
|
|
128
128
|
}
|
|
129
129
|
|
|
130
|
-
protected onPointerCancel(event: AdaptedEvent): void {
|
|
131
|
-
super.onPointerCancel(event);
|
|
132
|
-
this.reset();
|
|
133
|
-
}
|
|
134
|
-
|
|
135
130
|
private tryBegin(): void {
|
|
136
131
|
if (this.currentState !== State.UNDETERMINED) {
|
|
137
132
|
return;
|
|
@@ -148,13 +148,6 @@ export default class RotationGestureHandler extends GestureHandler {
|
|
|
148
148
|
this.tracker.removeFromTracker(event.pointerId);
|
|
149
149
|
}
|
|
150
150
|
|
|
151
|
-
protected onPointerCancel(event: AdaptedEvent): void {
|
|
152
|
-
super.onPointerCancel(event);
|
|
153
|
-
this.end();
|
|
154
|
-
|
|
155
|
-
this.reset();
|
|
156
|
-
}
|
|
157
|
-
|
|
158
151
|
protected tryBegin(): void {
|
|
159
152
|
if (this.currentState !== State.UNDETERMINED) {
|
|
160
153
|
return;
|
|
@@ -197,12 +197,6 @@ export default class TapGestureHandler extends GestureHandler {
|
|
|
197
197
|
super.onPointerOutOfBounds(event);
|
|
198
198
|
}
|
|
199
199
|
|
|
200
|
-
protected onPointerCancel(event: AdaptedEvent): void {
|
|
201
|
-
super.onPointerCancel(event);
|
|
202
|
-
this.tracker.resetTracker();
|
|
203
|
-
this.fail();
|
|
204
|
-
}
|
|
205
|
-
|
|
206
200
|
private updateState(event: AdaptedEvent): void {
|
|
207
201
|
if (
|
|
208
202
|
this.currentMaxNumberOfPointers < this.tracker.getTrackedPointersCount()
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
export default class CircularBuffer<T> {
|
|
2
|
+
private bufferSize: number;
|
|
3
|
+
private buffer: T[];
|
|
4
|
+
private index: number;
|
|
5
|
+
private actualSize: number;
|
|
6
|
+
|
|
7
|
+
constructor(size: number) {
|
|
8
|
+
this.bufferSize = size;
|
|
9
|
+
this.buffer = new Array<T>(size);
|
|
10
|
+
this.index = 0;
|
|
11
|
+
this.actualSize = 0;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
public get size(): number {
|
|
15
|
+
return this.actualSize;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
public push(element: T): void {
|
|
19
|
+
this.buffer[this.index] = element;
|
|
20
|
+
this.index = (this.index + 1) % this.bufferSize;
|
|
21
|
+
this.actualSize = Math.min(this.actualSize + 1, this.bufferSize);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
public get(at: number): T {
|
|
25
|
+
if (this.actualSize === this.bufferSize) {
|
|
26
|
+
let index = (this.index + at) % this.bufferSize;
|
|
27
|
+
if (index < 0) {
|
|
28
|
+
index += this.bufferSize;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
return this.buffer[index];
|
|
32
|
+
} else {
|
|
33
|
+
return this.buffer[at];
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
public clear(): void {
|
|
38
|
+
this.buffer = new Array<T>(this.bufferSize);
|
|
39
|
+
this.index = 0;
|
|
40
|
+
this.actualSize = 0;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
// Implementation taken from Flutter's LeastSquareSolver
|
|
2
|
+
// https://github.com/flutter/flutter/blob/master/packages/flutter/lib/src/gestures/lsq_solver.dart
|
|
3
|
+
|
|
4
|
+
class Vector {
|
|
5
|
+
private offset: number;
|
|
6
|
+
private length: number;
|
|
7
|
+
private elements: number[];
|
|
8
|
+
|
|
9
|
+
constructor(length: number) {
|
|
10
|
+
this.offset = 0;
|
|
11
|
+
this.length = length;
|
|
12
|
+
this.elements = new Array<number>(length);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
public static fromVOL(
|
|
16
|
+
values: number[],
|
|
17
|
+
offset: number,
|
|
18
|
+
length: number
|
|
19
|
+
): Vector {
|
|
20
|
+
const result = new Vector(0);
|
|
21
|
+
|
|
22
|
+
result.offset = offset;
|
|
23
|
+
result.length = length;
|
|
24
|
+
result.elements = values;
|
|
25
|
+
|
|
26
|
+
return result;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
public get(index: number): number {
|
|
30
|
+
return this.elements[this.offset + index];
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
public set(index: number, value: number): void {
|
|
34
|
+
this.elements[this.offset + index] = value;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
public dot(other: Vector): number {
|
|
38
|
+
let result = 0;
|
|
39
|
+
for (let i = 0; i < this.length; i++) {
|
|
40
|
+
result += this.get(i) * other.get(i);
|
|
41
|
+
}
|
|
42
|
+
return result;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
public norm() {
|
|
46
|
+
return Math.sqrt(this.dot(this));
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
class Matrix {
|
|
51
|
+
private columns: number;
|
|
52
|
+
private elements: number[];
|
|
53
|
+
|
|
54
|
+
constructor(rows: number, columns: number) {
|
|
55
|
+
this.columns = columns;
|
|
56
|
+
this.elements = new Array<number>(rows * columns);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
public get(row: number, column: number): number {
|
|
60
|
+
return this.elements[row * this.columns + column];
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
public set(row: number, column: number, value: number): void {
|
|
64
|
+
this.elements[row * this.columns + column] = value;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
public getRow(row: number): Vector {
|
|
68
|
+
return Vector.fromVOL(this.elements, row * this.columns, this.columns);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/// An nth degree polynomial fit to a dataset.
|
|
73
|
+
class PolynomialFit {
|
|
74
|
+
/// The polynomial coefficients of the fit.
|
|
75
|
+
///
|
|
76
|
+
/// For each `i`, the element `coefficients[i]` is the coefficient of
|
|
77
|
+
/// the `i`-th power of the variable.
|
|
78
|
+
public coefficients: number[];
|
|
79
|
+
|
|
80
|
+
/// Creates a polynomial fit of the given degree.
|
|
81
|
+
///
|
|
82
|
+
/// There are n + 1 coefficients in a fit of degree n.
|
|
83
|
+
constructor(degree: number) {
|
|
84
|
+
this.coefficients = new Array<number>(degree + 1);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
const precisionErrorTolerance = 1e-10;
|
|
89
|
+
|
|
90
|
+
/// Uses the least-squares algorithm to fit a polynomial to a set of data.
|
|
91
|
+
export default class LeastSquareSolver {
|
|
92
|
+
/// The x-coordinates of each data point.
|
|
93
|
+
private x: number[];
|
|
94
|
+
/// The y-coordinates of each data point.
|
|
95
|
+
private y: number[];
|
|
96
|
+
/// The weight to use for each data point.
|
|
97
|
+
private w: number[];
|
|
98
|
+
|
|
99
|
+
/// Creates a least-squares solver.
|
|
100
|
+
///
|
|
101
|
+
/// The [x], [y], and [w] arguments must not be null.
|
|
102
|
+
constructor(x: number[], y: number[], w: number[]) {
|
|
103
|
+
this.x = x;
|
|
104
|
+
this.y = y;
|
|
105
|
+
this.w = w;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
/// Fits a polynomial of the given degree to the data points.
|
|
109
|
+
///
|
|
110
|
+
/// When there is not enough data to fit a curve null is returned.
|
|
111
|
+
public solve(degree: number): PolynomialFit | null {
|
|
112
|
+
if (degree > this.x.length) {
|
|
113
|
+
// Not enough data to fit a curve.
|
|
114
|
+
return null;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
const result = new PolynomialFit(degree);
|
|
118
|
+
|
|
119
|
+
// Shorthands for the purpose of notation equivalence to original C++ code.
|
|
120
|
+
const m = this.x.length;
|
|
121
|
+
const n = degree + 1;
|
|
122
|
+
|
|
123
|
+
// Expand the X vector to a matrix A, pre-multiplied by the weights.
|
|
124
|
+
const a = new Matrix(n, m);
|
|
125
|
+
for (let h = 0; h < m; h++) {
|
|
126
|
+
a.set(0, h, this.w[h]);
|
|
127
|
+
|
|
128
|
+
for (let i = 1; i < n; i++) {
|
|
129
|
+
a.set(i, h, a.get(i - 1, h) * this.x[h]);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
// Apply the Gram-Schmidt process to A to obtain its QR decomposition.
|
|
134
|
+
|
|
135
|
+
// Orthonormal basis, column-major ordVectorer.
|
|
136
|
+
const q = new Matrix(n, m);
|
|
137
|
+
// Upper triangular matrix, row-major order.
|
|
138
|
+
const r = new Matrix(n, m);
|
|
139
|
+
|
|
140
|
+
for (let j = 0; j < n; j += 1) {
|
|
141
|
+
for (let h = 0; h < m; h += 1) {
|
|
142
|
+
q.set(j, h, a.get(j, h));
|
|
143
|
+
}
|
|
144
|
+
for (let i = 0; i < j; i += 1) {
|
|
145
|
+
const dot = q.getRow(j).dot(q.getRow(i));
|
|
146
|
+
for (let h = 0; h < m; h += 1) {
|
|
147
|
+
q.set(j, h, q.get(j, h) - dot * q.get(i, h));
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
const norm = q.getRow(j).norm();
|
|
152
|
+
if (norm < precisionErrorTolerance) {
|
|
153
|
+
// Vectors are linearly dependent or zero so no solution.
|
|
154
|
+
return null;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
const inverseNorm = 1.0 / norm;
|
|
158
|
+
for (let h = 0; h < m; h += 1) {
|
|
159
|
+
q.set(j, h, q.get(j, h) * inverseNorm);
|
|
160
|
+
}
|
|
161
|
+
for (let i = 0; i < n; i += 1) {
|
|
162
|
+
r.set(j, i, i < j ? 0.0 : q.getRow(j).dot(a.getRow(i)));
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
// Solve R B = Qt W Y to find B. This is easy because R is upper triangular.
|
|
167
|
+
// We just work from bottom-right to top-left calculating B's coefficients.
|
|
168
|
+
const wy = new Vector(m);
|
|
169
|
+
for (let h = 0; h < m; h += 1) {
|
|
170
|
+
wy.set(h, this.y[h] * this.w[h]);
|
|
171
|
+
}
|
|
172
|
+
for (let i = n - 1; i >= 0; i -= 1) {
|
|
173
|
+
result.coefficients[i] = q.getRow(i).dot(wy);
|
|
174
|
+
for (let j = n - 1; j > i; j -= 1) {
|
|
175
|
+
result.coefficients[i] -= r.get(i, j) * result.coefficients[j];
|
|
176
|
+
}
|
|
177
|
+
result.coefficients[i] /= r.get(i, i);
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
return result;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
@@ -8,6 +8,8 @@ import EventManager from './EventManager';
|
|
|
8
8
|
import { isPointerInBounds } from '../utils';
|
|
9
9
|
|
|
10
10
|
export default class PointerEventManager extends EventManager {
|
|
11
|
+
private trackedPointers = new Set<number>();
|
|
12
|
+
|
|
11
13
|
public setListeners(): void {
|
|
12
14
|
this.view.addEventListener('pointerdown', (event: PointerEvent): void => {
|
|
13
15
|
if (event.pointerType === PointerType.TOUCH) {
|
|
@@ -24,6 +26,7 @@ export default class PointerEventManager extends EventManager {
|
|
|
24
26
|
|
|
25
27
|
target.setPointerCapture(adaptedEvent.pointerId);
|
|
26
28
|
this.markAsInBounds(adaptedEvent.pointerId);
|
|
29
|
+
this.trackedPointers.add(adaptedEvent.pointerId);
|
|
27
30
|
|
|
28
31
|
if (++this.activePointersCounter > 1) {
|
|
29
32
|
adaptedEvent.eventType = EventTypes.ADDITIONAL_POINTER_DOWN;
|
|
@@ -51,6 +54,7 @@ export default class PointerEventManager extends EventManager {
|
|
|
51
54
|
|
|
52
55
|
target.releasePointerCapture(adaptedEvent.pointerId);
|
|
53
56
|
this.markAsOutOfBounds(adaptedEvent.pointerId);
|
|
57
|
+
this.trackedPointers.delete(adaptedEvent.pointerId);
|
|
54
58
|
|
|
55
59
|
if (--this.activePointersCounter > 0) {
|
|
56
60
|
adaptedEvent.eventType = EventTypes.ADDITIONAL_POINTER_UP;
|
|
@@ -115,7 +119,27 @@ export default class PointerEventManager extends EventManager {
|
|
|
115
119
|
this.onPointerCancel(adaptedEvent);
|
|
116
120
|
this.markAsOutOfBounds(adaptedEvent.pointerId);
|
|
117
121
|
this.activePointersCounter = 0;
|
|
122
|
+
this.trackedPointers.clear();
|
|
118
123
|
});
|
|
124
|
+
|
|
125
|
+
this.view.addEventListener(
|
|
126
|
+
'lostpointercapture',
|
|
127
|
+
(event: PointerEvent): void => {
|
|
128
|
+
const adaptedEvent: AdaptedEvent = this.mapEvent(
|
|
129
|
+
event,
|
|
130
|
+
EventTypes.CANCEL
|
|
131
|
+
);
|
|
132
|
+
|
|
133
|
+
if (this.trackedPointers.has(adaptedEvent.pointerId)) {
|
|
134
|
+
// in some cases the `pointerup` event is not fired, but `lostpointercapture` is
|
|
135
|
+
// we simulate the `pointercancel` event here to make sure the gesture handler stops tracking it
|
|
136
|
+
this.onPointerCancel(adaptedEvent);
|
|
137
|
+
|
|
138
|
+
this.activePointersCounter = 0;
|
|
139
|
+
this.trackedPointers.clear();
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
);
|
|
119
143
|
}
|
|
120
144
|
|
|
121
145
|
protected mapEvent(event: PointerEvent, eventType: EventTypes): AdaptedEvent {
|
|
@@ -131,4 +155,9 @@ export default class PointerEventManager extends EventManager {
|
|
|
131
155
|
time: event.timeStamp,
|
|
132
156
|
};
|
|
133
157
|
}
|
|
158
|
+
|
|
159
|
+
public resetManager(): void {
|
|
160
|
+
super.resetManager();
|
|
161
|
+
this.trackedPointers.clear();
|
|
162
|
+
}
|
|
134
163
|
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { AdaptedEvent } from '../interfaces';
|
|
2
|
+
import VelocityTracker from './VelocityTracker';
|
|
2
3
|
|
|
3
4
|
export interface TrackerElement {
|
|
4
5
|
lastX: number;
|
|
@@ -10,11 +11,10 @@ export interface TrackerElement {
|
|
|
10
11
|
velocityY: number;
|
|
11
12
|
}
|
|
12
13
|
|
|
13
|
-
// Used to scale velocity so that it is similar to velocity in Android/iOS
|
|
14
|
-
const VELOCITY_FACTOR = 0.2;
|
|
15
14
|
const MAX_POINTERS = 20;
|
|
16
15
|
|
|
17
16
|
export default class PointerTracker {
|
|
17
|
+
private velocityTracker = new VelocityTracker();
|
|
18
18
|
private trackedPointers: Map<number, TrackerElement> = new Map<
|
|
19
19
|
number,
|
|
20
20
|
TrackerElement
|
|
@@ -74,12 +74,11 @@ export default class PointerTracker {
|
|
|
74
74
|
|
|
75
75
|
this.lastMovedPointerId = event.pointerId;
|
|
76
76
|
|
|
77
|
-
|
|
78
|
-
const
|
|
79
|
-
const dt = event.time - element.timeStamp;
|
|
77
|
+
this.velocityTracker.add(event);
|
|
78
|
+
const [velocityX, velocityY] = this.velocityTracker.getVelocity();
|
|
80
79
|
|
|
81
|
-
element.velocityX =
|
|
82
|
-
element.velocityY =
|
|
80
|
+
element.velocityX = velocityX;
|
|
81
|
+
element.velocityY = velocityY;
|
|
83
82
|
|
|
84
83
|
element.lastX = event.x;
|
|
85
84
|
element.lastY = event.y;
|
|
@@ -223,6 +222,7 @@ export default class PointerTracker {
|
|
|
223
222
|
}
|
|
224
223
|
|
|
225
224
|
public resetTracker(): void {
|
|
225
|
+
this.velocityTracker.reset();
|
|
226
226
|
this.trackedPointers.clear();
|
|
227
227
|
this.lastMovedPointerId = NaN;
|
|
228
228
|
|