react-native-gesture-handler 2.6.0 → 2.6.2
Sign up to get free protection for your applications and to get access to all the features.
- 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
@@ -9,12 +9,20 @@ var _reactNative = require("react-native");
|
|
9
9
|
|
10
10
|
var _State = require("../../State");
|
11
11
|
|
12
|
-
var
|
12
|
+
var _interfaces = require("../interfaces");
|
13
13
|
|
14
14
|
var _GestureHandlerOrchestrator = _interopRequireDefault(require("../tools/GestureHandlerOrchestrator"));
|
15
15
|
|
16
|
+
var _InteractionManager = _interopRequireDefault(require("../tools/InteractionManager"));
|
17
|
+
|
18
|
+
var _PointerEventManager = _interopRequireDefault(require("../tools/PointerEventManager"));
|
19
|
+
|
16
20
|
var _PointerTracker = _interopRequireDefault(require("../tools/PointerTracker"));
|
17
21
|
|
22
|
+
var _TouchEventManager = _interopRequireDefault(require("../tools/TouchEventManager"));
|
23
|
+
|
24
|
+
var _utils = require("../utils");
|
25
|
+
|
18
26
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
19
27
|
|
20
28
|
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
@@ -36,20 +44,18 @@ class GestureHandler {
|
|
36
44
|
|
37
45
|
_defineProperty(this, "propsRef", void 0);
|
38
46
|
|
47
|
+
_defineProperty(this, "handlerTag", void 0);
|
48
|
+
|
39
49
|
_defineProperty(this, "config", {
|
40
50
|
enabled: false
|
41
51
|
});
|
42
52
|
|
43
|
-
_defineProperty(this, "
|
53
|
+
_defineProperty(this, "view", void 0);
|
44
54
|
|
45
|
-
_defineProperty(this, "
|
46
|
-
|
47
|
-
_defineProperty(this, "eventManager", void 0);
|
55
|
+
_defineProperty(this, "eventManagers", []);
|
48
56
|
|
49
57
|
_defineProperty(this, "tracker", new _PointerTracker.default());
|
50
58
|
|
51
|
-
_defineProperty(this, "interactionManager", void 0);
|
52
|
-
|
53
59
|
_defineProperty(this, "activationIndex", 0);
|
54
60
|
|
55
61
|
_defineProperty(this, "awaiting", false);
|
@@ -58,12 +64,14 @@ class GestureHandler {
|
|
58
64
|
|
59
65
|
_defineProperty(this, "shouldResetProgress", false);
|
60
66
|
|
61
|
-
_defineProperty(this, "
|
67
|
+
_defineProperty(this, "pointerType", _interfaces.PointerType.NONE);
|
68
|
+
|
69
|
+
_defineProperty(this, "sendEvent", (newState, oldState) => {
|
62
70
|
const {
|
63
71
|
onGestureHandlerEvent,
|
64
72
|
onGestureHandlerStateChange
|
65
73
|
} = this.propsRef.current;
|
66
|
-
const resultEvent = this.transformEventData(
|
74
|
+
const resultEvent = this.transformEventData(newState, oldState); // In the new API oldState field has to be undefined, unless we send event state changed
|
67
75
|
// 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
|
68
76
|
// Flipping order with setting oldState to undefined solves issue, when events were being sent twice instead of once
|
69
77
|
// However, this may cause trouble in the future (but for now we don't know that)
|
@@ -89,17 +97,17 @@ class GestureHandler {
|
|
89
97
|
this.propsRef = propsRef;
|
90
98
|
this.ref = ref;
|
91
99
|
this.currentState = _State.State.UNDETERMINED;
|
92
|
-
this.setView(
|
93
|
-
this.
|
100
|
+
this.setView();
|
101
|
+
this.addEventManager(new _PointerEventManager.default(this.view));
|
102
|
+
this.addEventManager(new _TouchEventManager.default(this.view));
|
94
103
|
}
|
95
104
|
|
96
|
-
setView(
|
97
|
-
if (!ref) {
|
98
|
-
this.
|
99
|
-
return;
|
105
|
+
setView() {
|
106
|
+
if (!this.ref) {
|
107
|
+
throw new Error(`Cannot find HTML Element for handler ${this.handlerTag}`);
|
100
108
|
}
|
101
109
|
|
102
|
-
this.view = (0, _reactNative.findNodeHandle)(ref);
|
110
|
+
this.view = (0, _reactNative.findNodeHandle)(this.ref);
|
103
111
|
this.view.style['touchAction'] = 'none';
|
104
112
|
this.view.style['webkitUserSelect'] = 'none';
|
105
113
|
this.view.style['userSelect'] = 'none'; //@ts-ignore This one disables default events on Safari
|
@@ -107,24 +115,18 @@ class GestureHandler {
|
|
107
115
|
this.view.style['WebkitTouchCallout'] = 'none';
|
108
116
|
}
|
109
117
|
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
this.
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
this.
|
122
|
-
this.eventManager.setOnPointerOutOfBounds(this.onPointerOutOfBounds.bind(this));
|
123
|
-
this.eventManager.setListeners();
|
124
|
-
}
|
125
|
-
|
126
|
-
setInteractionManager(manager) {
|
127
|
-
this.interactionManager = manager;
|
118
|
+
addEventManager(manager) {
|
119
|
+
manager.setOnPointerDown(this.onPointerDown.bind(this));
|
120
|
+
manager.setOnPointerAdd(this.onPointerAdd.bind(this));
|
121
|
+
manager.setOnPointerUp(this.onPointerUp.bind(this));
|
122
|
+
manager.setOnPointerRemove(this.onPointerRemove.bind(this));
|
123
|
+
manager.setOnPointerMove(this.onPointerMove.bind(this));
|
124
|
+
manager.setOnPointerEnter(this.onPointerEnter.bind(this));
|
125
|
+
manager.setOnPointerOut(this.onPointerOut.bind(this));
|
126
|
+
manager.setOnPointerCancel(this.onPointerCancel.bind(this));
|
127
|
+
manager.setOnPointerOutOfBounds(this.onPointerOutOfBounds.bind(this));
|
128
|
+
manager.setListeners();
|
129
|
+
this.eventManagers.push(manager);
|
128
130
|
} //
|
129
131
|
// Resetting handler
|
130
132
|
//
|
@@ -139,61 +141,79 @@ class GestureHandler {
|
|
139
141
|
reset() {
|
140
142
|
this.tracker.resetTracker();
|
141
143
|
this.onReset();
|
144
|
+
this.resetProgress();
|
145
|
+
this.eventManagers.forEach(manager => manager.resetManager());
|
142
146
|
this.currentState = _State.State.UNDETERMINED;
|
143
147
|
} //
|
144
148
|
// State logic
|
145
149
|
//
|
146
150
|
|
147
151
|
|
148
|
-
moveToState(newState,
|
152
|
+
moveToState(newState, sendIfDisabled) {
|
149
153
|
if (this.currentState === newState) {
|
150
154
|
return;
|
151
155
|
}
|
152
156
|
|
157
|
+
if (this.tracker.getTrackedPointersCount() > 0 && (newState === _State.State.END || newState === _State.State.CANCELLED || newState === _State.State.FAILED)) {
|
158
|
+
this.cancelTouches();
|
159
|
+
}
|
160
|
+
|
153
161
|
const oldState = this.currentState;
|
154
162
|
this.currentState = newState;
|
155
163
|
|
156
|
-
_GestureHandlerOrchestrator.default.getInstance().onHandlerStateChange(this, newState, oldState,
|
164
|
+
_GestureHandlerOrchestrator.default.getInstance().onHandlerStateChange(this, newState, oldState, sendIfDisabled);
|
157
165
|
|
158
166
|
this.onStateChange(newState, oldState);
|
159
167
|
}
|
160
168
|
|
161
169
|
onStateChange(_newState, _oldState) {}
|
162
170
|
|
163
|
-
begin(
|
164
|
-
if (!this.checkHitSlop(
|
171
|
+
begin() {
|
172
|
+
if (!this.checkHitSlop()) {
|
165
173
|
return;
|
166
174
|
}
|
167
175
|
|
168
176
|
if (this.currentState === _State.State.UNDETERMINED) {
|
169
|
-
this.moveToState(_State.State.BEGAN
|
177
|
+
this.moveToState(_State.State.BEGAN);
|
170
178
|
}
|
171
179
|
}
|
180
|
+
/**
|
181
|
+
* @param {boolean} sendIfDisabled - Used when handler becomes disabled. With this flag orchestrator will be forced to send fail event
|
182
|
+
*/
|
183
|
+
|
172
184
|
|
173
|
-
fail(
|
185
|
+
fail(sendIfDisabled) {
|
174
186
|
if (this.currentState === _State.State.ACTIVE || this.currentState === _State.State.BEGAN) {
|
175
|
-
this.moveToState(_State.State.FAILED,
|
187
|
+
this.moveToState(_State.State.FAILED, sendIfDisabled);
|
188
|
+
this.view.style.cursor = 'auto';
|
176
189
|
}
|
177
190
|
|
178
191
|
this.resetProgress();
|
179
192
|
}
|
193
|
+
/**
|
194
|
+
* @param {boolean} sendIfDisabled - Used when handler becomes disabled. With this flag orchestrator will be forced to send cancel event
|
195
|
+
*/
|
180
196
|
|
181
|
-
|
197
|
+
|
198
|
+
cancel(sendIfDisabled) {
|
182
199
|
if (this.currentState === _State.State.ACTIVE || this.currentState === _State.State.UNDETERMINED || this.currentState === _State.State.BEGAN) {
|
183
200
|
this.onCancel();
|
184
|
-
this.moveToState(_State.State.CANCELLED,
|
201
|
+
this.moveToState(_State.State.CANCELLED, sendIfDisabled);
|
202
|
+
this.view.style.cursor = 'auto';
|
185
203
|
}
|
186
204
|
}
|
187
205
|
|
188
|
-
activate(
|
206
|
+
activate(_force = false) {
|
189
207
|
if (this.currentState === _State.State.UNDETERMINED || this.currentState === _State.State.BEGAN) {
|
190
|
-
this.moveToState(_State.State.ACTIVE
|
208
|
+
this.moveToState(_State.State.ACTIVE);
|
209
|
+
this.view.style.cursor = 'grab';
|
191
210
|
}
|
192
211
|
}
|
193
212
|
|
194
|
-
end(
|
213
|
+
end() {
|
195
214
|
if (this.currentState === _State.State.BEGAN || this.currentState === _State.State.ACTIVE) {
|
196
|
-
this.moveToState(_State.State.END
|
215
|
+
this.moveToState(_State.State.END);
|
216
|
+
this.view.style.cursor = 'auto';
|
197
217
|
}
|
198
218
|
|
199
219
|
this.resetProgress();
|
@@ -239,7 +259,7 @@ class GestureHandler {
|
|
239
259
|
return false;
|
240
260
|
}
|
241
261
|
|
242
|
-
return
|
262
|
+
return _InteractionManager.default.getInstance().shouldWaitForHandlerFailure(this, handler);
|
243
263
|
}
|
244
264
|
|
245
265
|
shouldRequireToWaitForFailure(handler) {
|
@@ -247,7 +267,7 @@ class GestureHandler {
|
|
247
267
|
return false;
|
248
268
|
}
|
249
269
|
|
250
|
-
return
|
270
|
+
return _InteractionManager.default.getInstance().shouldRequireHandlerToWaitForFailure(this, handler);
|
251
271
|
}
|
252
272
|
|
253
273
|
shouldRecognizeSimultaneously(handler) {
|
@@ -255,7 +275,7 @@ class GestureHandler {
|
|
255
275
|
return true;
|
256
276
|
}
|
257
277
|
|
258
|
-
return
|
278
|
+
return _InteractionManager.default.getInstance().shouldRecognizeSimultaneously(this, handler);
|
259
279
|
}
|
260
280
|
|
261
281
|
shouldBeCancelledByOther(handler) {
|
@@ -263,59 +283,114 @@ class GestureHandler {
|
|
263
283
|
return false;
|
264
284
|
}
|
265
285
|
|
266
|
-
return
|
286
|
+
return _InteractionManager.default.getInstance().shouldHandlerBeCancelledBy(this, handler);
|
267
287
|
} //
|
268
288
|
// Event actions
|
269
289
|
//
|
270
290
|
|
271
291
|
|
272
|
-
onPointerDown(
|
292
|
+
onPointerDown(event) {
|
273
293
|
_GestureHandlerOrchestrator.default.getInstance().recordHandlerIfNotPresent(this);
|
294
|
+
|
295
|
+
this.pointerType = event.pointerType;
|
296
|
+
|
297
|
+
if (this.pointerType === _interfaces.PointerType.TOUCH) {
|
298
|
+
_GestureHandlerOrchestrator.default.getInstance().cancelMouseAndPenGestures(this);
|
299
|
+
}
|
300
|
+
|
301
|
+
if (this.config.needsPointerData) {
|
302
|
+
this.sendTouchEvent(event);
|
303
|
+
}
|
274
304
|
} // Adding another pointer to existing ones
|
275
305
|
|
276
306
|
|
277
|
-
onPointerAdd(
|
307
|
+
onPointerAdd(event) {
|
308
|
+
if (this.config.needsPointerData) {
|
309
|
+
this.sendTouchEvent(event);
|
310
|
+
}
|
311
|
+
}
|
278
312
|
|
279
|
-
onPointerUp(
|
313
|
+
onPointerUp(event) {
|
314
|
+
if (this.config.needsPointerData) {
|
315
|
+
this.sendTouchEvent(event);
|
316
|
+
}
|
317
|
+
} // Removing pointer, when there is more than one pointers
|
280
318
|
|
281
319
|
|
282
|
-
onPointerRemove(
|
320
|
+
onPointerRemove(event) {
|
321
|
+
if (this.config.needsPointerData) {
|
322
|
+
this.sendTouchEvent(event);
|
323
|
+
}
|
324
|
+
}
|
283
325
|
|
284
326
|
onPointerMove(event) {
|
285
|
-
this.tryToSendMoveEvent(
|
327
|
+
this.tryToSendMoveEvent(false);
|
328
|
+
|
329
|
+
if (this.config.needsPointerData) {
|
330
|
+
this.sendTouchEvent(event);
|
331
|
+
}
|
286
332
|
}
|
287
333
|
|
288
|
-
onPointerOut(
|
334
|
+
onPointerOut(event) {
|
335
|
+
if (this.config.needsPointerData) {
|
336
|
+
this.sendTouchEvent(event);
|
337
|
+
}
|
338
|
+
}
|
289
339
|
|
290
|
-
onPointerEnter(
|
340
|
+
onPointerEnter(event) {
|
341
|
+
if (this.config.needsPointerData) {
|
342
|
+
this.sendTouchEvent(event);
|
343
|
+
}
|
344
|
+
}
|
291
345
|
|
292
|
-
onPointerCancel(
|
346
|
+
onPointerCancel(event) {
|
347
|
+
if (this.config.needsPointerData) {
|
348
|
+
this.sendTouchEvent(event);
|
349
|
+
}
|
350
|
+
}
|
293
351
|
|
294
352
|
onPointerOutOfBounds(event) {
|
295
|
-
this.tryToSendMoveEvent(
|
353
|
+
this.tryToSendMoveEvent(true);
|
354
|
+
|
355
|
+
if (this.config.needsPointerData) {
|
356
|
+
this.sendTouchEvent(event);
|
357
|
+
}
|
296
358
|
}
|
297
359
|
|
298
|
-
tryToSendMoveEvent(
|
299
|
-
if (this.
|
300
|
-
this.sendEvent(
|
360
|
+
tryToSendMoveEvent(out) {
|
361
|
+
if (this.enabled && this.active && (!out || out && !this.shouldCancellWhenOutside)) {
|
362
|
+
this.sendEvent(this.currentState, this.currentState);
|
363
|
+
}
|
364
|
+
}
|
365
|
+
|
366
|
+
sendTouchEvent(event) {
|
367
|
+
if (!this.enabled) {
|
368
|
+
return;
|
369
|
+
}
|
370
|
+
|
371
|
+
const {
|
372
|
+
onGestureHandlerEvent
|
373
|
+
} = this.propsRef.current;
|
374
|
+
const touchEvent = this.transformTouchEvent(event);
|
375
|
+
|
376
|
+
if (touchEvent) {
|
377
|
+
invokeNullableMethod(onGestureHandlerEvent, touchEvent);
|
301
378
|
}
|
302
379
|
} //
|
303
380
|
// Events Sending
|
304
381
|
//
|
305
382
|
|
306
383
|
|
307
|
-
transformEventData(
|
308
|
-
var _this$eventManager;
|
309
|
-
|
384
|
+
transformEventData(newState, oldState) {
|
310
385
|
return {
|
311
386
|
nativeEvent: {
|
312
387
|
numberOfPointers: this.tracker.getTrackedPointersCount(),
|
313
388
|
state: newState,
|
314
|
-
pointerInside: (
|
315
|
-
x:
|
316
|
-
y:
|
389
|
+
pointerInside: (0, _utils.isPointerInBounds)(this.view, {
|
390
|
+
x: this.tracker.getLastAvgX(),
|
391
|
+
y: this.tracker.getLastAvgY()
|
317
392
|
}),
|
318
|
-
...this.transformNativeEvent(
|
393
|
+
...this.transformNativeEvent(),
|
319
394
|
handlerTag: this.handlerTag,
|
320
395
|
target: this.ref,
|
321
396
|
oldState: newState !== oldState ? oldState : undefined
|
@@ -324,7 +399,143 @@ class GestureHandler {
|
|
324
399
|
};
|
325
400
|
}
|
326
401
|
|
327
|
-
|
402
|
+
transformTouchEvent(event) {
|
403
|
+
var _event$touchEventType;
|
404
|
+
|
405
|
+
const rect = this.view.getBoundingClientRect();
|
406
|
+
const all = [];
|
407
|
+
const changed = [];
|
408
|
+
const trackerData = this.tracker.getData(); // This if handles edge case where all pointers have been cancelled
|
409
|
+
// When pointercancel is triggered, reset method is called. This means that tracker will be reset after first pointer being cancelled
|
410
|
+
// The problem is, that handler will receive another pointercancel event from the rest of the pointers
|
411
|
+
// To avoid crashing, we don't send event if tracker tracks no pointers, i.e. has been reset
|
412
|
+
|
413
|
+
if (trackerData.size === 0 || !trackerData.has(event.pointerId)) {
|
414
|
+
return;
|
415
|
+
}
|
416
|
+
|
417
|
+
trackerData.forEach((element, key) => {
|
418
|
+
const id = this.tracker.getMappedTouchEventId(key);
|
419
|
+
all.push({
|
420
|
+
id: id,
|
421
|
+
x: element.lastX - rect.left,
|
422
|
+
y: element.lastY - rect.top,
|
423
|
+
absoluteX: element.lastX,
|
424
|
+
absoluteY: element.lastY
|
425
|
+
});
|
426
|
+
}); // Each pointer sends its own event, so we want changed touches to contain only the pointer that has changed.
|
427
|
+
// However, if the event is cancel, we want to cancel all pointers to avoid crashes
|
428
|
+
|
429
|
+
if (event.eventType !== _interfaces.EventTypes.CANCEL) {
|
430
|
+
changed.push({
|
431
|
+
id: this.tracker.getMappedTouchEventId(event.pointerId),
|
432
|
+
x: event.x - rect.left,
|
433
|
+
y: event.y - rect.top,
|
434
|
+
absoluteX: event.x,
|
435
|
+
absoluteY: event.y
|
436
|
+
});
|
437
|
+
} else {
|
438
|
+
trackerData.forEach((element, key) => {
|
439
|
+
const id = this.tracker.getMappedTouchEventId(key);
|
440
|
+
changed.push({
|
441
|
+
id: id,
|
442
|
+
x: element.lastX - rect.left,
|
443
|
+
y: element.lastY - rect.top,
|
444
|
+
absoluteX: element.lastX,
|
445
|
+
absoluteY: element.lastY
|
446
|
+
});
|
447
|
+
});
|
448
|
+
}
|
449
|
+
|
450
|
+
let eventType = _interfaces.TouchEventType.UNDETERMINED;
|
451
|
+
|
452
|
+
switch (event.eventType) {
|
453
|
+
case _interfaces.EventTypes.DOWN:
|
454
|
+
case _interfaces.EventTypes.ADDITIONAL_POINTER_DOWN:
|
455
|
+
eventType = _interfaces.TouchEventType.DOWN;
|
456
|
+
break;
|
457
|
+
|
458
|
+
case _interfaces.EventTypes.UP:
|
459
|
+
case _interfaces.EventTypes.ADDITIONAL_POINTER_UP:
|
460
|
+
eventType = _interfaces.TouchEventType.UP;
|
461
|
+
break;
|
462
|
+
|
463
|
+
case _interfaces.EventTypes.MOVE:
|
464
|
+
eventType = _interfaces.TouchEventType.MOVE;
|
465
|
+
break;
|
466
|
+
|
467
|
+
case _interfaces.EventTypes.CANCEL:
|
468
|
+
eventType = _interfaces.TouchEventType.CANCELLED;
|
469
|
+
break;
|
470
|
+
} // Here, when we receive up event, we want to decrease number of touches
|
471
|
+
// That's because we want handler to send information that there's one pointer less
|
472
|
+
// However, we still want this pointer to be present in allTouches array, so that its data can be accessed
|
473
|
+
|
474
|
+
|
475
|
+
let numberOfTouches = all.length;
|
476
|
+
|
477
|
+
if (event.eventType === _interfaces.EventTypes.UP || event.eventType === _interfaces.EventTypes.ADDITIONAL_POINTER_UP) {
|
478
|
+
--numberOfTouches;
|
479
|
+
}
|
480
|
+
|
481
|
+
return {
|
482
|
+
nativeEvent: {
|
483
|
+
handlerTag: this.handlerTag,
|
484
|
+
state: this.currentState,
|
485
|
+
eventType: (_event$touchEventType = event.touchEventType) !== null && _event$touchEventType !== void 0 ? _event$touchEventType : eventType,
|
486
|
+
changedTouches: changed,
|
487
|
+
allTouches: all,
|
488
|
+
numberOfTouches: numberOfTouches
|
489
|
+
},
|
490
|
+
timeStamp: Date.now()
|
491
|
+
};
|
492
|
+
}
|
493
|
+
|
494
|
+
cancelTouches() {
|
495
|
+
const rect = this.view.getBoundingClientRect();
|
496
|
+
const all = [];
|
497
|
+
const changed = [];
|
498
|
+
const trackerData = this.tracker.getData();
|
499
|
+
|
500
|
+
if (trackerData.size === 0) {
|
501
|
+
return;
|
502
|
+
}
|
503
|
+
|
504
|
+
trackerData.forEach((element, key) => {
|
505
|
+
const id = this.tracker.getMappedTouchEventId(key);
|
506
|
+
all.push({
|
507
|
+
id: id,
|
508
|
+
x: element.lastX - rect.left,
|
509
|
+
y: element.lastY - rect.top,
|
510
|
+
absoluteX: element.lastX,
|
511
|
+
absoluteY: element.lastY
|
512
|
+
});
|
513
|
+
changed.push({
|
514
|
+
id: id,
|
515
|
+
x: element.lastX - rect.left,
|
516
|
+
y: element.lastY - rect.top,
|
517
|
+
absoluteX: element.lastX,
|
518
|
+
absoluteY: element.lastY
|
519
|
+
});
|
520
|
+
});
|
521
|
+
const cancelEvent = {
|
522
|
+
nativeEvent: {
|
523
|
+
handlerTag: this.handlerTag,
|
524
|
+
state: this.currentState,
|
525
|
+
eventType: _interfaces.TouchEventType.CANCELLED,
|
526
|
+
changedTouches: changed,
|
527
|
+
allTouches: all,
|
528
|
+
numberOfTouches: all.length
|
529
|
+
},
|
530
|
+
timeStamp: Date.now()
|
531
|
+
};
|
532
|
+
const {
|
533
|
+
onGestureHandlerEvent
|
534
|
+
} = this.propsRef.current;
|
535
|
+
invokeNullableMethod(onGestureHandlerEvent, cancelEvent);
|
536
|
+
}
|
537
|
+
|
538
|
+
transformNativeEvent() {
|
328
539
|
return {};
|
329
540
|
} //
|
330
541
|
// Handling config
|
@@ -336,10 +547,30 @@ class GestureHandler {
|
|
336
547
|
...props
|
337
548
|
}) {
|
338
549
|
this.config = {
|
339
|
-
enabled,
|
550
|
+
enabled: enabled,
|
340
551
|
...props
|
341
552
|
};
|
553
|
+
this.enabled = enabled;
|
342
554
|
this.validateHitSlops();
|
555
|
+
|
556
|
+
if (this.enabled) {
|
557
|
+
return;
|
558
|
+
}
|
559
|
+
|
560
|
+
switch (this.currentState) {
|
561
|
+
case _State.State.ACTIVE:
|
562
|
+
this.fail(true);
|
563
|
+
break;
|
564
|
+
|
565
|
+
case _State.State.UNDETERMINED:
|
566
|
+
_GestureHandlerOrchestrator.default.getInstance().removeHandlerFromOrchestrator(this);
|
567
|
+
|
568
|
+
break;
|
569
|
+
|
570
|
+
default:
|
571
|
+
this.cancel(true);
|
572
|
+
break;
|
573
|
+
}
|
343
574
|
}
|
344
575
|
|
345
576
|
checkCustomActivationCriteria(criterias) {
|
@@ -372,8 +603,8 @@ class GestureHandler {
|
|
372
603
|
}
|
373
604
|
}
|
374
605
|
|
375
|
-
checkHitSlop(
|
376
|
-
if (!this.config.hitSlop
|
606
|
+
checkHitSlop() {
|
607
|
+
if (!this.config.hitSlop) {
|
377
608
|
return true;
|
378
609
|
}
|
379
610
|
|
@@ -426,13 +657,25 @@ class GestureHandler {
|
|
426
657
|
}
|
427
658
|
}
|
428
659
|
|
429
|
-
|
660
|
+
const rect = this.view.getBoundingClientRect();
|
661
|
+
const offsetX = this.tracker.getLastX() - rect.left;
|
662
|
+
const offsetY = this.tracker.getLastY() - rect.top;
|
663
|
+
|
664
|
+
if (offsetX >= left && offsetX <= right && offsetY >= top && offsetY <= bottom) {
|
430
665
|
return true;
|
431
666
|
}
|
432
667
|
|
433
668
|
return false;
|
434
669
|
}
|
435
670
|
|
671
|
+
isPointerInBounds({
|
672
|
+
x,
|
673
|
+
y
|
674
|
+
}) {
|
675
|
+
const rect = this.view.getBoundingClientRect();
|
676
|
+
return x >= rect.left && x <= rect.right && y >= rect.top && y <= rect.bottom;
|
677
|
+
}
|
678
|
+
|
436
679
|
resetConfig() {} //
|
437
680
|
// Getters and setters
|
438
681
|
//
|
@@ -458,8 +701,8 @@ class GestureHandler {
|
|
458
701
|
return this.view;
|
459
702
|
}
|
460
703
|
|
461
|
-
|
462
|
-
return this.
|
704
|
+
getEventManagers() {
|
705
|
+
return this.eventManagers;
|
463
706
|
}
|
464
707
|
|
465
708
|
getTracker() {
|
@@ -474,14 +717,22 @@ class GestureHandler {
|
|
474
717
|
return this.currentState;
|
475
718
|
}
|
476
719
|
|
477
|
-
|
478
|
-
this.
|
720
|
+
isEnabled() {
|
721
|
+
return this.enabled;
|
722
|
+
}
|
723
|
+
|
724
|
+
setShouldCancelWhenOutside(shouldCancel) {
|
725
|
+
this.shouldCancellWhenOutside = shouldCancel;
|
479
726
|
}
|
480
727
|
|
481
728
|
getShouldCancelWhenOutside() {
|
482
729
|
return this.shouldCancellWhenOutside;
|
483
730
|
}
|
484
731
|
|
732
|
+
getPointerType() {
|
733
|
+
return this.pointerType;
|
734
|
+
}
|
735
|
+
|
485
736
|
}
|
486
737
|
|
487
738
|
exports.default = GestureHandler;
|