react-native-gesture-handler 2.15.0 → 2.16.0
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/RNGestureHandler.podspec +2 -23
- package/android/build.gradle +1 -1
- package/android/noreanimated/src/main/java/com/swmansion/gesturehandler/ReanimatedEventDispatcher.kt +2 -0
- package/android/paper/src/main/java/com/facebook/react/viewmanagers/RNGestureHandlerButtonManagerDelegate.java +9 -0
- package/android/paper/src/main/java/com/facebook/react/viewmanagers/RNGestureHandlerButtonManagerInterface.java +3 -0
- package/android/src/main/java/com/swmansion/gesturehandler/RNGestureHandlerPackage.kt +11 -6
- package/android/src/main/java/com/swmansion/gesturehandler/core/DiagonalDirections.kt +8 -0
- package/android/src/main/java/com/swmansion/gesturehandler/core/FlingGestureHandler.kt +65 -24
- package/android/src/main/java/com/swmansion/gesturehandler/core/GestureHandler.kt +86 -22
- package/android/src/main/java/com/swmansion/gesturehandler/core/GestureHandlerOrchestrator.kt +54 -29
- package/android/src/main/java/com/swmansion/gesturehandler/core/GestureUtils.kt +3 -0
- package/android/src/main/java/com/swmansion/gesturehandler/core/LongPressGestureHandler.kt +5 -1
- package/android/src/main/java/com/swmansion/gesturehandler/core/PanGestureHandler.kt +5 -1
- package/android/src/main/java/com/swmansion/gesturehandler/core/TapGestureHandler.kt +7 -3
- package/android/src/main/java/com/swmansion/gesturehandler/core/Vector.kt +66 -0
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerButtonViewManager.kt +119 -19
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEnabledRootView.kt +2 -2
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEvent.kt +1 -4
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerModule.kt +8 -5
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootHelper.kt +7 -4
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootView.kt +1 -1
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerStateChangeEvent.kt +1 -4
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerTouchEvent.kt +4 -7
- package/android/src/main/java/com/swmansion/gesturehandler/react/eventbuilders/GestureHandlerEventDataBuilder.kt +3 -0
- package/android/src/main/jni/cpp-adapter.cpp +18 -22
- package/apple/Handlers/RNFlingHandler.m +5 -4
- package/apple/Handlers/RNForceTouchHandler.m +3 -1
- package/apple/Handlers/RNHoverHandler.m +2 -1
- package/apple/Handlers/RNLongPressHandler.m +8 -14
- package/apple/Handlers/RNManualHandler.m +1 -0
- package/apple/Handlers/RNNativeViewHandler.mm +9 -7
- package/apple/Handlers/RNPanHandler.m +7 -2
- package/apple/Handlers/RNPinchHandler.m +50 -26
- package/apple/Handlers/RNRotationHandler.m +43 -29
- package/apple/Handlers/RNTapHandler.m +6 -4
- package/apple/RNGestureHandler.h +9 -0
- package/apple/RNGestureHandler.m +41 -4
- package/apple/RNGestureHandlerEvents.h +18 -9
- package/apple/RNGestureHandlerEvents.m +29 -11
- package/apple/RNGestureHandlerManager.h +5 -0
- package/apple/RNGestureHandlerManager.mm +32 -6
- package/apple/RNGestureHandlerModule.h +5 -3
- package/apple/RNGestureHandlerModule.mm +33 -19
- package/apple/RNGestureHandlerPointerType.h +8 -0
- package/lib/commonjs/Directions.js +19 -6
- package/lib/commonjs/Directions.js.map +1 -1
- package/lib/commonjs/PointerType.js +16 -0
- package/lib/commonjs/PointerType.js.map +1 -0
- package/lib/commonjs/RNGestureHandlerModule.web.js +7 -61
- package/lib/commonjs/RNGestureHandlerModule.web.js.map +1 -1
- package/lib/commonjs/components/DrawerLayout.js.map +1 -1
- package/lib/commonjs/components/GestureHandlerRootView.android.js +17 -2
- package/lib/commonjs/components/GestureHandlerRootView.android.js.map +1 -1
- package/lib/commonjs/components/GestureHandlerRootView.js +15 -2
- package/lib/commonjs/components/GestureHandlerRootView.js.map +1 -1
- package/lib/commonjs/components/GestureHandlerRootView.web.js +15 -2
- package/lib/commonjs/components/GestureHandlerRootView.web.js.map +1 -1
- package/lib/commonjs/components/Swipeable.js +3 -1
- package/lib/commonjs/components/Swipeable.js.map +1 -1
- package/lib/commonjs/components/touchables/GenericTouchable.js +1 -0
- package/lib/commonjs/components/touchables/GenericTouchable.js.map +1 -1
- package/lib/commonjs/getShadowNodeFromRef.js +19 -2
- package/lib/commonjs/getShadowNodeFromRef.js.map +1 -1
- package/lib/commonjs/handlers/createHandler.js +5 -0
- package/lib/commonjs/handlers/createHandler.js.map +1 -1
- package/lib/commonjs/handlers/customDirectEventTypes.js +14 -0
- package/lib/commonjs/handlers/customDirectEventTypes.js.map +1 -0
- package/lib/commonjs/handlers/customDirectEventTypes.web.js +11 -0
- package/lib/commonjs/handlers/customDirectEventTypes.web.js.map +1 -0
- package/lib/commonjs/handlers/gestureHandlerCommon.js +13 -2
- package/lib/commonjs/handlers/gestureHandlerCommon.js.map +1 -1
- package/lib/commonjs/handlers/gestures/GestureDetector.js +10 -0
- package/lib/commonjs/handlers/gestures/GestureDetector.js.map +1 -1
- package/lib/commonjs/handlers/gestures/gesture.js.map +1 -1
- package/lib/commonjs/index.js +11 -3
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/mocks.js +2 -0
- package/lib/commonjs/mocks.js.map +1 -1
- package/lib/commonjs/specs/NativeRNGestureHandlerModule.js.map +1 -1
- package/lib/commonjs/specs/RNGestureHandlerButtonNativeComponent.js.map +1 -1
- package/lib/commonjs/web/Gestures.js +66 -0
- package/lib/commonjs/web/Gestures.js.map +1 -0
- package/lib/commonjs/web/constants.js +3 -8
- package/lib/commonjs/web/constants.js.map +1 -1
- package/lib/commonjs/web/handlers/FlingGestureHandler.js +36 -12
- package/lib/commonjs/web/handlers/FlingGestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/GestureHandler.js +10 -5
- package/lib/commonjs/web/handlers/GestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/IGestureHandler.js +2 -0
- package/lib/commonjs/web/handlers/IGestureHandler.js.map +1 -0
- package/lib/commonjs/web/handlers/NativeViewGestureHandler.js +5 -6
- package/lib/commonjs/web/handlers/NativeViewGestureHandler.js.map +1 -1
- package/lib/commonjs/web/interfaces.js +1 -23
- package/lib/commonjs/web/interfaces.js.map +1 -1
- package/lib/commonjs/web/tools/EventManager.js.map +1 -1
- package/lib/commonjs/web/tools/GestureHandlerOrchestrator.js +117 -118
- package/lib/commonjs/web/tools/GestureHandlerOrchestrator.js.map +1 -1
- package/lib/commonjs/web/tools/GestureHandlerWebDelegate.js +10 -5
- package/lib/commonjs/web/tools/GestureHandlerWebDelegate.js.map +1 -1
- package/lib/commonjs/web/tools/InteractionManager.js +12 -3
- package/lib/commonjs/web/tools/InteractionManager.js.map +1 -1
- package/lib/commonjs/web/tools/NodeManager.js.map +1 -1
- package/lib/commonjs/web/tools/PointerEventManager.js +77 -27
- package/lib/commonjs/web/tools/PointerEventManager.js.map +1 -1
- package/lib/commonjs/web/tools/TouchEventManager.js +29 -6
- package/lib/commonjs/web/tools/TouchEventManager.js.map +1 -1
- package/lib/commonjs/web/tools/Vector.js +58 -0
- package/lib/commonjs/web/tools/Vector.js.map +1 -0
- package/lib/commonjs/web/utils.js +14 -0
- package/lib/commonjs/web/utils.js.map +1 -1
- package/lib/commonjs/web_hammer/NodeManager.js.map +1 -1
- package/lib/module/Directions.js +16 -4
- package/lib/module/Directions.js.map +1 -1
- package/lib/module/PointerType.js +9 -0
- package/lib/module/PointerType.js.map +1 -0
- package/lib/module/RNGestureHandlerModule.web.js +2 -39
- package/lib/module/RNGestureHandlerModule.web.js.map +1 -1
- package/lib/module/components/DrawerLayout.js.map +1 -1
- package/lib/module/components/GestureHandlerRootView.android.js +15 -2
- package/lib/module/components/GestureHandlerRootView.android.js.map +1 -1
- package/lib/module/components/GestureHandlerRootView.js +15 -3
- package/lib/module/components/GestureHandlerRootView.js.map +1 -1
- package/lib/module/components/GestureHandlerRootView.web.js +15 -3
- package/lib/module/components/GestureHandlerRootView.web.js.map +1 -1
- package/lib/module/components/Swipeable.js +3 -1
- package/lib/module/components/Swipeable.js.map +1 -1
- package/lib/module/components/touchables/GenericTouchable.js +1 -0
- package/lib/module/components/touchables/GenericTouchable.js.map +1 -1
- package/lib/module/getShadowNodeFromRef.js +19 -2
- package/lib/module/getShadowNodeFromRef.js.map +1 -1
- package/lib/module/handlers/createHandler.js +5 -1
- package/lib/module/handlers/createHandler.js.map +1 -1
- package/lib/module/handlers/customDirectEventTypes.js +3 -0
- package/lib/module/handlers/customDirectEventTypes.js.map +1 -0
- package/lib/module/handlers/customDirectEventTypes.web.js +5 -0
- package/lib/module/handlers/customDirectEventTypes.web.js.map +1 -0
- package/lib/module/handlers/gestureHandlerCommon.js +11 -1
- package/lib/module/handlers/gestureHandlerCommon.js.map +1 -1
- package/lib/module/handlers/gestures/GestureDetector.js +10 -0
- package/lib/module/handlers/gestures/GestureDetector.js.map +1 -1
- package/lib/module/handlers/gestures/gesture.js.map +1 -1
- package/lib/module/index.js +2 -1
- package/lib/module/index.js.map +1 -1
- package/lib/module/mocks.js +2 -0
- package/lib/module/mocks.js.map +1 -1
- package/lib/module/specs/NativeRNGestureHandlerModule.js.map +1 -1
- package/lib/module/specs/RNGestureHandlerButtonNativeComponent.js.map +1 -1
- package/lib/module/web/Gestures.js +39 -0
- package/lib/module/web/Gestures.js.map +1 -0
- package/lib/module/web/constants.js +1 -6
- package/lib/module/web/constants.js.map +1 -1
- package/lib/module/web/handlers/FlingGestureHandler.js +34 -12
- package/lib/module/web/handlers/FlingGestureHandler.js.map +1 -1
- package/lib/module/web/handlers/GestureHandler.js +7 -4
- package/lib/module/web/handlers/GestureHandler.js.map +1 -1
- package/lib/module/web/handlers/IGestureHandler.js +2 -0
- package/lib/module/web/handlers/IGestureHandler.js.map +1 -0
- package/lib/module/web/handlers/NativeViewGestureHandler.js +5 -6
- package/lib/module/web/handlers/NativeViewGestureHandler.js.map +1 -1
- package/lib/module/web/interfaces.js +0 -20
- package/lib/module/web/interfaces.js.map +1 -1
- package/lib/module/web/tools/EventManager.js.map +1 -1
- package/lib/module/web/tools/GestureHandlerOrchestrator.js +116 -117
- package/lib/module/web/tools/GestureHandlerOrchestrator.js.map +1 -1
- package/lib/module/web/tools/GestureHandlerWebDelegate.js +9 -4
- package/lib/module/web/tools/GestureHandlerWebDelegate.js.map +1 -1
- package/lib/module/web/tools/InteractionManager.js +9 -3
- package/lib/module/web/tools/InteractionManager.js.map +1 -1
- package/lib/module/web/tools/NodeManager.js.map +1 -1
- package/lib/module/web/tools/PointerEventManager.js +75 -27
- package/lib/module/web/tools/PointerEventManager.js.map +1 -1
- package/lib/module/web/tools/TouchEventManager.js +28 -6
- package/lib/module/web/tools/TouchEventManager.js.map +1 -1
- package/lib/module/web/tools/Vector.js +47 -0
- package/lib/module/web/tools/Vector.js.map +1 -0
- package/lib/module/web/utils.js +4 -0
- package/lib/module/web/utils.js.map +1 -1
- package/lib/module/web_hammer/NodeManager.js.map +1 -1
- package/lib/typescript/Directions.d.ts +7 -0
- package/lib/typescript/PointerType.d.ts +6 -0
- package/lib/typescript/RNGestureHandlerModule.web.d.ts +4 -39
- package/lib/typescript/components/DrawerLayout.d.ts +1 -2
- package/lib/typescript/components/GestureHandlerRootView.android.d.ts +1 -1
- package/lib/typescript/components/GestureHandlerRootView.d.ts +1 -1
- package/lib/typescript/components/GestureHandlerRootView.web.d.ts +1 -1
- package/lib/typescript/components/touchables/GenericTouchable.d.ts +2 -1
- package/lib/typescript/getShadowNodeFromRef.d.ts +1 -1
- package/lib/typescript/handlers/NativeViewGestureHandler.d.ts +1 -1
- package/lib/typescript/handlers/customDirectEventTypes.d.ts +1 -0
- package/lib/typescript/handlers/customDirectEventTypes.web.d.ts +2 -0
- package/lib/typescript/handlers/gestureHandlerCommon.d.ts +13 -2
- package/lib/typescript/handlers/gestures/GestureDetector.d.ts +2 -1
- package/lib/typescript/handlers/gestures/gesture.d.ts +1 -2
- package/lib/typescript/index.d.ts +2 -1
- package/lib/typescript/mocks.d.ts +1 -0
- package/lib/typescript/specs/NativeRNGestureHandlerModule.d.ts +6 -6
- package/lib/typescript/specs/RNGestureHandlerButtonNativeComponent.d.ts +4 -1
- package/lib/typescript/web/Gestures.d.ts +36 -0
- package/lib/typescript/web/constants.d.ts +1 -6
- package/lib/typescript/web/handlers/FlingGestureHandler.d.ts +3 -3
- package/lib/typescript/web/handlers/GestureHandler.d.ts +12 -9
- package/lib/typescript/web/handlers/IGestureHandler.d.ts +38 -0
- package/lib/typescript/web/handlers/NativeViewGestureHandler.d.ts +1 -0
- package/lib/typescript/web/interfaces.d.ts +9 -16
- package/lib/typescript/web/tools/EventManager.d.ts +15 -12
- package/lib/typescript/web/tools/GestureHandlerDelegate.d.ts +3 -4
- package/lib/typescript/web/tools/GestureHandlerOrchestrator.d.ts +7 -5
- package/lib/typescript/web/tools/GestureHandlerWebDelegate.d.ts +3 -3
- package/lib/typescript/web/tools/InteractionManager.d.ts +6 -6
- package/lib/typescript/web/tools/NodeManager.d.ts +4 -3
- package/lib/typescript/web/tools/PointerEventManager.d.ts +11 -2
- package/lib/typescript/web/tools/TouchEventManager.d.ts +6 -1
- package/lib/typescript/web/tools/Vector.d.ts +15 -0
- package/lib/typescript/web/utils.d.ts +6 -4
- package/lib/typescript/web_hammer/NodeManager.d.ts +1 -1
- package/package.json +2 -1
- package/src/Directions.ts +21 -4
- package/src/PointerType.ts +6 -0
- package/src/RNGestureHandlerModule.web.ts +3 -44
- package/src/components/DrawerLayout.tsx +1 -1
- package/src/components/GestureHandlerRootView.android.tsx +13 -5
- package/src/components/GestureHandlerRootView.tsx +10 -5
- package/src/components/GestureHandlerRootView.web.tsx +10 -5
- package/src/components/Swipeable.tsx +2 -0
- package/src/components/touchables/GenericTouchable.tsx +3 -0
- package/src/getShadowNodeFromRef.ts +28 -6
- package/src/handlers/createHandler.tsx +14 -2
- package/src/handlers/customDirectEventTypes.ts +2 -0
- package/src/handlers/customDirectEventTypes.web.ts +5 -0
- package/src/handlers/gestureHandlerCommon.ts +30 -1
- package/src/handlers/gestures/GestureDetector.tsx +15 -0
- package/src/handlers/gestures/gesture.ts +1 -1
- package/src/index.ts +2 -1
- package/src/mocks.ts +2 -0
- package/src/specs/NativeRNGestureHandlerModule.ts +8 -8
- package/src/specs/RNGestureHandlerButtonNativeComponent.ts +4 -0
- package/src/web/Gestures.ts +41 -0
- package/src/web/constants.ts +1 -7
- package/src/web/handlers/FlingGestureHandler.ts +54 -24
- package/src/web/handlers/GestureHandler.ts +17 -12
- package/src/web/handlers/IGestureHandler.ts +50 -0
- package/src/web/handlers/NativeViewGestureHandler.ts +5 -6
- package/src/web/interfaces.ts +15 -17
- package/src/web/tools/EventManager.ts +16 -14
- package/src/web/tools/GestureHandlerDelegate.ts +3 -4
- package/src/web/tools/GestureHandlerOrchestrator.ts +162 -147
- package/src/web/tools/GestureHandlerWebDelegate.ts +14 -9
- package/src/web/tools/InteractionManager.ts +18 -12
- package/src/web/tools/NodeManager.ts +4 -3
- package/src/web/tools/PointerEventManager.ts +189 -154
- package/src/web/tools/TouchEventManager.ts +128 -120
- package/src/web/tools/Vector.ts +60 -0
- package/src/web/utils.ts +16 -4
- package/src/web_hammer/NodeManager.ts +1 -1
|
@@ -1,25 +1,28 @@
|
|
|
1
1
|
import { State } from '../../State';
|
|
2
|
-
import {
|
|
2
|
+
import { DiagonalDirections, Directions } from '../../Directions';
|
|
3
3
|
import { AdaptedEvent, Config } from '../interfaces';
|
|
4
4
|
|
|
5
5
|
import GestureHandler from './GestureHandler';
|
|
6
|
+
import Vector from '../tools/Vector';
|
|
7
|
+
import { coneToDeviation } from '../utils';
|
|
6
8
|
|
|
7
9
|
const DEFAULT_MAX_DURATION_MS = 800;
|
|
8
|
-
const
|
|
9
|
-
const
|
|
10
|
+
const DEFAULT_MIN_VELOCITY = 700;
|
|
11
|
+
const DEFAULT_ALIGNMENT_CONE = 30;
|
|
12
|
+
const DEFAULT_DIRECTION = Directions.RIGHT;
|
|
10
13
|
const DEFAULT_NUMBER_OF_TOUCHES_REQUIRED = 1;
|
|
11
14
|
|
|
15
|
+
const AXIAL_DEVIATION_COSINE = coneToDeviation(DEFAULT_ALIGNMENT_CONE);
|
|
16
|
+
const DIAGONAL_DEVIATION_COSINE = coneToDeviation(90 - DEFAULT_ALIGNMENT_CONE);
|
|
17
|
+
|
|
12
18
|
export default class FlingGestureHandler extends GestureHandler {
|
|
13
19
|
private numberOfPointersRequired = DEFAULT_NUMBER_OF_TOUCHES_REQUIRED;
|
|
14
|
-
private direction = DEFAULT_DIRECTION;
|
|
20
|
+
private direction: Directions = DEFAULT_DIRECTION;
|
|
15
21
|
|
|
16
22
|
private maxDurationMs = DEFAULT_MAX_DURATION_MS;
|
|
17
|
-
private
|
|
23
|
+
private minVelocity = DEFAULT_MIN_VELOCITY;
|
|
18
24
|
private delayTimeout!: number;
|
|
19
25
|
|
|
20
|
-
private startX = 0;
|
|
21
|
-
private startY = 0;
|
|
22
|
-
|
|
23
26
|
private maxNumberOfPointersSimultaneously = 0;
|
|
24
27
|
private keyPointer = NaN;
|
|
25
28
|
|
|
@@ -40,9 +43,6 @@ export default class FlingGestureHandler extends GestureHandler {
|
|
|
40
43
|
}
|
|
41
44
|
|
|
42
45
|
private startFling(): void {
|
|
43
|
-
this.startX = this.tracker.getLastX(this.keyPointer);
|
|
44
|
-
this.startY = this.tracker.getLastY(this.keyPointer);
|
|
45
|
-
|
|
46
46
|
this.begin();
|
|
47
47
|
|
|
48
48
|
this.maxNumberOfPointersSimultaneously = 1;
|
|
@@ -51,21 +51,43 @@ export default class FlingGestureHandler extends GestureHandler {
|
|
|
51
51
|
}
|
|
52
52
|
|
|
53
53
|
private tryEndFling(): boolean {
|
|
54
|
+
const velocityVector = Vector.fromVelocity(this.tracker, this.keyPointer);
|
|
55
|
+
|
|
56
|
+
const getAlignment = (
|
|
57
|
+
direction: Directions | DiagonalDirections,
|
|
58
|
+
minimalAlignmentCosine: number
|
|
59
|
+
) => {
|
|
60
|
+
return (
|
|
61
|
+
(direction & this.direction) === direction &&
|
|
62
|
+
velocityVector.isSimilar(
|
|
63
|
+
Vector.fromDirection(direction),
|
|
64
|
+
minimalAlignmentCosine
|
|
65
|
+
)
|
|
66
|
+
);
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
const axialDirectionsList = Object.values(Directions);
|
|
70
|
+
const diagonalDirectionsList = Object.values(DiagonalDirections);
|
|
71
|
+
|
|
72
|
+
// list of alignments to all activated directions
|
|
73
|
+
const axialAlignmentList = axialDirectionsList.map((direction) =>
|
|
74
|
+
getAlignment(direction, AXIAL_DEVIATION_COSINE)
|
|
75
|
+
);
|
|
76
|
+
|
|
77
|
+
const diagonalAlignmentList = diagonalDirectionsList.map((direction) =>
|
|
78
|
+
getAlignment(direction, DIAGONAL_DEVIATION_COSINE)
|
|
79
|
+
);
|
|
80
|
+
|
|
81
|
+
const isAligned =
|
|
82
|
+
axialAlignmentList.some(Boolean) || diagonalAlignmentList.some(Boolean);
|
|
83
|
+
|
|
84
|
+
const isFast = velocityVector.magnitude > this.minVelocity;
|
|
85
|
+
|
|
54
86
|
if (
|
|
55
87
|
this.maxNumberOfPointersSimultaneously ===
|
|
56
88
|
this.numberOfPointersRequired &&
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
this.minAcceptableDelta) ||
|
|
60
|
-
(this.direction & Direction.LEFT &&
|
|
61
|
-
this.startX - this.tracker.getLastX(this.keyPointer) >
|
|
62
|
-
this.minAcceptableDelta) ||
|
|
63
|
-
(this.direction & Direction.UP &&
|
|
64
|
-
this.startY - this.tracker.getLastY(this.keyPointer) >
|
|
65
|
-
this.minAcceptableDelta) ||
|
|
66
|
-
(this.direction & Direction.DOWN &&
|
|
67
|
-
this.tracker.getLastY(this.keyPointer) - this.startY >
|
|
68
|
-
this.minAcceptableDelta))
|
|
89
|
+
isAligned &&
|
|
90
|
+
isFast
|
|
69
91
|
) {
|
|
70
92
|
clearTimeout(this.delayTimeout);
|
|
71
93
|
this.activate();
|
|
@@ -120,7 +142,7 @@ export default class FlingGestureHandler extends GestureHandler {
|
|
|
120
142
|
}
|
|
121
143
|
}
|
|
122
144
|
|
|
123
|
-
|
|
145
|
+
private pointerMoveAction(event: AdaptedEvent): void {
|
|
124
146
|
this.tracker.track(event);
|
|
125
147
|
|
|
126
148
|
if (this.currentState !== State.BEGAN) {
|
|
@@ -128,10 +150,18 @@ export default class FlingGestureHandler extends GestureHandler {
|
|
|
128
150
|
}
|
|
129
151
|
|
|
130
152
|
this.tryEndFling();
|
|
153
|
+
}
|
|
131
154
|
|
|
155
|
+
protected onPointerMove(event: AdaptedEvent): void {
|
|
156
|
+
this.pointerMoveAction(event);
|
|
132
157
|
super.onPointerMove(event);
|
|
133
158
|
}
|
|
134
159
|
|
|
160
|
+
protected onPointerOutOfBounds(event: AdaptedEvent): void {
|
|
161
|
+
this.pointerMoveAction(event);
|
|
162
|
+
super.onPointerOutOfBounds(event);
|
|
163
|
+
}
|
|
164
|
+
|
|
135
165
|
protected onPointerUp(event: AdaptedEvent): void {
|
|
136
166
|
super.onPointerUp(event);
|
|
137
167
|
this.onUp(event);
|
|
@@ -7,18 +7,19 @@ import {
|
|
|
7
7
|
ResultEvent,
|
|
8
8
|
PointerData,
|
|
9
9
|
ResultTouchEvent,
|
|
10
|
-
PointerType,
|
|
11
10
|
TouchEventType,
|
|
12
11
|
EventTypes,
|
|
13
|
-
MouseButton,
|
|
14
12
|
} from '../interfaces';
|
|
15
13
|
import EventManager from '../tools/EventManager';
|
|
16
14
|
import GestureHandlerOrchestrator from '../tools/GestureHandlerOrchestrator';
|
|
17
15
|
import InteractionManager from '../tools/InteractionManager';
|
|
18
16
|
import PointerTracker, { TrackerElement } from '../tools/PointerTracker';
|
|
19
17
|
import { GestureHandlerDelegate } from '../tools/GestureHandlerDelegate';
|
|
18
|
+
import IGestureHandler from './IGestureHandler';
|
|
19
|
+
import { MouseButton } from '../../handlers/gestureHandlerCommon';
|
|
20
|
+
import { PointerType } from '../../PointerType';
|
|
20
21
|
|
|
21
|
-
export default abstract class GestureHandler {
|
|
22
|
+
export default abstract class GestureHandler implements IGestureHandler {
|
|
22
23
|
private lastSentState: State | null = null;
|
|
23
24
|
protected currentState: State = State.UNDETERMINED;
|
|
24
25
|
|
|
@@ -38,11 +39,13 @@ export default abstract class GestureHandler {
|
|
|
38
39
|
protected awaiting = false;
|
|
39
40
|
protected active = false;
|
|
40
41
|
protected shouldResetProgress = false;
|
|
41
|
-
protected pointerType: PointerType = PointerType.
|
|
42
|
+
protected pointerType: PointerType = PointerType.MOUSE;
|
|
42
43
|
|
|
43
|
-
protected delegate: GestureHandlerDelegate<unknown>;
|
|
44
|
+
protected delegate: GestureHandlerDelegate<unknown, IGestureHandler>;
|
|
44
45
|
|
|
45
|
-
public constructor(
|
|
46
|
+
public constructor(
|
|
47
|
+
delegate: GestureHandlerDelegate<unknown, IGestureHandler>
|
|
48
|
+
) {
|
|
46
49
|
this.delegate = delegate;
|
|
47
50
|
}
|
|
48
51
|
|
|
@@ -71,7 +74,8 @@ export default abstract class GestureHandler {
|
|
|
71
74
|
manager.setOnPointerOutOfBounds(this.onPointerOutOfBounds.bind(this));
|
|
72
75
|
manager.setOnPointerMoveOver(this.onPointerMoveOver.bind(this));
|
|
73
76
|
manager.setOnPointerMoveOut(this.onPointerMoveOut.bind(this));
|
|
74
|
-
|
|
77
|
+
|
|
78
|
+
manager.registerListeners();
|
|
75
79
|
}
|
|
76
80
|
|
|
77
81
|
//
|
|
@@ -229,7 +233,7 @@ export default abstract class GestureHandler {
|
|
|
229
233
|
this.activationIndex = value;
|
|
230
234
|
}
|
|
231
235
|
|
|
232
|
-
public shouldWaitForHandlerFailure(handler:
|
|
236
|
+
public shouldWaitForHandlerFailure(handler: IGestureHandler): boolean {
|
|
233
237
|
if (handler === this) {
|
|
234
238
|
return false;
|
|
235
239
|
}
|
|
@@ -240,7 +244,7 @@ export default abstract class GestureHandler {
|
|
|
240
244
|
);
|
|
241
245
|
}
|
|
242
246
|
|
|
243
|
-
public shouldRequireToWaitForFailure(handler:
|
|
247
|
+
public shouldRequireToWaitForFailure(handler: IGestureHandler): boolean {
|
|
244
248
|
if (handler === this) {
|
|
245
249
|
return false;
|
|
246
250
|
}
|
|
@@ -251,7 +255,7 @@ export default abstract class GestureHandler {
|
|
|
251
255
|
);
|
|
252
256
|
}
|
|
253
257
|
|
|
254
|
-
public shouldRecognizeSimultaneously(handler:
|
|
258
|
+
public shouldRecognizeSimultaneously(handler: IGestureHandler): boolean {
|
|
255
259
|
if (handler === this) {
|
|
256
260
|
return true;
|
|
257
261
|
}
|
|
@@ -262,7 +266,7 @@ export default abstract class GestureHandler {
|
|
|
262
266
|
);
|
|
263
267
|
}
|
|
264
268
|
|
|
265
|
-
public shouldBeCancelledByOther(handler:
|
|
269
|
+
public shouldBeCancelledByOther(handler: IGestureHandler): boolean {
|
|
266
270
|
if (handler === this) {
|
|
267
271
|
return false;
|
|
268
272
|
}
|
|
@@ -421,6 +425,7 @@ export default abstract class GestureHandler {
|
|
|
421
425
|
handlerTag: this.handlerTag,
|
|
422
426
|
target: this.viewRef,
|
|
423
427
|
oldState: newState !== oldState ? oldState : undefined,
|
|
428
|
+
pointerType: this.pointerType,
|
|
424
429
|
},
|
|
425
430
|
timeStamp: Date.now(),
|
|
426
431
|
};
|
|
@@ -771,7 +776,7 @@ export default abstract class GestureHandler {
|
|
|
771
776
|
return this.config;
|
|
772
777
|
}
|
|
773
778
|
|
|
774
|
-
public getDelegate(): GestureHandlerDelegate<unknown> {
|
|
779
|
+
public getDelegate(): GestureHandlerDelegate<unknown, IGestureHandler> {
|
|
775
780
|
return this.delegate;
|
|
776
781
|
}
|
|
777
782
|
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import type { PointerType } from '../../PointerType';
|
|
2
|
+
import type { MouseButton } from '../../handlers/gestureHandlerCommon';
|
|
3
|
+
import type { State } from '../../State';
|
|
4
|
+
import type { Config } from '../interfaces';
|
|
5
|
+
import type EventManager from '../tools/EventManager';
|
|
6
|
+
import type { GestureHandlerDelegate } from '../tools/GestureHandlerDelegate';
|
|
7
|
+
import type PointerTracker from '../tools/PointerTracker';
|
|
8
|
+
|
|
9
|
+
export default interface IGestureHandler {
|
|
10
|
+
getTag: () => number;
|
|
11
|
+
getState: () => State;
|
|
12
|
+
getConfig: () => Config;
|
|
13
|
+
getDelegate: () => GestureHandlerDelegate<unknown, this>;
|
|
14
|
+
|
|
15
|
+
attachEventManager: (manager: EventManager<unknown>) => void;
|
|
16
|
+
|
|
17
|
+
isButtonInConfig: (
|
|
18
|
+
mouseButton: MouseButton | undefined
|
|
19
|
+
) => boolean | number | undefined;
|
|
20
|
+
getPointerType: () => PointerType;
|
|
21
|
+
|
|
22
|
+
getTracker: () => PointerTracker;
|
|
23
|
+
getTrackedPointersID: () => number[];
|
|
24
|
+
|
|
25
|
+
begin: () => void;
|
|
26
|
+
activate: () => void;
|
|
27
|
+
end: () => void;
|
|
28
|
+
fail: () => void;
|
|
29
|
+
cancel: () => void;
|
|
30
|
+
|
|
31
|
+
reset: () => void;
|
|
32
|
+
isEnabled: () => boolean;
|
|
33
|
+
isActive: () => boolean;
|
|
34
|
+
setActive: (value: boolean) => void;
|
|
35
|
+
isAwaiting: () => boolean;
|
|
36
|
+
setAwaiting: (value: boolean) => void;
|
|
37
|
+
setActivationIndex: (value: number) => void;
|
|
38
|
+
setShouldResetProgress: (value: boolean) => void;
|
|
39
|
+
|
|
40
|
+
shouldWaitForHandlerFailure: (handler: IGestureHandler) => boolean;
|
|
41
|
+
shouldRequireToWaitForFailure: (handler: IGestureHandler) => boolean;
|
|
42
|
+
shouldRecognizeSimultaneously: (handler: IGestureHandler) => boolean;
|
|
43
|
+
shouldBeCancelledByOther: (handler: IGestureHandler) => boolean;
|
|
44
|
+
|
|
45
|
+
sendEvent: (newState: State, oldState: State) => void;
|
|
46
|
+
|
|
47
|
+
updateGestureConfig: (config: Config) => void;
|
|
48
|
+
|
|
49
|
+
isButton?: () => boolean;
|
|
50
|
+
}
|
|
@@ -28,15 +28,10 @@ export default class NativeViewGestureHandler extends GestureHandler {
|
|
|
28
28
|
const view = this.delegate.getView() as HTMLElement;
|
|
29
29
|
|
|
30
30
|
view.style['touchAction'] = 'auto';
|
|
31
|
-
|
|
32
31
|
//@ts-ignore Turns on defualt touch behavior on Safari
|
|
33
32
|
view.style['WebkitTouchCallout'] = 'auto';
|
|
34
33
|
|
|
35
|
-
|
|
36
|
-
this.buttonRole = true;
|
|
37
|
-
} else {
|
|
38
|
-
this.buttonRole = false;
|
|
39
|
-
}
|
|
34
|
+
this.buttonRole = view.getAttribute('role') === 'button';
|
|
40
35
|
}
|
|
41
36
|
|
|
42
37
|
public updateGestureConfig({ enabled = true, ...props }: Config): void {
|
|
@@ -164,4 +159,8 @@ export default class NativeViewGestureHandler extends GestureHandler {
|
|
|
164
159
|
public disallowsInterruption(): boolean {
|
|
165
160
|
return this.disallowInterruption;
|
|
166
161
|
}
|
|
162
|
+
|
|
163
|
+
public isButton(): boolean {
|
|
164
|
+
return this.buttonRole;
|
|
165
|
+
}
|
|
167
166
|
}
|
package/src/web/interfaces.ts
CHANGED
|
@@ -1,6 +1,12 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
UserSelect,
|
|
3
|
+
ActiveCursor,
|
|
4
|
+
MouseButton,
|
|
5
|
+
TouchAction,
|
|
6
|
+
} from '../handlers/gestureHandlerCommon';
|
|
2
7
|
import { Directions } from '../Directions';
|
|
3
8
|
import { State } from '../State';
|
|
9
|
+
import { PointerType } from '../PointerType';
|
|
4
10
|
|
|
5
11
|
export interface HitSlop {
|
|
6
12
|
left?: number;
|
|
@@ -22,6 +28,7 @@ type ConfigArgs =
|
|
|
22
28
|
| boolean
|
|
23
29
|
| HitSlop
|
|
24
30
|
| UserSelect
|
|
31
|
+
| TouchAction
|
|
25
32
|
| ActiveCursor
|
|
26
33
|
| Directions
|
|
27
34
|
| Handler[]
|
|
@@ -39,6 +46,7 @@ export interface Config extends Record<string, ConfigArgs> {
|
|
|
39
46
|
activeCursor?: ActiveCursor;
|
|
40
47
|
mouseButton?: MouseButton;
|
|
41
48
|
enableContextMenu?: boolean;
|
|
49
|
+
touchAction?: TouchAction;
|
|
42
50
|
|
|
43
51
|
activateAfterLongPress?: number;
|
|
44
52
|
failOffsetXStart?: number;
|
|
@@ -79,6 +87,12 @@ interface NativeEvent extends Record<string, NativeEventArgs> {
|
|
|
79
87
|
handlerTag: number;
|
|
80
88
|
target: number;
|
|
81
89
|
oldState?: State;
|
|
90
|
+
pointerType: PointerType;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
export interface Point {
|
|
94
|
+
x: number;
|
|
95
|
+
y: number;
|
|
82
96
|
}
|
|
83
97
|
|
|
84
98
|
export interface PointerData {
|
|
@@ -131,15 +145,6 @@ export interface AdaptedEvent {
|
|
|
131
145
|
touchEventType?: TouchEventType;
|
|
132
146
|
}
|
|
133
147
|
|
|
134
|
-
export enum MouseButton {
|
|
135
|
-
LEFT = 1,
|
|
136
|
-
MIDDLE = 2,
|
|
137
|
-
RIGHT = 4,
|
|
138
|
-
BUTTON_4 = 8,
|
|
139
|
-
BUTTON_5 = 16,
|
|
140
|
-
ALL = 31,
|
|
141
|
-
}
|
|
142
|
-
|
|
143
148
|
export enum EventTypes {
|
|
144
149
|
DOWN,
|
|
145
150
|
ADDITIONAL_POINTER_DOWN,
|
|
@@ -158,10 +163,3 @@ export enum TouchEventType {
|
|
|
158
163
|
UP,
|
|
159
164
|
CANCELLED,
|
|
160
165
|
}
|
|
161
|
-
|
|
162
|
-
export enum PointerType {
|
|
163
|
-
NONE = 'none',
|
|
164
|
-
MOUSE = 'mouse',
|
|
165
|
-
TOUCH = 'touch',
|
|
166
|
-
PEN = 'pen',
|
|
167
|
-
}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
/* eslint-disable @typescript-eslint/no-empty-function */
|
|
2
2
|
import { AdaptedEvent, EventTypes, TouchEventType } from '../interfaces';
|
|
3
3
|
|
|
4
|
+
type PointerEventCallback = (event: AdaptedEvent) => void;
|
|
5
|
+
|
|
4
6
|
export default abstract class EventManager<T> {
|
|
5
7
|
protected readonly view: T;
|
|
6
8
|
protected pointersInBounds: number[] = [];
|
|
@@ -11,7 +13,9 @@ export default abstract class EventManager<T> {
|
|
|
11
13
|
this.activePointersCounter = 0;
|
|
12
14
|
}
|
|
13
15
|
|
|
14
|
-
public abstract
|
|
16
|
+
public abstract registerListeners(): void;
|
|
17
|
+
public abstract unregisterListeners(): void;
|
|
18
|
+
|
|
15
19
|
protected abstract mapEvent(
|
|
16
20
|
event: Event,
|
|
17
21
|
eventType: EventTypes,
|
|
@@ -36,39 +40,37 @@ export default abstract class EventManager<T> {
|
|
|
36
40
|
protected onPointerMoveOver(_event: AdaptedEvent): void {}
|
|
37
41
|
protected onPointerMoveOut(_event: AdaptedEvent): void {}
|
|
38
42
|
|
|
39
|
-
public setOnPointerDown(callback:
|
|
43
|
+
public setOnPointerDown(callback: PointerEventCallback): void {
|
|
40
44
|
this.onPointerDown = callback;
|
|
41
45
|
}
|
|
42
|
-
public setOnPointerAdd(callback:
|
|
46
|
+
public setOnPointerAdd(callback: PointerEventCallback): void {
|
|
43
47
|
this.onPointerAdd = callback;
|
|
44
48
|
}
|
|
45
|
-
public setOnPointerUp(callback:
|
|
49
|
+
public setOnPointerUp(callback: PointerEventCallback): void {
|
|
46
50
|
this.onPointerUp = callback;
|
|
47
51
|
}
|
|
48
|
-
public setOnPointerRemove(callback:
|
|
52
|
+
public setOnPointerRemove(callback: PointerEventCallback): void {
|
|
49
53
|
this.onPointerRemove = callback;
|
|
50
54
|
}
|
|
51
|
-
public setOnPointerMove(callback:
|
|
55
|
+
public setOnPointerMove(callback: PointerEventCallback): void {
|
|
52
56
|
this.onPointerMove = callback;
|
|
53
57
|
}
|
|
54
|
-
public setOnPointerLeave(callback:
|
|
58
|
+
public setOnPointerLeave(callback: PointerEventCallback): void {
|
|
55
59
|
this.onPointerLeave = callback;
|
|
56
60
|
}
|
|
57
|
-
public setOnPointerEnter(callback:
|
|
61
|
+
public setOnPointerEnter(callback: PointerEventCallback): void {
|
|
58
62
|
this.onPointerEnter = callback;
|
|
59
63
|
}
|
|
60
|
-
public setOnPointerCancel(callback:
|
|
64
|
+
public setOnPointerCancel(callback: PointerEventCallback): void {
|
|
61
65
|
this.onPointerCancel = callback;
|
|
62
66
|
}
|
|
63
|
-
public setOnPointerOutOfBounds(
|
|
64
|
-
callback: (event: AdaptedEvent) => void
|
|
65
|
-
): void {
|
|
67
|
+
public setOnPointerOutOfBounds(callback: PointerEventCallback): void {
|
|
66
68
|
this.onPointerOutOfBounds = callback;
|
|
67
69
|
}
|
|
68
|
-
public setOnPointerMoveOver(callback:
|
|
70
|
+
public setOnPointerMoveOver(callback: PointerEventCallback): void {
|
|
69
71
|
this.onPointerMoveOver = callback;
|
|
70
72
|
}
|
|
71
|
-
public setOnPointerMoveOut(callback:
|
|
73
|
+
public setOnPointerMoveOut(callback: PointerEventCallback): void {
|
|
72
74
|
this.onPointerMoveOut = callback;
|
|
73
75
|
}
|
|
74
76
|
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import type GestureHandler from '../handlers/GestureHandler';
|
|
2
1
|
import { Config } from '../interfaces';
|
|
3
2
|
|
|
4
3
|
export interface MeasureResult {
|
|
@@ -8,10 +7,10 @@ export interface MeasureResult {
|
|
|
8
7
|
height: number;
|
|
9
8
|
}
|
|
10
9
|
|
|
11
|
-
export interface GestureHandlerDelegate<
|
|
12
|
-
getView():
|
|
10
|
+
export interface GestureHandlerDelegate<TComponent, THandler> {
|
|
11
|
+
getView(): TComponent;
|
|
13
12
|
|
|
14
|
-
init(viewRef: number, handler:
|
|
13
|
+
init(viewRef: number, handler: THandler): void;
|
|
15
14
|
isPointerInBounds({ x, y }: { x: number; y: number }): boolean;
|
|
16
15
|
measureView(): MeasureResult;
|
|
17
16
|
reset(): void;
|