react-native-gesture-handler 2.6.0 → 2.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/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 +20 -9
- 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.web.js +1 -1
- package/lib/commonjs/components/GestureComponents.web.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.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/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 +282 -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 +19 -10
- 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.web.js +1 -1
- package/lib/module/components/GestureComponents.web.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.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/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 +276 -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 +5 -2
- package/lib/typescript/RNGestureHandlerModule.web.d.ts +5 -2
- 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/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 +41 -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 +25 -10
- package/src/RNGestureHandlerModule.ts +4 -1
- package/src/RNGestureHandlerModule.web.ts +20 -7
- package/src/components/GestureComponents.web.tsx +1 -1
- package/src/fabric/RNGestureHandlerButtonNativeComponent.ts +2 -12
- package/src/fabric/RNGestureHandlerRootViewNativeComponent.ts +2 -8
- package/src/handlers/gestures/GestureDetector.tsx +0 -1
- package/src/handlers/gestures/eventReceiver.ts +23 -24
- package/src/handlers/gestures/gestureStateManager.web.ts +24 -0
- 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 +306 -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,73 @@ 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
140
|
const oldState = this.currentState;
|
|
141
141
|
this.currentState = newState;
|
|
142
|
-
GestureHandlerOrchestrator.getInstance().onHandlerStateChange(this, newState, oldState,
|
|
142
|
+
GestureHandlerOrchestrator.getInstance().onHandlerStateChange(this, newState, oldState, sendIfDisabled);
|
|
143
143
|
this.onStateChange(newState, oldState);
|
|
144
144
|
}
|
|
145
145
|
|
|
146
146
|
onStateChange(_newState, _oldState) {}
|
|
147
147
|
|
|
148
|
-
begin(
|
|
149
|
-
if (!this.checkHitSlop(
|
|
148
|
+
begin() {
|
|
149
|
+
if (!this.checkHitSlop()) {
|
|
150
150
|
return;
|
|
151
151
|
}
|
|
152
152
|
|
|
153
153
|
if (this.currentState === State.UNDETERMINED) {
|
|
154
|
-
this.moveToState(State.BEGAN
|
|
154
|
+
this.moveToState(State.BEGAN);
|
|
155
155
|
}
|
|
156
156
|
}
|
|
157
|
+
/**
|
|
158
|
+
* @param {boolean} sendIfDisabled - Used when handler becomes disabled. With this flag orchestrator will be forced to send fail event
|
|
159
|
+
*/
|
|
160
|
+
|
|
157
161
|
|
|
158
|
-
fail(
|
|
162
|
+
fail(sendIfDisabled) {
|
|
159
163
|
if (this.currentState === State.ACTIVE || this.currentState === State.BEGAN) {
|
|
160
|
-
this.moveToState(State.FAILED,
|
|
164
|
+
this.moveToState(State.FAILED, sendIfDisabled);
|
|
165
|
+
this.view.style.cursor = 'auto';
|
|
161
166
|
}
|
|
162
167
|
|
|
163
168
|
this.resetProgress();
|
|
164
169
|
}
|
|
170
|
+
/**
|
|
171
|
+
* @param {boolean} sendIfDisabled - Used when handler becomes disabled. With this flag orchestrator will be forced to send cancel event
|
|
172
|
+
*/
|
|
165
173
|
|
|
166
|
-
|
|
174
|
+
|
|
175
|
+
cancel(sendIfDisabled) {
|
|
167
176
|
if (this.currentState === State.ACTIVE || this.currentState === State.UNDETERMINED || this.currentState === State.BEGAN) {
|
|
168
177
|
this.onCancel();
|
|
169
|
-
this.moveToState(State.CANCELLED,
|
|
178
|
+
this.moveToState(State.CANCELLED, sendIfDisabled);
|
|
179
|
+
this.view.style.cursor = 'auto';
|
|
170
180
|
}
|
|
171
181
|
}
|
|
172
182
|
|
|
173
|
-
activate(
|
|
183
|
+
activate(_force = false) {
|
|
174
184
|
if (this.currentState === State.UNDETERMINED || this.currentState === State.BEGAN) {
|
|
175
|
-
this.moveToState(State.ACTIVE
|
|
185
|
+
this.moveToState(State.ACTIVE);
|
|
186
|
+
this.view.style.cursor = 'grab';
|
|
176
187
|
}
|
|
177
188
|
}
|
|
178
189
|
|
|
179
|
-
end(
|
|
190
|
+
end() {
|
|
180
191
|
if (this.currentState === State.BEGAN || this.currentState === State.ACTIVE) {
|
|
181
|
-
this.moveToState(State.END
|
|
192
|
+
this.moveToState(State.END);
|
|
193
|
+
this.view.style.cursor = 'auto';
|
|
182
194
|
}
|
|
183
195
|
|
|
184
196
|
this.resetProgress();
|
|
@@ -224,7 +236,7 @@ export default class GestureHandler {
|
|
|
224
236
|
return false;
|
|
225
237
|
}
|
|
226
238
|
|
|
227
|
-
return
|
|
239
|
+
return InteractionManager.getInstance().shouldWaitForHandlerFailure(this, handler);
|
|
228
240
|
}
|
|
229
241
|
|
|
230
242
|
shouldRequireToWaitForFailure(handler) {
|
|
@@ -232,7 +244,7 @@ export default class GestureHandler {
|
|
|
232
244
|
return false;
|
|
233
245
|
}
|
|
234
246
|
|
|
235
|
-
return
|
|
247
|
+
return InteractionManager.getInstance().shouldRequireHandlerToWaitForFailure(this, handler);
|
|
236
248
|
}
|
|
237
249
|
|
|
238
250
|
shouldRecognizeSimultaneously(handler) {
|
|
@@ -240,7 +252,7 @@ export default class GestureHandler {
|
|
|
240
252
|
return true;
|
|
241
253
|
}
|
|
242
254
|
|
|
243
|
-
return
|
|
255
|
+
return InteractionManager.getInstance().shouldRecognizeSimultaneously(this, handler);
|
|
244
256
|
}
|
|
245
257
|
|
|
246
258
|
shouldBeCancelledByOther(handler) {
|
|
@@ -248,59 +260,113 @@ export default class GestureHandler {
|
|
|
248
260
|
return false;
|
|
249
261
|
}
|
|
250
262
|
|
|
251
|
-
return
|
|
263
|
+
return InteractionManager.getInstance().shouldHandlerBeCancelledBy(this, handler);
|
|
252
264
|
} //
|
|
253
265
|
// Event actions
|
|
254
266
|
//
|
|
255
267
|
|
|
256
268
|
|
|
257
|
-
onPointerDown(
|
|
269
|
+
onPointerDown(event) {
|
|
258
270
|
GestureHandlerOrchestrator.getInstance().recordHandlerIfNotPresent(this);
|
|
271
|
+
this.pointerType = event.pointerType;
|
|
272
|
+
|
|
273
|
+
if (this.pointerType === PointerType.TOUCH) {
|
|
274
|
+
GestureHandlerOrchestrator.getInstance().cancelMouseAndPenGestures(this);
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
if (this.config.needsPointerData) {
|
|
278
|
+
this.sendTouchEvent(event);
|
|
279
|
+
}
|
|
259
280
|
} // Adding another pointer to existing ones
|
|
260
281
|
|
|
261
282
|
|
|
262
|
-
onPointerAdd(
|
|
283
|
+
onPointerAdd(event) {
|
|
284
|
+
if (this.config.needsPointerData) {
|
|
285
|
+
this.sendTouchEvent(event);
|
|
286
|
+
}
|
|
287
|
+
}
|
|
263
288
|
|
|
264
|
-
onPointerUp(
|
|
289
|
+
onPointerUp(event) {
|
|
290
|
+
if (this.config.needsPointerData) {
|
|
291
|
+
this.sendTouchEvent(event);
|
|
292
|
+
}
|
|
293
|
+
} // Removing pointer, when there is more than one pointers
|
|
265
294
|
|
|
266
295
|
|
|
267
|
-
onPointerRemove(
|
|
296
|
+
onPointerRemove(event) {
|
|
297
|
+
if (this.config.needsPointerData) {
|
|
298
|
+
this.sendTouchEvent(event);
|
|
299
|
+
}
|
|
300
|
+
}
|
|
268
301
|
|
|
269
302
|
onPointerMove(event) {
|
|
270
|
-
this.tryToSendMoveEvent(
|
|
303
|
+
this.tryToSendMoveEvent(false);
|
|
304
|
+
|
|
305
|
+
if (this.config.needsPointerData) {
|
|
306
|
+
this.sendTouchEvent(event);
|
|
307
|
+
}
|
|
271
308
|
}
|
|
272
309
|
|
|
273
|
-
onPointerOut(
|
|
310
|
+
onPointerOut(event) {
|
|
311
|
+
if (this.config.needsPointerData) {
|
|
312
|
+
this.sendTouchEvent(event);
|
|
313
|
+
}
|
|
314
|
+
}
|
|
274
315
|
|
|
275
|
-
onPointerEnter(
|
|
316
|
+
onPointerEnter(event) {
|
|
317
|
+
if (this.config.needsPointerData) {
|
|
318
|
+
this.sendTouchEvent(event);
|
|
319
|
+
}
|
|
320
|
+
}
|
|
276
321
|
|
|
277
|
-
onPointerCancel(
|
|
322
|
+
onPointerCancel(event) {
|
|
323
|
+
if (this.config.needsPointerData) {
|
|
324
|
+
this.sendTouchEvent(event);
|
|
325
|
+
}
|
|
326
|
+
}
|
|
278
327
|
|
|
279
328
|
onPointerOutOfBounds(event) {
|
|
280
|
-
this.tryToSendMoveEvent(
|
|
329
|
+
this.tryToSendMoveEvent(true);
|
|
330
|
+
|
|
331
|
+
if (this.config.needsPointerData) {
|
|
332
|
+
this.sendTouchEvent(event);
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
tryToSendMoveEvent(out) {
|
|
337
|
+
if (this.enabled && this.active && (!out || out && !this.shouldCancellWhenOutside)) {
|
|
338
|
+
this.sendEvent(this.currentState, this.currentState);
|
|
339
|
+
}
|
|
281
340
|
}
|
|
282
341
|
|
|
283
|
-
|
|
284
|
-
if (
|
|
285
|
-
|
|
342
|
+
sendTouchEvent(event) {
|
|
343
|
+
if (!this.enabled) {
|
|
344
|
+
return;
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
const {
|
|
348
|
+
onGestureHandlerEvent
|
|
349
|
+
} = this.propsRef.current;
|
|
350
|
+
const touchEvent = this.transformTouchEvent(event);
|
|
351
|
+
|
|
352
|
+
if (touchEvent) {
|
|
353
|
+
invokeNullableMethod(onGestureHandlerEvent, touchEvent);
|
|
286
354
|
}
|
|
287
355
|
} //
|
|
288
356
|
// Events Sending
|
|
289
357
|
//
|
|
290
358
|
|
|
291
359
|
|
|
292
|
-
transformEventData(
|
|
293
|
-
var _this$eventManager;
|
|
294
|
-
|
|
360
|
+
transformEventData(newState, oldState) {
|
|
295
361
|
return {
|
|
296
362
|
nativeEvent: {
|
|
297
363
|
numberOfPointers: this.tracker.getTrackedPointersCount(),
|
|
298
364
|
state: newState,
|
|
299
|
-
pointerInside: (
|
|
300
|
-
x:
|
|
301
|
-
y:
|
|
365
|
+
pointerInside: isPointerInBounds(this.view, {
|
|
366
|
+
x: this.tracker.getLastAvgX(),
|
|
367
|
+
y: this.tracker.getLastAvgY()
|
|
302
368
|
}),
|
|
303
|
-
...this.transformNativeEvent(
|
|
369
|
+
...this.transformNativeEvent(),
|
|
304
370
|
handlerTag: this.handlerTag,
|
|
305
371
|
target: this.ref,
|
|
306
372
|
oldState: newState !== oldState ? oldState : undefined
|
|
@@ -309,7 +375,99 @@ export default class GestureHandler {
|
|
|
309
375
|
};
|
|
310
376
|
}
|
|
311
377
|
|
|
312
|
-
|
|
378
|
+
transformTouchEvent(event) {
|
|
379
|
+
var _event$touchEventType;
|
|
380
|
+
|
|
381
|
+
const rect = this.view.getBoundingClientRect();
|
|
382
|
+
const all = [];
|
|
383
|
+
const changed = [];
|
|
384
|
+
const trackerData = this.tracker.getData(); // This if handles edge case where all pointers have been cancelled
|
|
385
|
+
// When pointercancel is triggered, reset method is called. This means that tracker will be reset after first pointer being cancelled
|
|
386
|
+
// The problem is, that handler will receive another pointercancel event from the rest of the pointers
|
|
387
|
+
// To avoid crashing, we don't send event if tracker tracks no pointers, i.e. has been reset
|
|
388
|
+
|
|
389
|
+
if (trackerData.size === 0 || !trackerData.has(event.pointerId)) {
|
|
390
|
+
return;
|
|
391
|
+
}
|
|
392
|
+
|
|
393
|
+
trackerData.forEach((element, key) => {
|
|
394
|
+
const id = this.tracker.getMappedTouchEventId(key);
|
|
395
|
+
all.push({
|
|
396
|
+
id: id,
|
|
397
|
+
x: element.lastX - rect.left,
|
|
398
|
+
y: element.lastY - rect.top,
|
|
399
|
+
absoluteX: element.lastX,
|
|
400
|
+
absoluteY: element.lastY
|
|
401
|
+
});
|
|
402
|
+
}); // Each pointer sends its own event, so we want changed touches to contain only the pointer that has changed.
|
|
403
|
+
// However, if the event is cancel, we want to cancel all pointers to avoid crashes
|
|
404
|
+
|
|
405
|
+
if (event.eventType !== EventTypes.CANCEL) {
|
|
406
|
+
changed.push({
|
|
407
|
+
id: this.tracker.getMappedTouchEventId(event.pointerId),
|
|
408
|
+
x: event.x - rect.left,
|
|
409
|
+
y: event.y - rect.top,
|
|
410
|
+
absoluteX: event.x,
|
|
411
|
+
absoluteY: event.y
|
|
412
|
+
});
|
|
413
|
+
} else {
|
|
414
|
+
trackerData.forEach((element, key) => {
|
|
415
|
+
const id = this.tracker.getMappedTouchEventId(key);
|
|
416
|
+
changed.push({
|
|
417
|
+
id: id,
|
|
418
|
+
x: element.lastX - rect.left,
|
|
419
|
+
y: element.lastY - rect.top,
|
|
420
|
+
absoluteX: element.lastX,
|
|
421
|
+
absoluteY: element.lastY
|
|
422
|
+
});
|
|
423
|
+
});
|
|
424
|
+
}
|
|
425
|
+
|
|
426
|
+
let eventType = TouchEventType.UNDETERMINED;
|
|
427
|
+
|
|
428
|
+
switch (event.eventType) {
|
|
429
|
+
case EventTypes.DOWN:
|
|
430
|
+
case EventTypes.ADDITIONAL_POINTER_DOWN:
|
|
431
|
+
eventType = TouchEventType.DOWN;
|
|
432
|
+
break;
|
|
433
|
+
|
|
434
|
+
case EventTypes.UP:
|
|
435
|
+
case EventTypes.ADDITIONAL_POINTER_UP:
|
|
436
|
+
eventType = TouchEventType.UP;
|
|
437
|
+
break;
|
|
438
|
+
|
|
439
|
+
case EventTypes.MOVE:
|
|
440
|
+
eventType = TouchEventType.MOVE;
|
|
441
|
+
break;
|
|
442
|
+
|
|
443
|
+
case EventTypes.CANCEL:
|
|
444
|
+
eventType = TouchEventType.CANCELLED;
|
|
445
|
+
break;
|
|
446
|
+
} // Here, when we receive up event, we want to decrease number of touches
|
|
447
|
+
// That's because we want handler to send information that there's one pointer less
|
|
448
|
+
// However, we still want this pointer to be present in allTouches array, so that its data can be accessed
|
|
449
|
+
|
|
450
|
+
|
|
451
|
+
let numberOfTouches = all.length;
|
|
452
|
+
|
|
453
|
+
if (event.eventType === EventTypes.UP || event.eventType === EventTypes.ADDITIONAL_POINTER_UP) {
|
|
454
|
+
--numberOfTouches;
|
|
455
|
+
}
|
|
456
|
+
|
|
457
|
+
return {
|
|
458
|
+
nativeEvent: {
|
|
459
|
+
handlerTag: this.handlerTag,
|
|
460
|
+
state: this.currentState,
|
|
461
|
+
eventType: (_event$touchEventType = event.touchEventType) !== null && _event$touchEventType !== void 0 ? _event$touchEventType : eventType,
|
|
462
|
+
changedTouches: changed,
|
|
463
|
+
allTouches: all,
|
|
464
|
+
numberOfTouches: numberOfTouches
|
|
465
|
+
},
|
|
466
|
+
timeStamp: Date.now()
|
|
467
|
+
};
|
|
468
|
+
}
|
|
469
|
+
|
|
470
|
+
transformNativeEvent() {
|
|
313
471
|
return {};
|
|
314
472
|
} //
|
|
315
473
|
// Handling config
|
|
@@ -321,10 +479,29 @@ export default class GestureHandler {
|
|
|
321
479
|
...props
|
|
322
480
|
}) {
|
|
323
481
|
this.config = {
|
|
324
|
-
enabled,
|
|
482
|
+
enabled: enabled,
|
|
325
483
|
...props
|
|
326
484
|
};
|
|
485
|
+
this.enabled = enabled;
|
|
327
486
|
this.validateHitSlops();
|
|
487
|
+
|
|
488
|
+
if (this.enabled) {
|
|
489
|
+
return;
|
|
490
|
+
}
|
|
491
|
+
|
|
492
|
+
switch (this.currentState) {
|
|
493
|
+
case State.ACTIVE:
|
|
494
|
+
this.fail(true);
|
|
495
|
+
break;
|
|
496
|
+
|
|
497
|
+
case State.UNDETERMINED:
|
|
498
|
+
GestureHandlerOrchestrator.getInstance().removeHandlerFromOrchestrator(this);
|
|
499
|
+
break;
|
|
500
|
+
|
|
501
|
+
default:
|
|
502
|
+
this.cancel(true);
|
|
503
|
+
break;
|
|
504
|
+
}
|
|
328
505
|
}
|
|
329
506
|
|
|
330
507
|
checkCustomActivationCriteria(criterias) {
|
|
@@ -357,8 +534,8 @@ export default class GestureHandler {
|
|
|
357
534
|
}
|
|
358
535
|
}
|
|
359
536
|
|
|
360
|
-
checkHitSlop(
|
|
361
|
-
if (!this.config.hitSlop
|
|
537
|
+
checkHitSlop() {
|
|
538
|
+
if (!this.config.hitSlop) {
|
|
362
539
|
return true;
|
|
363
540
|
}
|
|
364
541
|
|
|
@@ -411,13 +588,25 @@ export default class GestureHandler {
|
|
|
411
588
|
}
|
|
412
589
|
}
|
|
413
590
|
|
|
414
|
-
|
|
591
|
+
const rect = this.view.getBoundingClientRect();
|
|
592
|
+
const offsetX = this.tracker.getLastX() - rect.left;
|
|
593
|
+
const offsetY = this.tracker.getLastY() - rect.top;
|
|
594
|
+
|
|
595
|
+
if (offsetX >= left && offsetX <= right && offsetY >= top && offsetY <= bottom) {
|
|
415
596
|
return true;
|
|
416
597
|
}
|
|
417
598
|
|
|
418
599
|
return false;
|
|
419
600
|
}
|
|
420
601
|
|
|
602
|
+
isPointerInBounds({
|
|
603
|
+
x,
|
|
604
|
+
y
|
|
605
|
+
}) {
|
|
606
|
+
const rect = this.view.getBoundingClientRect();
|
|
607
|
+
return x >= rect.left && x <= rect.right && y >= rect.top && y <= rect.bottom;
|
|
608
|
+
}
|
|
609
|
+
|
|
421
610
|
resetConfig() {} //
|
|
422
611
|
// Getters and setters
|
|
423
612
|
//
|
|
@@ -443,8 +632,8 @@ export default class GestureHandler {
|
|
|
443
632
|
return this.view;
|
|
444
633
|
}
|
|
445
634
|
|
|
446
|
-
|
|
447
|
-
return this.
|
|
635
|
+
getEventManagers() {
|
|
636
|
+
return this.eventManagers;
|
|
448
637
|
}
|
|
449
638
|
|
|
450
639
|
getTracker() {
|
|
@@ -459,14 +648,22 @@ export default class GestureHandler {
|
|
|
459
648
|
return this.currentState;
|
|
460
649
|
}
|
|
461
650
|
|
|
462
|
-
|
|
463
|
-
this.
|
|
651
|
+
isEnabled() {
|
|
652
|
+
return this.enabled;
|
|
653
|
+
}
|
|
654
|
+
|
|
655
|
+
setShouldCancelWhenOutside(shouldCancel) {
|
|
656
|
+
this.shouldCancellWhenOutside = shouldCancel;
|
|
464
657
|
}
|
|
465
658
|
|
|
466
659
|
getShouldCancelWhenOutside() {
|
|
467
660
|
return this.shouldCancellWhenOutside;
|
|
468
661
|
}
|
|
469
662
|
|
|
663
|
+
getPointerType() {
|
|
664
|
+
return this.pointerType;
|
|
665
|
+
}
|
|
666
|
+
|
|
470
667
|
}
|
|
471
668
|
|
|
472
669
|
function invokeNullableMethod(method, event) {
|