react-native-gesture-handler 2.15.0 → 2.16.0
Sign up to get free protection for your applications and to get access to all the features.
- 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;
|