react-native-gesture-handler 2.6.0 → 2.6.2
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/android/build.gradle +2 -2
- package/ios/RNGestureHandler.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
- package/ios/RNGestureHandler.xcodeproj/project.xcworkspace/xcuserdata/jakubpiasecki.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
- package/ios/RNGestureHandler.xcodeproj/xcuserdata/jakubpiasecki.xcuserdatad/xcschemes/xcschememanagement.plist +19 -0
- package/lib/commonjs/EnableExperimentalWebImplementation.js +7 -0
- package/lib/commonjs/EnableExperimentalWebImplementation.js.map +1 -1
- package/lib/commonjs/RNGestureHandlerModule.js +1 -1
- package/lib/commonjs/RNGestureHandlerModule.js.map +1 -1
- package/lib/commonjs/RNGestureHandlerModule.macos.js +22 -13
- package/lib/commonjs/RNGestureHandlerModule.macos.js.map +1 -1
- package/lib/commonjs/RNGestureHandlerModule.web.js +23 -10
- package/lib/commonjs/RNGestureHandlerModule.web.js.map +1 -1
- package/lib/commonjs/components/GestureComponents.js +6 -4
- package/lib/commonjs/components/GestureComponents.js.map +1 -1
- package/lib/commonjs/components/GestureComponents.web.js +1 -1
- package/lib/commonjs/components/GestureComponents.web.js.map +1 -1
- package/lib/commonjs/components/Swipeable.js +4 -4
- package/lib/commonjs/components/Swipeable.js.map +1 -1
- package/lib/commonjs/fabric/RNGestureHandlerButtonNativeComponent.js +1 -5
- package/lib/commonjs/fabric/RNGestureHandlerButtonNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/RNGestureHandlerRootViewNativeComponent.js +1 -5
- package/lib/commonjs/fabric/RNGestureHandlerRootViewNativeComponent.js.map +1 -1
- package/lib/commonjs/handlers/gestures/GestureDetector.js +4 -2
- package/lib/commonjs/handlers/gestures/GestureDetector.js.map +1 -1
- package/lib/commonjs/handlers/gestures/eventReceiver.js +14 -20
- package/lib/commonjs/handlers/gestures/eventReceiver.js.map +1 -1
- package/lib/commonjs/handlers/gestures/gestureStateManager.web.js +32 -0
- package/lib/commonjs/handlers/gestures/gestureStateManager.web.js.map +1 -0
- package/lib/commonjs/utils.js +10 -6
- package/lib/commonjs/utils.js.map +1 -1
- package/lib/commonjs/web/detectors/RotationGestureDetector.js +13 -17
- package/lib/commonjs/web/detectors/RotationGestureDetector.js.map +1 -1
- package/lib/commonjs/web/detectors/ScaleGestureDetector.js +3 -14
- package/lib/commonjs/web/detectors/ScaleGestureDetector.js.map +1 -1
- package/lib/commonjs/web/handlers/FlingGestureHandler.js +37 -12
- package/lib/commonjs/web/handlers/FlingGestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/GestureHandler.js +330 -79
- package/lib/commonjs/web/handlers/GestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/LongPressGestureHandler.js +23 -18
- package/lib/commonjs/web/handlers/LongPressGestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/ManualGestureHandler.js +51 -0
- package/lib/commonjs/web/handlers/ManualGestureHandler.js.map +1 -0
- package/lib/commonjs/web/handlers/NativeViewGestureHandler.js +81 -22
- package/lib/commonjs/web/handlers/NativeViewGestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/PanGestureHandler.js +57 -40
- package/lib/commonjs/web/handlers/PanGestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/PinchGestureHandler.js +43 -34
- package/lib/commonjs/web/handlers/PinchGestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/RotationGestureHandler.js +45 -39
- package/lib/commonjs/web/handlers/RotationGestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/TapGestureHandler.js +52 -50
- package/lib/commonjs/web/handlers/TapGestureHandler.js.map +1 -1
- package/lib/commonjs/web/interfaces.js +22 -1
- package/lib/commonjs/web/interfaces.js.map +1 -1
- package/lib/commonjs/web/tools/EventManager.js +40 -96
- package/lib/commonjs/web/tools/EventManager.js.map +1 -1
- package/lib/commonjs/web/tools/GestureHandlerOrchestrator.js +109 -30
- package/lib/commonjs/web/tools/GestureHandlerOrchestrator.js.map +1 -1
- package/lib/commonjs/web/tools/InteractionManager.js +24 -10
- 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 +130 -0
- package/lib/commonjs/web/tools/PointerEventManager.js.map +1 -0
- package/lib/commonjs/web/tools/PointerTracker.js +97 -7
- package/lib/commonjs/web/tools/PointerTracker.js.map +1 -1
- package/lib/commonjs/web/tools/TouchEventManager.js +138 -0
- package/lib/commonjs/web/tools/TouchEventManager.js.map +1 -0
- package/lib/commonjs/web/utils.js +15 -0
- package/lib/commonjs/web/utils.js.map +1 -0
- package/lib/module/EnableExperimentalWebImplementation.js +5 -0
- package/lib/module/EnableExperimentalWebImplementation.js.map +1 -1
- package/lib/module/RNGestureHandlerModule.js +1 -1
- package/lib/module/RNGestureHandlerModule.js.map +1 -1
- package/lib/module/RNGestureHandlerModule.macos.js +21 -14
- package/lib/module/RNGestureHandlerModule.macos.js.map +1 -1
- package/lib/module/RNGestureHandlerModule.web.js +22 -11
- package/lib/module/RNGestureHandlerModule.web.js.map +1 -1
- package/lib/module/components/GestureComponents.js +6 -4
- package/lib/module/components/GestureComponents.js.map +1 -1
- package/lib/module/components/GestureComponents.web.js +1 -1
- package/lib/module/components/GestureComponents.web.js.map +1 -1
- package/lib/module/components/Swipeable.js +4 -4
- package/lib/module/components/Swipeable.js.map +1 -1
- package/lib/module/fabric/RNGestureHandlerButtonNativeComponent.js +1 -5
- package/lib/module/fabric/RNGestureHandlerButtonNativeComponent.js.map +1 -1
- package/lib/module/fabric/RNGestureHandlerRootViewNativeComponent.js +1 -4
- package/lib/module/fabric/RNGestureHandlerRootViewNativeComponent.js.map +1 -1
- package/lib/module/handlers/gestures/GestureDetector.js +5 -3
- package/lib/module/handlers/gestures/GestureDetector.js.map +1 -1
- package/lib/module/handlers/gestures/eventReceiver.js +14 -20
- package/lib/module/handlers/gestures/eventReceiver.js.map +1 -1
- package/lib/module/handlers/gestures/gestureStateManager.web.js +21 -0
- package/lib/module/handlers/gestures/gestureStateManager.web.js.map +1 -0
- package/lib/module/utils.js +7 -6
- package/lib/module/utils.js.map +1 -1
- package/lib/module/web/detectors/RotationGestureDetector.js +13 -17
- package/lib/module/web/detectors/RotationGestureDetector.js.map +1 -1
- package/lib/module/web/detectors/ScaleGestureDetector.js +3 -14
- package/lib/module/web/detectors/ScaleGestureDetector.js.map +1 -1
- package/lib/module/web/handlers/FlingGestureHandler.js +37 -12
- package/lib/module/web/handlers/FlingGestureHandler.js.map +1 -1
- package/lib/module/web/handlers/GestureHandler.js +324 -79
- package/lib/module/web/handlers/GestureHandler.js.map +1 -1
- package/lib/module/web/handlers/LongPressGestureHandler.js +23 -18
- package/lib/module/web/handlers/LongPressGestureHandler.js.map +1 -1
- package/lib/module/web/handlers/ManualGestureHandler.js +39 -0
- package/lib/module/web/handlers/ManualGestureHandler.js.map +1 -0
- package/lib/module/web/handlers/NativeViewGestureHandler.js +80 -22
- package/lib/module/web/handlers/NativeViewGestureHandler.js.map +1 -1
- package/lib/module/web/handlers/PanGestureHandler.js +57 -41
- package/lib/module/web/handlers/PanGestureHandler.js.map +1 -1
- package/lib/module/web/handlers/PinchGestureHandler.js +43 -33
- package/lib/module/web/handlers/PinchGestureHandler.js.map +1 -1
- package/lib/module/web/handlers/RotationGestureHandler.js +45 -38
- package/lib/module/web/handlers/RotationGestureHandler.js.map +1 -1
- package/lib/module/web/handlers/TapGestureHandler.js +52 -50
- package/lib/module/web/handlers/TapGestureHandler.js.map +1 -1
- package/lib/module/web/interfaces.js +19 -0
- package/lib/module/web/interfaces.js.map +1 -1
- package/lib/module/web/tools/EventManager.js +39 -95
- package/lib/module/web/tools/EventManager.js.map +1 -1
- package/lib/module/web/tools/GestureHandlerOrchestrator.js +107 -30
- package/lib/module/web/tools/GestureHandlerOrchestrator.js.map +1 -1
- package/lib/module/web/tools/InteractionManager.js +24 -10
- 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 +116 -0
- package/lib/module/web/tools/PointerEventManager.js.map +1 -0
- package/lib/module/web/tools/PointerTracker.js +97 -7
- package/lib/module/web/tools/PointerTracker.js.map +1 -1
- package/lib/module/web/tools/TouchEventManager.js +124 -0
- package/lib/module/web/tools/TouchEventManager.js.map +1 -0
- package/lib/module/web/utils.js +8 -0
- package/lib/module/web/utils.js.map +1 -0
- package/lib/typescript/RNGestureHandlerModule.macos.d.ts +6 -3
- package/lib/typescript/RNGestureHandlerModule.web.d.ts +5 -2
- package/lib/typescript/components/Swipeable.d.ts +3 -3
- package/lib/typescript/components/touchables/TouchableNativeFeedback.android.d.ts +1 -1
- package/lib/typescript/fabric/RNGestureHandlerButtonNativeComponent.d.ts +3 -3
- package/lib/typescript/fabric/RNGestureHandlerRootViewNativeComponent.d.ts +3 -2
- package/lib/typescript/handlers/gestures/gestureStateManager.web.d.ts +4 -0
- package/lib/typescript/utils.d.ts +4 -0
- package/lib/typescript/web/detectors/RotationGestureDetector.d.ts +7 -7
- package/lib/typescript/web/detectors/ScaleGestureDetector.d.ts +6 -7
- package/lib/typescript/web/handlers/FlingGestureHandler.d.ts +12 -10
- package/lib/typescript/web/handlers/GestureHandler.d.ts +42 -32
- package/lib/typescript/web/handlers/LongPressGestureHandler.d.ts +6 -9
- package/lib/typescript/web/handlers/ManualGestureHandler.d.ts +11 -0
- package/lib/typescript/web/handlers/NativeViewGestureHandler.d.ts +15 -6
- package/lib/typescript/web/handlers/PanGestureHandler.d.ts +15 -23
- package/lib/typescript/web/handlers/PinchGestureHandler.d.ts +11 -12
- package/lib/typescript/web/handlers/RotationGestureHandler.d.ts +12 -12
- package/lib/typescript/web/handlers/TapGestureHandler.d.ts +11 -14
- package/lib/typescript/web/interfaces.d.ts +50 -10
- package/lib/typescript/web/tools/EventManager.d.ts +28 -26
- package/lib/typescript/web/tools/GestureHandlerOrchestrator.d.ts +4 -2
- package/lib/typescript/web/tools/InteractionManager.d.ts +3 -0
- package/lib/typescript/web/tools/NodeManager.d.ts +3 -3
- package/lib/typescript/web/tools/PointerEventManager.d.ts +6 -0
- package/lib/typescript/web/tools/PointerTracker.d.ts +29 -5
- package/lib/typescript/web/tools/TouchEventManager.d.ts +6 -0
- package/lib/typescript/web/utils.d.ts +4 -0
- package/package.json +2 -2
- package/src/EnableExperimentalWebImplementation.ts +9 -0
- package/src/RNGestureHandlerModule.macos.ts +28 -13
- package/src/RNGestureHandlerModule.ts +4 -1
- package/src/RNGestureHandlerModule.web.ts +20 -7
- package/src/components/GestureComponents.tsx +12 -16
- package/src/components/GestureComponents.web.tsx +1 -1
- package/src/components/Swipeable.tsx +11 -7
- package/src/fabric/RNGestureHandlerButtonNativeComponent.ts +2 -12
- package/src/fabric/RNGestureHandlerRootViewNativeComponent.ts +2 -8
- package/src/handlers/gestures/GestureDetector.tsx +8 -4
- package/src/handlers/gestures/eventReceiver.ts +23 -24
- package/src/handlers/gestures/gestureStateManager.web.ts +24 -0
- package/src/utils.ts +6 -6
- package/src/web/detectors/RotationGestureDetector.ts +20 -52
- package/src/web/detectors/ScaleGestureDetector.ts +9 -45
- package/src/web/handlers/FlingGestureHandler.ts +45 -22
- package/src/web/handlers/GestureHandler.ts +365 -97
- package/src/web/handlers/LongPressGestureHandler.ts +30 -24
- package/src/web/handlers/ManualGestureHandler.ts +39 -0
- package/src/web/handlers/NativeViewGestureHandler.ts +81 -24
- package/src/web/handlers/PanGestureHandler.ts +68 -53
- package/src/web/handlers/PinchGestureHandler.ts +47 -44
- package/src/web/handlers/RotationGestureHandler.ts +52 -51
- package/src/web/handlers/TapGestureHandler.ts +74 -56
- package/src/web/interfaces.ts +57 -10
- package/src/web/tools/EventManager.ts +58 -148
- package/src/web/tools/GestureHandlerOrchestrator.ts +115 -47
- package/src/web/tools/InteractionManager.ts +25 -9
- package/src/web/tools/NodeManager.ts +6 -6
- package/src/web/tools/PointerEventManager.ts +134 -0
- package/src/web/tools/PointerTracker.ts +120 -10
- package/src/web/tools/TouchEventManager.ts +167 -0
- package/src/web/utils.ts +8 -0
|
@@ -3,9 +3,13 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope
|
|
|
3
3
|
/* eslint-disable @typescript-eslint/no-empty-function */
|
|
4
4
|
import { findNodeHandle } from 'react-native';
|
|
5
5
|
import { State } from '../../State';
|
|
6
|
-
import
|
|
6
|
+
import { PointerType, TouchEventType, EventTypes } from '../interfaces';
|
|
7
7
|
import GestureHandlerOrchestrator from '../tools/GestureHandlerOrchestrator';
|
|
8
|
+
import InteractionManager from '../tools/InteractionManager';
|
|
9
|
+
import PointerEventManager from '../tools/PointerEventManager';
|
|
8
10
|
import PointerTracker from '../tools/PointerTracker';
|
|
11
|
+
import TouchEventManager from '../tools/TouchEventManager';
|
|
12
|
+
import { isPointerInBounds } from '../utils';
|
|
9
13
|
export default class GestureHandler {
|
|
10
14
|
// Orchestrator properties
|
|
11
15
|
constructor() {
|
|
@@ -23,20 +27,18 @@ export default class GestureHandler {
|
|
|
23
27
|
|
|
24
28
|
_defineProperty(this, "propsRef", void 0);
|
|
25
29
|
|
|
30
|
+
_defineProperty(this, "handlerTag", void 0);
|
|
31
|
+
|
|
26
32
|
_defineProperty(this, "config", {
|
|
27
33
|
enabled: false
|
|
28
34
|
});
|
|
29
35
|
|
|
30
|
-
_defineProperty(this, "
|
|
31
|
-
|
|
32
|
-
_defineProperty(this, "view", null);
|
|
36
|
+
_defineProperty(this, "view", void 0);
|
|
33
37
|
|
|
34
|
-
_defineProperty(this, "
|
|
38
|
+
_defineProperty(this, "eventManagers", []);
|
|
35
39
|
|
|
36
40
|
_defineProperty(this, "tracker", new PointerTracker());
|
|
37
41
|
|
|
38
|
-
_defineProperty(this, "interactionManager", void 0);
|
|
39
|
-
|
|
40
42
|
_defineProperty(this, "activationIndex", 0);
|
|
41
43
|
|
|
42
44
|
_defineProperty(this, "awaiting", false);
|
|
@@ -45,12 +47,14 @@ export default class GestureHandler {
|
|
|
45
47
|
|
|
46
48
|
_defineProperty(this, "shouldResetProgress", false);
|
|
47
49
|
|
|
48
|
-
_defineProperty(this, "
|
|
50
|
+
_defineProperty(this, "pointerType", PointerType.NONE);
|
|
51
|
+
|
|
52
|
+
_defineProperty(this, "sendEvent", (newState, oldState) => {
|
|
49
53
|
const {
|
|
50
54
|
onGestureHandlerEvent,
|
|
51
55
|
onGestureHandlerStateChange
|
|
52
56
|
} = this.propsRef.current;
|
|
53
|
-
const resultEvent = this.transformEventData(
|
|
57
|
+
const resultEvent = this.transformEventData(newState, oldState); // In the new API oldState field has to be undefined, unless we send event state changed
|
|
54
58
|
// Here the order is flipped to avoid workarounds such as making backup of the state and setting it to undefined first, then changing it back
|
|
55
59
|
// Flipping order with setting oldState to undefined solves issue, when events were being sent twice instead of once
|
|
56
60
|
// However, this may cause trouble in the future (but for now we don't know that)
|
|
@@ -76,17 +80,17 @@ export default class GestureHandler {
|
|
|
76
80
|
this.propsRef = propsRef;
|
|
77
81
|
this.ref = ref;
|
|
78
82
|
this.currentState = State.UNDETERMINED;
|
|
79
|
-
this.setView(
|
|
80
|
-
this.
|
|
83
|
+
this.setView();
|
|
84
|
+
this.addEventManager(new PointerEventManager(this.view));
|
|
85
|
+
this.addEventManager(new TouchEventManager(this.view));
|
|
81
86
|
}
|
|
82
87
|
|
|
83
|
-
setView(
|
|
84
|
-
if (!ref) {
|
|
85
|
-
this.
|
|
86
|
-
return;
|
|
88
|
+
setView() {
|
|
89
|
+
if (!this.ref) {
|
|
90
|
+
throw new Error(`Cannot find HTML Element for handler ${this.handlerTag}`);
|
|
87
91
|
}
|
|
88
92
|
|
|
89
|
-
this.view = findNodeHandle(ref);
|
|
93
|
+
this.view = findNodeHandle(this.ref);
|
|
90
94
|
this.view.style['touchAction'] = 'none';
|
|
91
95
|
this.view.style['webkitUserSelect'] = 'none';
|
|
92
96
|
this.view.style['userSelect'] = 'none'; //@ts-ignore This one disables default events on Safari
|
|
@@ -94,24 +98,18 @@ export default class GestureHandler {
|
|
|
94
98
|
this.view.style['WebkitTouchCallout'] = 'none';
|
|
95
99
|
}
|
|
96
100
|
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
this.
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
this.
|
|
109
|
-
this.eventManager.setOnPointerOutOfBounds(this.onPointerOutOfBounds.bind(this));
|
|
110
|
-
this.eventManager.setListeners();
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
setInteractionManager(manager) {
|
|
114
|
-
this.interactionManager = manager;
|
|
101
|
+
addEventManager(manager) {
|
|
102
|
+
manager.setOnPointerDown(this.onPointerDown.bind(this));
|
|
103
|
+
manager.setOnPointerAdd(this.onPointerAdd.bind(this));
|
|
104
|
+
manager.setOnPointerUp(this.onPointerUp.bind(this));
|
|
105
|
+
manager.setOnPointerRemove(this.onPointerRemove.bind(this));
|
|
106
|
+
manager.setOnPointerMove(this.onPointerMove.bind(this));
|
|
107
|
+
manager.setOnPointerEnter(this.onPointerEnter.bind(this));
|
|
108
|
+
manager.setOnPointerOut(this.onPointerOut.bind(this));
|
|
109
|
+
manager.setOnPointerCancel(this.onPointerCancel.bind(this));
|
|
110
|
+
manager.setOnPointerOutOfBounds(this.onPointerOutOfBounds.bind(this));
|
|
111
|
+
manager.setListeners();
|
|
112
|
+
this.eventManagers.push(manager);
|
|
115
113
|
} //
|
|
116
114
|
// Resetting handler
|
|
117
115
|
//
|
|
@@ -126,59 +124,77 @@ export default class GestureHandler {
|
|
|
126
124
|
reset() {
|
|
127
125
|
this.tracker.resetTracker();
|
|
128
126
|
this.onReset();
|
|
127
|
+
this.resetProgress();
|
|
128
|
+
this.eventManagers.forEach(manager => manager.resetManager());
|
|
129
129
|
this.currentState = State.UNDETERMINED;
|
|
130
130
|
} //
|
|
131
131
|
// State logic
|
|
132
132
|
//
|
|
133
133
|
|
|
134
134
|
|
|
135
|
-
moveToState(newState,
|
|
135
|
+
moveToState(newState, sendIfDisabled) {
|
|
136
136
|
if (this.currentState === newState) {
|
|
137
137
|
return;
|
|
138
138
|
}
|
|
139
139
|
|
|
140
|
+
if (this.tracker.getTrackedPointersCount() > 0 && (newState === State.END || newState === State.CANCELLED || newState === State.FAILED)) {
|
|
141
|
+
this.cancelTouches();
|
|
142
|
+
}
|
|
143
|
+
|
|
140
144
|
const oldState = this.currentState;
|
|
141
145
|
this.currentState = newState;
|
|
142
|
-
GestureHandlerOrchestrator.getInstance().onHandlerStateChange(this, newState, oldState,
|
|
146
|
+
GestureHandlerOrchestrator.getInstance().onHandlerStateChange(this, newState, oldState, sendIfDisabled);
|
|
143
147
|
this.onStateChange(newState, oldState);
|
|
144
148
|
}
|
|
145
149
|
|
|
146
150
|
onStateChange(_newState, _oldState) {}
|
|
147
151
|
|
|
148
|
-
begin(
|
|
149
|
-
if (!this.checkHitSlop(
|
|
152
|
+
begin() {
|
|
153
|
+
if (!this.checkHitSlop()) {
|
|
150
154
|
return;
|
|
151
155
|
}
|
|
152
156
|
|
|
153
157
|
if (this.currentState === State.UNDETERMINED) {
|
|
154
|
-
this.moveToState(State.BEGAN
|
|
158
|
+
this.moveToState(State.BEGAN);
|
|
155
159
|
}
|
|
156
160
|
}
|
|
161
|
+
/**
|
|
162
|
+
* @param {boolean} sendIfDisabled - Used when handler becomes disabled. With this flag orchestrator will be forced to send fail event
|
|
163
|
+
*/
|
|
164
|
+
|
|
157
165
|
|
|
158
|
-
fail(
|
|
166
|
+
fail(sendIfDisabled) {
|
|
159
167
|
if (this.currentState === State.ACTIVE || this.currentState === State.BEGAN) {
|
|
160
|
-
this.moveToState(State.FAILED,
|
|
168
|
+
this.moveToState(State.FAILED, sendIfDisabled);
|
|
169
|
+
this.view.style.cursor = 'auto';
|
|
161
170
|
}
|
|
162
171
|
|
|
163
172
|
this.resetProgress();
|
|
164
173
|
}
|
|
174
|
+
/**
|
|
175
|
+
* @param {boolean} sendIfDisabled - Used when handler becomes disabled. With this flag orchestrator will be forced to send cancel event
|
|
176
|
+
*/
|
|
165
177
|
|
|
166
|
-
|
|
178
|
+
|
|
179
|
+
cancel(sendIfDisabled) {
|
|
167
180
|
if (this.currentState === State.ACTIVE || this.currentState === State.UNDETERMINED || this.currentState === State.BEGAN) {
|
|
168
181
|
this.onCancel();
|
|
169
|
-
this.moveToState(State.CANCELLED,
|
|
182
|
+
this.moveToState(State.CANCELLED, sendIfDisabled);
|
|
183
|
+
this.view.style.cursor = 'auto';
|
|
170
184
|
}
|
|
171
185
|
}
|
|
172
186
|
|
|
173
|
-
activate(
|
|
187
|
+
activate(_force = false) {
|
|
174
188
|
if (this.currentState === State.UNDETERMINED || this.currentState === State.BEGAN) {
|
|
175
|
-
this.moveToState(State.ACTIVE
|
|
189
|
+
this.moveToState(State.ACTIVE);
|
|
190
|
+
this.view.style.cursor = 'grab';
|
|
176
191
|
}
|
|
177
192
|
}
|
|
178
193
|
|
|
179
|
-
end(
|
|
194
|
+
end() {
|
|
180
195
|
if (this.currentState === State.BEGAN || this.currentState === State.ACTIVE) {
|
|
181
|
-
this.moveToState(State.END
|
|
196
|
+
this.moveToState(State.END);
|
|
197
|
+
this.view.style.cursor = 'auto';
|
|
182
198
|
}
|
|
183
199
|
|
|
184
200
|
this.resetProgress();
|
|
@@ -224,7 +240,7 @@ export default class GestureHandler {
|
|
|
224
240
|
return false;
|
|
225
241
|
}
|
|
226
242
|
|
|
227
|
-
return
|
|
243
|
+
return InteractionManager.getInstance().shouldWaitForHandlerFailure(this, handler);
|
|
228
244
|
}
|
|
229
245
|
|
|
230
246
|
shouldRequireToWaitForFailure(handler) {
|
|
@@ -232,7 +248,7 @@ export default class GestureHandler {
|
|
|
232
248
|
return false;
|
|
233
249
|
}
|
|
234
250
|
|
|
235
|
-
return
|
|
251
|
+
return InteractionManager.getInstance().shouldRequireHandlerToWaitForFailure(this, handler);
|
|
236
252
|
}
|
|
237
253
|
|
|
238
254
|
shouldRecognizeSimultaneously(handler) {
|
|
@@ -240,7 +256,7 @@ export default class GestureHandler {
|
|
|
240
256
|
return true;
|
|
241
257
|
}
|
|
242
258
|
|
|
243
|
-
return
|
|
259
|
+
return InteractionManager.getInstance().shouldRecognizeSimultaneously(this, handler);
|
|
244
260
|
}
|
|
245
261
|
|
|
246
262
|
shouldBeCancelledByOther(handler) {
|
|
@@ -248,59 +264,113 @@ export default class GestureHandler {
|
|
|
248
264
|
return false;
|
|
249
265
|
}
|
|
250
266
|
|
|
251
|
-
return
|
|
267
|
+
return InteractionManager.getInstance().shouldHandlerBeCancelledBy(this, handler);
|
|
252
268
|
} //
|
|
253
269
|
// Event actions
|
|
254
270
|
//
|
|
255
271
|
|
|
256
272
|
|
|
257
|
-
onPointerDown(
|
|
273
|
+
onPointerDown(event) {
|
|
258
274
|
GestureHandlerOrchestrator.getInstance().recordHandlerIfNotPresent(this);
|
|
275
|
+
this.pointerType = event.pointerType;
|
|
276
|
+
|
|
277
|
+
if (this.pointerType === PointerType.TOUCH) {
|
|
278
|
+
GestureHandlerOrchestrator.getInstance().cancelMouseAndPenGestures(this);
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
if (this.config.needsPointerData) {
|
|
282
|
+
this.sendTouchEvent(event);
|
|
283
|
+
}
|
|
259
284
|
} // Adding another pointer to existing ones
|
|
260
285
|
|
|
261
286
|
|
|
262
|
-
onPointerAdd(
|
|
287
|
+
onPointerAdd(event) {
|
|
288
|
+
if (this.config.needsPointerData) {
|
|
289
|
+
this.sendTouchEvent(event);
|
|
290
|
+
}
|
|
291
|
+
}
|
|
263
292
|
|
|
264
|
-
onPointerUp(
|
|
293
|
+
onPointerUp(event) {
|
|
294
|
+
if (this.config.needsPointerData) {
|
|
295
|
+
this.sendTouchEvent(event);
|
|
296
|
+
}
|
|
297
|
+
} // Removing pointer, when there is more than one pointers
|
|
265
298
|
|
|
266
299
|
|
|
267
|
-
onPointerRemove(
|
|
300
|
+
onPointerRemove(event) {
|
|
301
|
+
if (this.config.needsPointerData) {
|
|
302
|
+
this.sendTouchEvent(event);
|
|
303
|
+
}
|
|
304
|
+
}
|
|
268
305
|
|
|
269
306
|
onPointerMove(event) {
|
|
270
|
-
this.tryToSendMoveEvent(
|
|
307
|
+
this.tryToSendMoveEvent(false);
|
|
308
|
+
|
|
309
|
+
if (this.config.needsPointerData) {
|
|
310
|
+
this.sendTouchEvent(event);
|
|
311
|
+
}
|
|
271
312
|
}
|
|
272
313
|
|
|
273
|
-
onPointerOut(
|
|
314
|
+
onPointerOut(event) {
|
|
315
|
+
if (this.config.needsPointerData) {
|
|
316
|
+
this.sendTouchEvent(event);
|
|
317
|
+
}
|
|
318
|
+
}
|
|
274
319
|
|
|
275
|
-
onPointerEnter(
|
|
320
|
+
onPointerEnter(event) {
|
|
321
|
+
if (this.config.needsPointerData) {
|
|
322
|
+
this.sendTouchEvent(event);
|
|
323
|
+
}
|
|
324
|
+
}
|
|
276
325
|
|
|
277
|
-
onPointerCancel(
|
|
326
|
+
onPointerCancel(event) {
|
|
327
|
+
if (this.config.needsPointerData) {
|
|
328
|
+
this.sendTouchEvent(event);
|
|
329
|
+
}
|
|
330
|
+
}
|
|
278
331
|
|
|
279
332
|
onPointerOutOfBounds(event) {
|
|
280
|
-
this.tryToSendMoveEvent(
|
|
333
|
+
this.tryToSendMoveEvent(true);
|
|
334
|
+
|
|
335
|
+
if (this.config.needsPointerData) {
|
|
336
|
+
this.sendTouchEvent(event);
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
tryToSendMoveEvent(out) {
|
|
341
|
+
if (this.enabled && this.active && (!out || out && !this.shouldCancellWhenOutside)) {
|
|
342
|
+
this.sendEvent(this.currentState, this.currentState);
|
|
343
|
+
}
|
|
281
344
|
}
|
|
282
345
|
|
|
283
|
-
|
|
284
|
-
if (
|
|
285
|
-
|
|
346
|
+
sendTouchEvent(event) {
|
|
347
|
+
if (!this.enabled) {
|
|
348
|
+
return;
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
const {
|
|
352
|
+
onGestureHandlerEvent
|
|
353
|
+
} = this.propsRef.current;
|
|
354
|
+
const touchEvent = this.transformTouchEvent(event);
|
|
355
|
+
|
|
356
|
+
if (touchEvent) {
|
|
357
|
+
invokeNullableMethod(onGestureHandlerEvent, touchEvent);
|
|
286
358
|
}
|
|
287
359
|
} //
|
|
288
360
|
// Events Sending
|
|
289
361
|
//
|
|
290
362
|
|
|
291
363
|
|
|
292
|
-
transformEventData(
|
|
293
|
-
var _this$eventManager;
|
|
294
|
-
|
|
364
|
+
transformEventData(newState, oldState) {
|
|
295
365
|
return {
|
|
296
366
|
nativeEvent: {
|
|
297
367
|
numberOfPointers: this.tracker.getTrackedPointersCount(),
|
|
298
368
|
state: newState,
|
|
299
|
-
pointerInside: (
|
|
300
|
-
x:
|
|
301
|
-
y:
|
|
369
|
+
pointerInside: isPointerInBounds(this.view, {
|
|
370
|
+
x: this.tracker.getLastAvgX(),
|
|
371
|
+
y: this.tracker.getLastAvgY()
|
|
302
372
|
}),
|
|
303
|
-
...this.transformNativeEvent(
|
|
373
|
+
...this.transformNativeEvent(),
|
|
304
374
|
handlerTag: this.handlerTag,
|
|
305
375
|
target: this.ref,
|
|
306
376
|
oldState: newState !== oldState ? oldState : undefined
|
|
@@ -309,7 +379,143 @@ export default class GestureHandler {
|
|
|
309
379
|
};
|
|
310
380
|
}
|
|
311
381
|
|
|
312
|
-
|
|
382
|
+
transformTouchEvent(event) {
|
|
383
|
+
var _event$touchEventType;
|
|
384
|
+
|
|
385
|
+
const rect = this.view.getBoundingClientRect();
|
|
386
|
+
const all = [];
|
|
387
|
+
const changed = [];
|
|
388
|
+
const trackerData = this.tracker.getData(); // This if handles edge case where all pointers have been cancelled
|
|
389
|
+
// When pointercancel is triggered, reset method is called. This means that tracker will be reset after first pointer being cancelled
|
|
390
|
+
// The problem is, that handler will receive another pointercancel event from the rest of the pointers
|
|
391
|
+
// To avoid crashing, we don't send event if tracker tracks no pointers, i.e. has been reset
|
|
392
|
+
|
|
393
|
+
if (trackerData.size === 0 || !trackerData.has(event.pointerId)) {
|
|
394
|
+
return;
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
trackerData.forEach((element, key) => {
|
|
398
|
+
const id = this.tracker.getMappedTouchEventId(key);
|
|
399
|
+
all.push({
|
|
400
|
+
id: id,
|
|
401
|
+
x: element.lastX - rect.left,
|
|
402
|
+
y: element.lastY - rect.top,
|
|
403
|
+
absoluteX: element.lastX,
|
|
404
|
+
absoluteY: element.lastY
|
|
405
|
+
});
|
|
406
|
+
}); // Each pointer sends its own event, so we want changed touches to contain only the pointer that has changed.
|
|
407
|
+
// However, if the event is cancel, we want to cancel all pointers to avoid crashes
|
|
408
|
+
|
|
409
|
+
if (event.eventType !== EventTypes.CANCEL) {
|
|
410
|
+
changed.push({
|
|
411
|
+
id: this.tracker.getMappedTouchEventId(event.pointerId),
|
|
412
|
+
x: event.x - rect.left,
|
|
413
|
+
y: event.y - rect.top,
|
|
414
|
+
absoluteX: event.x,
|
|
415
|
+
absoluteY: event.y
|
|
416
|
+
});
|
|
417
|
+
} else {
|
|
418
|
+
trackerData.forEach((element, key) => {
|
|
419
|
+
const id = this.tracker.getMappedTouchEventId(key);
|
|
420
|
+
changed.push({
|
|
421
|
+
id: id,
|
|
422
|
+
x: element.lastX - rect.left,
|
|
423
|
+
y: element.lastY - rect.top,
|
|
424
|
+
absoluteX: element.lastX,
|
|
425
|
+
absoluteY: element.lastY
|
|
426
|
+
});
|
|
427
|
+
});
|
|
428
|
+
}
|
|
429
|
+
|
|
430
|
+
let eventType = TouchEventType.UNDETERMINED;
|
|
431
|
+
|
|
432
|
+
switch (event.eventType) {
|
|
433
|
+
case EventTypes.DOWN:
|
|
434
|
+
case EventTypes.ADDITIONAL_POINTER_DOWN:
|
|
435
|
+
eventType = TouchEventType.DOWN;
|
|
436
|
+
break;
|
|
437
|
+
|
|
438
|
+
case EventTypes.UP:
|
|
439
|
+
case EventTypes.ADDITIONAL_POINTER_UP:
|
|
440
|
+
eventType = TouchEventType.UP;
|
|
441
|
+
break;
|
|
442
|
+
|
|
443
|
+
case EventTypes.MOVE:
|
|
444
|
+
eventType = TouchEventType.MOVE;
|
|
445
|
+
break;
|
|
446
|
+
|
|
447
|
+
case EventTypes.CANCEL:
|
|
448
|
+
eventType = TouchEventType.CANCELLED;
|
|
449
|
+
break;
|
|
450
|
+
} // Here, when we receive up event, we want to decrease number of touches
|
|
451
|
+
// That's because we want handler to send information that there's one pointer less
|
|
452
|
+
// However, we still want this pointer to be present in allTouches array, so that its data can be accessed
|
|
453
|
+
|
|
454
|
+
|
|
455
|
+
let numberOfTouches = all.length;
|
|
456
|
+
|
|
457
|
+
if (event.eventType === EventTypes.UP || event.eventType === EventTypes.ADDITIONAL_POINTER_UP) {
|
|
458
|
+
--numberOfTouches;
|
|
459
|
+
}
|
|
460
|
+
|
|
461
|
+
return {
|
|
462
|
+
nativeEvent: {
|
|
463
|
+
handlerTag: this.handlerTag,
|
|
464
|
+
state: this.currentState,
|
|
465
|
+
eventType: (_event$touchEventType = event.touchEventType) !== null && _event$touchEventType !== void 0 ? _event$touchEventType : eventType,
|
|
466
|
+
changedTouches: changed,
|
|
467
|
+
allTouches: all,
|
|
468
|
+
numberOfTouches: numberOfTouches
|
|
469
|
+
},
|
|
470
|
+
timeStamp: Date.now()
|
|
471
|
+
};
|
|
472
|
+
}
|
|
473
|
+
|
|
474
|
+
cancelTouches() {
|
|
475
|
+
const rect = this.view.getBoundingClientRect();
|
|
476
|
+
const all = [];
|
|
477
|
+
const changed = [];
|
|
478
|
+
const trackerData = this.tracker.getData();
|
|
479
|
+
|
|
480
|
+
if (trackerData.size === 0) {
|
|
481
|
+
return;
|
|
482
|
+
}
|
|
483
|
+
|
|
484
|
+
trackerData.forEach((element, key) => {
|
|
485
|
+
const id = this.tracker.getMappedTouchEventId(key);
|
|
486
|
+
all.push({
|
|
487
|
+
id: id,
|
|
488
|
+
x: element.lastX - rect.left,
|
|
489
|
+
y: element.lastY - rect.top,
|
|
490
|
+
absoluteX: element.lastX,
|
|
491
|
+
absoluteY: element.lastY
|
|
492
|
+
});
|
|
493
|
+
changed.push({
|
|
494
|
+
id: id,
|
|
495
|
+
x: element.lastX - rect.left,
|
|
496
|
+
y: element.lastY - rect.top,
|
|
497
|
+
absoluteX: element.lastX,
|
|
498
|
+
absoluteY: element.lastY
|
|
499
|
+
});
|
|
500
|
+
});
|
|
501
|
+
const cancelEvent = {
|
|
502
|
+
nativeEvent: {
|
|
503
|
+
handlerTag: this.handlerTag,
|
|
504
|
+
state: this.currentState,
|
|
505
|
+
eventType: TouchEventType.CANCELLED,
|
|
506
|
+
changedTouches: changed,
|
|
507
|
+
allTouches: all,
|
|
508
|
+
numberOfTouches: all.length
|
|
509
|
+
},
|
|
510
|
+
timeStamp: Date.now()
|
|
511
|
+
};
|
|
512
|
+
const {
|
|
513
|
+
onGestureHandlerEvent
|
|
514
|
+
} = this.propsRef.current;
|
|
515
|
+
invokeNullableMethod(onGestureHandlerEvent, cancelEvent);
|
|
516
|
+
}
|
|
517
|
+
|
|
518
|
+
transformNativeEvent() {
|
|
313
519
|
return {};
|
|
314
520
|
} //
|
|
315
521
|
// Handling config
|
|
@@ -321,10 +527,29 @@ export default class GestureHandler {
|
|
|
321
527
|
...props
|
|
322
528
|
}) {
|
|
323
529
|
this.config = {
|
|
324
|
-
enabled,
|
|
530
|
+
enabled: enabled,
|
|
325
531
|
...props
|
|
326
532
|
};
|
|
533
|
+
this.enabled = enabled;
|
|
327
534
|
this.validateHitSlops();
|
|
535
|
+
|
|
536
|
+
if (this.enabled) {
|
|
537
|
+
return;
|
|
538
|
+
}
|
|
539
|
+
|
|
540
|
+
switch (this.currentState) {
|
|
541
|
+
case State.ACTIVE:
|
|
542
|
+
this.fail(true);
|
|
543
|
+
break;
|
|
544
|
+
|
|
545
|
+
case State.UNDETERMINED:
|
|
546
|
+
GestureHandlerOrchestrator.getInstance().removeHandlerFromOrchestrator(this);
|
|
547
|
+
break;
|
|
548
|
+
|
|
549
|
+
default:
|
|
550
|
+
this.cancel(true);
|
|
551
|
+
break;
|
|
552
|
+
}
|
|
328
553
|
}
|
|
329
554
|
|
|
330
555
|
checkCustomActivationCriteria(criterias) {
|
|
@@ -357,8 +582,8 @@ export default class GestureHandler {
|
|
|
357
582
|
}
|
|
358
583
|
}
|
|
359
584
|
|
|
360
|
-
checkHitSlop(
|
|
361
|
-
if (!this.config.hitSlop
|
|
585
|
+
checkHitSlop() {
|
|
586
|
+
if (!this.config.hitSlop) {
|
|
362
587
|
return true;
|
|
363
588
|
}
|
|
364
589
|
|
|
@@ -411,13 +636,25 @@ export default class GestureHandler {
|
|
|
411
636
|
}
|
|
412
637
|
}
|
|
413
638
|
|
|
414
|
-
|
|
639
|
+
const rect = this.view.getBoundingClientRect();
|
|
640
|
+
const offsetX = this.tracker.getLastX() - rect.left;
|
|
641
|
+
const offsetY = this.tracker.getLastY() - rect.top;
|
|
642
|
+
|
|
643
|
+
if (offsetX >= left && offsetX <= right && offsetY >= top && offsetY <= bottom) {
|
|
415
644
|
return true;
|
|
416
645
|
}
|
|
417
646
|
|
|
418
647
|
return false;
|
|
419
648
|
}
|
|
420
649
|
|
|
650
|
+
isPointerInBounds({
|
|
651
|
+
x,
|
|
652
|
+
y
|
|
653
|
+
}) {
|
|
654
|
+
const rect = this.view.getBoundingClientRect();
|
|
655
|
+
return x >= rect.left && x <= rect.right && y >= rect.top && y <= rect.bottom;
|
|
656
|
+
}
|
|
657
|
+
|
|
421
658
|
resetConfig() {} //
|
|
422
659
|
// Getters and setters
|
|
423
660
|
//
|
|
@@ -443,8 +680,8 @@ export default class GestureHandler {
|
|
|
443
680
|
return this.view;
|
|
444
681
|
}
|
|
445
682
|
|
|
446
|
-
|
|
447
|
-
return this.
|
|
683
|
+
getEventManagers() {
|
|
684
|
+
return this.eventManagers;
|
|
448
685
|
}
|
|
449
686
|
|
|
450
687
|
getTracker() {
|
|
@@ -459,14 +696,22 @@ export default class GestureHandler {
|
|
|
459
696
|
return this.currentState;
|
|
460
697
|
}
|
|
461
698
|
|
|
462
|
-
|
|
463
|
-
this.
|
|
699
|
+
isEnabled() {
|
|
700
|
+
return this.enabled;
|
|
701
|
+
}
|
|
702
|
+
|
|
703
|
+
setShouldCancelWhenOutside(shouldCancel) {
|
|
704
|
+
this.shouldCancellWhenOutside = shouldCancel;
|
|
464
705
|
}
|
|
465
706
|
|
|
466
707
|
getShouldCancelWhenOutside() {
|
|
467
708
|
return this.shouldCancellWhenOutside;
|
|
468
709
|
}
|
|
469
710
|
|
|
711
|
+
getPointerType() {
|
|
712
|
+
return this.pointerType;
|
|
713
|
+
}
|
|
714
|
+
|
|
470
715
|
}
|
|
471
716
|
|
|
472
717
|
function invokeNullableMethod(method, event) {
|