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
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { State } from '../../State';
|
|
2
|
-
import {
|
|
2
|
+
import { AdaptedEvent, Config } from '../interfaces';
|
|
3
3
|
|
|
4
4
|
import GestureHandler from './GestureHandler';
|
|
5
5
|
|
|
@@ -25,17 +25,19 @@ export default class LongPressGestureHandler extends GestureHandler {
|
|
|
25
25
|
this.setShouldCancelWhenOutside(true);
|
|
26
26
|
}
|
|
27
27
|
|
|
28
|
-
protected transformNativeEvent(
|
|
28
|
+
protected transformNativeEvent() {
|
|
29
|
+
const rect: DOMRect = this.view.getBoundingClientRect();
|
|
30
|
+
|
|
29
31
|
return {
|
|
30
|
-
x:
|
|
31
|
-
y:
|
|
32
|
-
absoluteX:
|
|
33
|
-
absoluteY:
|
|
32
|
+
x: this.tracker.getLastAvgX() - rect.left,
|
|
33
|
+
y: this.tracker.getLastAvgY() - rect.top,
|
|
34
|
+
absoluteX: this.tracker.getLastAvgX(),
|
|
35
|
+
absoluteY: this.tracker.getLastAvgY(),
|
|
34
36
|
duration: Date.now() - this.startTime,
|
|
35
37
|
};
|
|
36
38
|
}
|
|
37
39
|
|
|
38
|
-
public updateGestureConfig({ enabled = true, ...props }): void {
|
|
40
|
+
public updateGestureConfig({ enabled = true, ...props }: Config): void {
|
|
39
41
|
super.updateGestureConfig({ enabled: enabled, ...props });
|
|
40
42
|
|
|
41
43
|
this.enabled = enabled;
|
|
@@ -59,28 +61,32 @@ export default class LongPressGestureHandler extends GestureHandler {
|
|
|
59
61
|
clearTimeout(this.activationTimeout);
|
|
60
62
|
}
|
|
61
63
|
|
|
62
|
-
protected onPointerDown(event:
|
|
64
|
+
protected onPointerDown(event: AdaptedEvent): void {
|
|
65
|
+
this.tracker.addToTracker(event);
|
|
63
66
|
super.onPointerDown(event);
|
|
64
67
|
this.tryBegin(event);
|
|
65
|
-
this.tryActivate(
|
|
68
|
+
this.tryActivate();
|
|
69
|
+
this.checkDistanceFail(event);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
protected onPointerMove(event: AdaptedEvent): void {
|
|
73
|
+
super.onPointerMove(event);
|
|
74
|
+
this.tracker.track(event);
|
|
66
75
|
this.checkDistanceFail(event);
|
|
67
76
|
}
|
|
68
77
|
|
|
69
|
-
protected onPointerUp(event:
|
|
78
|
+
protected onPointerUp(event: AdaptedEvent): void {
|
|
70
79
|
super.onPointerUp(event);
|
|
80
|
+
this.tracker.removeFromTracker(event.pointerId);
|
|
71
81
|
|
|
72
82
|
if (this.currentState === State.ACTIVE) {
|
|
73
|
-
this.end(
|
|
83
|
+
this.end();
|
|
74
84
|
} else {
|
|
75
|
-
this.fail(
|
|
85
|
+
this.fail();
|
|
76
86
|
}
|
|
77
87
|
}
|
|
78
88
|
|
|
79
|
-
|
|
80
|
-
this.checkDistanceFail(event);
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
private tryBegin(event: AdaptedPointerEvent): void {
|
|
89
|
+
private tryBegin(event: AdaptedEvent): void {
|
|
84
90
|
if (this.currentState !== State.UNDETERMINED) {
|
|
85
91
|
return;
|
|
86
92
|
}
|
|
@@ -88,23 +94,23 @@ export default class LongPressGestureHandler extends GestureHandler {
|
|
|
88
94
|
this.previousTime = Date.now();
|
|
89
95
|
this.startTime = this.previousTime;
|
|
90
96
|
|
|
91
|
-
this.begin(
|
|
97
|
+
this.begin();
|
|
92
98
|
|
|
93
99
|
this.startX = event.x;
|
|
94
100
|
this.startY = event.y;
|
|
95
101
|
}
|
|
96
102
|
|
|
97
|
-
private tryActivate(
|
|
103
|
+
private tryActivate(): void {
|
|
98
104
|
if (this.minDurationMs > 0) {
|
|
99
105
|
this.activationTimeout = setTimeout(() => {
|
|
100
|
-
this.activate(
|
|
106
|
+
this.activate();
|
|
101
107
|
}, this.minDurationMs);
|
|
102
108
|
} else if (this.minDurationMs === 0) {
|
|
103
|
-
this.activate(
|
|
109
|
+
this.activate();
|
|
104
110
|
}
|
|
105
111
|
}
|
|
106
112
|
|
|
107
|
-
private checkDistanceFail(event:
|
|
113
|
+
private checkDistanceFail(event: AdaptedEvent): void {
|
|
108
114
|
const dx = event.x - this.startX;
|
|
109
115
|
const dy = event.y - this.startY;
|
|
110
116
|
const distSq = dx * dx + dy * dy;
|
|
@@ -114,9 +120,9 @@ export default class LongPressGestureHandler extends GestureHandler {
|
|
|
114
120
|
}
|
|
115
121
|
|
|
116
122
|
if (this.currentState === State.ACTIVE) {
|
|
117
|
-
this.cancel(
|
|
123
|
+
this.cancel();
|
|
118
124
|
} else {
|
|
119
|
-
this.fail(
|
|
125
|
+
this.fail();
|
|
120
126
|
}
|
|
121
127
|
}
|
|
122
128
|
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { AdaptedEvent } from '../interfaces';
|
|
2
|
+
import GestureHandler from './GestureHandler';
|
|
3
|
+
|
|
4
|
+
export default class ManualGestureHandler extends GestureHandler {
|
|
5
|
+
public init(ref: number, propsRef: React.RefObject<unknown>) {
|
|
6
|
+
super.init(ref, propsRef);
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
protected onPointerDown(event: AdaptedEvent): void {
|
|
10
|
+
this.tracker.addToTracker(event);
|
|
11
|
+
super.onPointerDown(event);
|
|
12
|
+
this.begin();
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
protected onPointerAdd(event: AdaptedEvent): void {
|
|
16
|
+
this.tracker.addToTracker(event);
|
|
17
|
+
super.onPointerAdd(event);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
protected onPointerMove(event: AdaptedEvent): void {
|
|
21
|
+
this.tracker.track(event);
|
|
22
|
+
super.onPointerMove(event);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
protected onPointerUp(event: AdaptedEvent): void {
|
|
26
|
+
super.onPointerUp(event);
|
|
27
|
+
this.tracker.removeFromTracker(event.pointerId);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
protected onPointerRemove(event: AdaptedEvent): void {
|
|
31
|
+
super.onPointerRemove(event);
|
|
32
|
+
this.tracker.removeFromTracker(event.pointerId);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
protected onPointerCancel(event: AdaptedEvent): void {
|
|
36
|
+
super.onPointerCancel(event);
|
|
37
|
+
this.reset();
|
|
38
|
+
}
|
|
39
|
+
}
|
|
@@ -1,24 +1,26 @@
|
|
|
1
1
|
import { State } from '../../State';
|
|
2
|
-
import {
|
|
2
|
+
import { DEFAULT_TOUCH_SLOP } from '../constants';
|
|
3
|
+
import { AdaptedEvent, Config } from '../interfaces';
|
|
3
4
|
|
|
4
5
|
import GestureHandler from './GestureHandler';
|
|
5
6
|
export default class NativeViewGestureHandler extends GestureHandler {
|
|
6
7
|
private buttonRole!: boolean;
|
|
7
8
|
|
|
9
|
+
//TODO: Implement logic for activation on start
|
|
10
|
+
//@ts-ignore Logic yet to be implemented
|
|
11
|
+
private shouldActivateOnStart = false;
|
|
8
12
|
private disallowInterruption = false;
|
|
9
13
|
|
|
14
|
+
private startX = 0;
|
|
15
|
+
private startY = 0;
|
|
16
|
+
private minDistSq = DEFAULT_TOUCH_SLOP * DEFAULT_TOUCH_SLOP;
|
|
17
|
+
|
|
10
18
|
public init(ref: number, propsRef: React.RefObject<unknown>): void {
|
|
11
19
|
super.init(ref, propsRef);
|
|
12
20
|
|
|
13
21
|
this.setShouldCancelWhenOutside(true);
|
|
14
22
|
|
|
15
|
-
if (!this.view) {
|
|
16
|
-
return;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
23
|
this.view.style['touchAction'] = 'auto';
|
|
20
|
-
this.view.style['webkitUserSelect'] = 'auto';
|
|
21
|
-
this.view.style['userSelect'] = 'auto';
|
|
22
24
|
|
|
23
25
|
//@ts-ignore Turns on defualt touch behavior on Safari
|
|
24
26
|
this.view.style['WebkitTouchCallout'] = 'auto';
|
|
@@ -28,44 +30,99 @@ export default class NativeViewGestureHandler extends GestureHandler {
|
|
|
28
30
|
} else {
|
|
29
31
|
this.buttonRole = false;
|
|
30
32
|
}
|
|
33
|
+
|
|
34
|
+
if (this.view.tagName.toLowerCase() === 'input') {
|
|
35
|
+
//Enables text input on Safari
|
|
36
|
+
this.view.style['webkitUserSelect'] = 'auto';
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
public updateGestureConfig({ enabled = true, ...props }: Config): void {
|
|
41
|
+
super.updateGestureConfig({ enabled: enabled, ...props });
|
|
42
|
+
|
|
43
|
+
if (this.config.shouldActivateOnStart !== undefined) {
|
|
44
|
+
this.shouldActivateOnStart = this.config.shouldActivateOnStart;
|
|
45
|
+
}
|
|
46
|
+
if (this.config.disallowInterruption !== undefined) {
|
|
47
|
+
this.disallowInterruption = this.config.disallowInterruption;
|
|
48
|
+
}
|
|
31
49
|
}
|
|
32
50
|
|
|
33
51
|
protected resetConfig(): void {
|
|
34
52
|
super.resetConfig();
|
|
35
53
|
}
|
|
36
54
|
|
|
37
|
-
protected onPointerDown(event:
|
|
55
|
+
protected onPointerDown(event: AdaptedEvent): void {
|
|
56
|
+
this.tracker.addToTracker(event);
|
|
38
57
|
super.onPointerDown(event);
|
|
58
|
+
this.newPointerAction();
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
protected onPointerAdd(event: AdaptedEvent): void {
|
|
39
62
|
this.tracker.addToTracker(event);
|
|
63
|
+
super.onPointerAdd(event);
|
|
64
|
+
this.newPointerAction();
|
|
65
|
+
}
|
|
40
66
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
67
|
+
private newPointerAction(): void {
|
|
68
|
+
this.startX = this.tracker.getLastAvgX();
|
|
69
|
+
this.startY = this.tracker.getLastAvgY();
|
|
70
|
+
|
|
71
|
+
if (this.currentState !== State.UNDETERMINED) {
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
this.begin();
|
|
76
|
+
if (this.buttonRole) {
|
|
77
|
+
this.activate();
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
protected onPointerMove(event: AdaptedEvent): void {
|
|
82
|
+
this.tracker.track(event);
|
|
83
|
+
|
|
84
|
+
const dx = this.startX - this.tracker.getLastAvgX();
|
|
85
|
+
const dy = this.startY - this.tracker.getLastAvgY();
|
|
86
|
+
const distSq = dx * dx + dy * dy;
|
|
87
|
+
|
|
88
|
+
if (
|
|
89
|
+
!this.buttonRole &&
|
|
90
|
+
distSq >= this.minDistSq &&
|
|
91
|
+
this.currentState === State.BEGAN
|
|
92
|
+
) {
|
|
93
|
+
this.activate();
|
|
46
94
|
}
|
|
47
95
|
}
|
|
48
96
|
|
|
49
|
-
protected
|
|
50
|
-
|
|
97
|
+
protected onPointerOut(): void {
|
|
98
|
+
this.cancel();
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
protected onPointerUp(event: AdaptedEvent): void {
|
|
102
|
+
super.onPointerUp(event);
|
|
103
|
+
this.onUp(event);
|
|
51
104
|
}
|
|
52
105
|
|
|
53
|
-
protected
|
|
54
|
-
|
|
106
|
+
protected onPointerRemove(event: AdaptedEvent): void {
|
|
107
|
+
super.onPointerRemove(event);
|
|
108
|
+
this.onUp(event);
|
|
55
109
|
}
|
|
56
110
|
|
|
57
|
-
|
|
111
|
+
private onUp(event: AdaptedEvent): void {
|
|
58
112
|
this.tracker.removeFromTracker(event.pointerId);
|
|
59
|
-
|
|
60
|
-
this.activate(event);
|
|
61
|
-
}
|
|
113
|
+
|
|
62
114
|
if (this.tracker.getTrackedPointersCount() === 0) {
|
|
63
|
-
this.
|
|
115
|
+
if (this.currentState === State.ACTIVE) {
|
|
116
|
+
this.end();
|
|
117
|
+
} else {
|
|
118
|
+
this.fail();
|
|
119
|
+
}
|
|
64
120
|
}
|
|
65
121
|
}
|
|
66
122
|
|
|
67
|
-
protected onPointerCancel(event:
|
|
68
|
-
|
|
123
|
+
protected onPointerCancel(event: AdaptedEvent): void {
|
|
124
|
+
super.onPointerCancel(event);
|
|
125
|
+
this.cancel();
|
|
69
126
|
this.reset();
|
|
70
127
|
}
|
|
71
128
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { PixelRatio } from 'react-native';
|
|
2
2
|
import { State } from '../../State';
|
|
3
3
|
import { DEFAULT_TOUCH_SLOP } from '../constants';
|
|
4
|
-
import {
|
|
4
|
+
import { AdaptedEvent, Config } from '../interfaces';
|
|
5
5
|
|
|
6
6
|
import GestureHandler from './GestureHandler';
|
|
7
7
|
|
|
@@ -42,8 +42,8 @@ export default class PanGestureHandler extends GestureHandler {
|
|
|
42
42
|
private minVelocityY = Number.MAX_SAFE_INTEGER;
|
|
43
43
|
private minVelocitySq = Number.MAX_SAFE_INTEGER;
|
|
44
44
|
|
|
45
|
-
private minPointers =
|
|
46
|
-
private maxPointers =
|
|
45
|
+
private minPointers = DEFAULT_MIN_POINTERS;
|
|
46
|
+
private maxPointers = DEFAULT_MAX_POINTERS;
|
|
47
47
|
|
|
48
48
|
private startX = 0;
|
|
49
49
|
private startY = 0;
|
|
@@ -52,14 +52,14 @@ export default class PanGestureHandler extends GestureHandler {
|
|
|
52
52
|
private lastX = 0;
|
|
53
53
|
private lastY = 0;
|
|
54
54
|
|
|
55
|
-
// TODO: Implement logic required for activateAfterLongPress
|
|
56
55
|
private activateAfterLongPress = 0;
|
|
56
|
+
private activationTimeout = 0;
|
|
57
57
|
|
|
58
58
|
public init(ref: number, propsRef: React.RefObject<unknown>): void {
|
|
59
59
|
super.init(ref, propsRef);
|
|
60
60
|
}
|
|
61
61
|
|
|
62
|
-
public updateGestureConfig({ enabled = true, ...props }): void {
|
|
62
|
+
public updateGestureConfig({ enabled = true, ...props }: Config): void {
|
|
63
63
|
this.resetConfig();
|
|
64
64
|
|
|
65
65
|
super.updateGestureConfig({ enabled: enabled, ...props });
|
|
@@ -94,6 +94,10 @@ export default class PanGestureHandler extends GestureHandler {
|
|
|
94
94
|
this.minVelocityY = this.config.minVelocityY;
|
|
95
95
|
}
|
|
96
96
|
|
|
97
|
+
if (this.config.activateAfterLongPress !== undefined) {
|
|
98
|
+
this.activateAfterLongPress = this.config.activateAfterLongPress;
|
|
99
|
+
}
|
|
100
|
+
|
|
97
101
|
if (this.config.shouldCancelWhenOutside) {
|
|
98
102
|
this.setShouldCancelWhenOutside(false);
|
|
99
103
|
}
|
|
@@ -188,22 +192,22 @@ export default class PanGestureHandler extends GestureHandler {
|
|
|
188
192
|
this.activateAfterLongPress = 0;
|
|
189
193
|
}
|
|
190
194
|
|
|
191
|
-
protected transformNativeEvent(
|
|
192
|
-
|
|
193
|
-
return {};
|
|
194
|
-
}
|
|
195
|
-
|
|
195
|
+
protected transformNativeEvent() {
|
|
196
|
+
const rect: DOMRect = this.view.getBoundingClientRect();
|
|
196
197
|
const ratio = PixelRatio.get();
|
|
197
198
|
|
|
199
|
+
const translationX: number = this.getTranslationX();
|
|
200
|
+
const translationY: number = this.getTranslationY();
|
|
201
|
+
|
|
198
202
|
return {
|
|
199
|
-
translationX:
|
|
200
|
-
translationY:
|
|
201
|
-
absoluteX:
|
|
202
|
-
absoluteY:
|
|
203
|
+
translationX: isNaN(translationX) ? 0 : translationX,
|
|
204
|
+
translationY: isNaN(translationY) ? 0 : translationY,
|
|
205
|
+
absoluteX: this.tracker.getLastAvgX(),
|
|
206
|
+
absoluteY: this.tracker.getLastAvgY(),
|
|
203
207
|
velocityX: this.velocityX * ratio * 10,
|
|
204
208
|
velocityY: this.velocityY * ratio * 10,
|
|
205
|
-
x:
|
|
206
|
-
y:
|
|
209
|
+
x: this.tracker.getLastAvgX() - rect.left,
|
|
210
|
+
y: this.tracker.getLastAvgY() - rect.top,
|
|
207
211
|
};
|
|
208
212
|
}
|
|
209
213
|
|
|
@@ -214,23 +218,25 @@ export default class PanGestureHandler extends GestureHandler {
|
|
|
214
218
|
return this.lastY - this.startY + this.offsetY;
|
|
215
219
|
}
|
|
216
220
|
|
|
221
|
+
private clearActivationTimeout(): void {
|
|
222
|
+
clearTimeout(this.activationTimeout);
|
|
223
|
+
}
|
|
224
|
+
|
|
217
225
|
//EventsHandling
|
|
218
|
-
protected onPointerDown(event:
|
|
219
|
-
super.onPointerDown(event);
|
|
226
|
+
protected onPointerDown(event: AdaptedEvent): void {
|
|
220
227
|
this.tracker.addToTracker(event);
|
|
221
|
-
|
|
222
|
-
if (this.tracker.getTrackedPointersCount() > 1) {
|
|
223
|
-
this.onPointerAdd(event);
|
|
224
|
-
return;
|
|
225
|
-
}
|
|
228
|
+
super.onPointerDown(event);
|
|
226
229
|
|
|
227
230
|
this.lastX = this.tracker.getLastAvgX();
|
|
228
231
|
this.lastY = this.tracker.getLastAvgY();
|
|
229
232
|
|
|
230
233
|
this.tryBegin(event);
|
|
231
|
-
this.checkBegan(
|
|
234
|
+
this.checkBegan();
|
|
232
235
|
}
|
|
233
|
-
|
|
236
|
+
|
|
237
|
+
protected onPointerAdd(event: AdaptedEvent): void {
|
|
238
|
+
this.tracker.addToTracker(event);
|
|
239
|
+
super.onPointerAdd(event);
|
|
234
240
|
this.tryBegin(event);
|
|
235
241
|
|
|
236
242
|
this.offsetX += this.lastX - this.startX;
|
|
@@ -244,25 +250,18 @@ export default class PanGestureHandler extends GestureHandler {
|
|
|
244
250
|
|
|
245
251
|
if (this.tracker.getTrackedPointersCount() > this.maxPointers) {
|
|
246
252
|
if (this.currentState === State.ACTIVE) {
|
|
247
|
-
this.cancel(
|
|
253
|
+
this.cancel();
|
|
248
254
|
} else {
|
|
249
|
-
this.fail(
|
|
255
|
+
this.fail();
|
|
250
256
|
}
|
|
251
257
|
} else {
|
|
252
|
-
this.checkBegan(
|
|
258
|
+
this.checkBegan();
|
|
253
259
|
}
|
|
254
260
|
}
|
|
255
261
|
|
|
256
|
-
protected onPointerUp(event:
|
|
262
|
+
protected onPointerUp(event: AdaptedEvent): void {
|
|
257
263
|
super.onPointerUp(event);
|
|
258
264
|
|
|
259
|
-
if (this.tracker.getTrackedPointersCount() > 1) {
|
|
260
|
-
this.tracker.removeFromTracker(event.pointerId);
|
|
261
|
-
|
|
262
|
-
this.onPointerRemove(event);
|
|
263
|
-
return;
|
|
264
|
-
}
|
|
265
|
-
|
|
266
265
|
if (this.currentState === State.ACTIVE) {
|
|
267
266
|
this.lastX = this.tracker.getLastAvgX();
|
|
268
267
|
this.lastY = this.tracker.getLastAvgY();
|
|
@@ -271,13 +270,16 @@ export default class PanGestureHandler extends GestureHandler {
|
|
|
271
270
|
this.tracker.removeFromTracker(event.pointerId);
|
|
272
271
|
|
|
273
272
|
if (this.currentState === State.ACTIVE) {
|
|
274
|
-
this.end(
|
|
273
|
+
this.end();
|
|
275
274
|
} else {
|
|
276
275
|
this.resetProgress();
|
|
277
|
-
this.fail(
|
|
276
|
+
this.fail();
|
|
278
277
|
}
|
|
279
278
|
}
|
|
280
|
-
protected onPointerRemove(event:
|
|
279
|
+
protected onPointerRemove(event: AdaptedEvent): void {
|
|
280
|
+
super.onPointerRemove(event);
|
|
281
|
+
this.tracker.removeFromTracker(event.pointerId);
|
|
282
|
+
|
|
281
283
|
this.offsetX += this.lastX - this.startX;
|
|
282
284
|
this.offsetY += this.lastY - this.startY;
|
|
283
285
|
|
|
@@ -293,11 +295,11 @@ export default class PanGestureHandler extends GestureHandler {
|
|
|
293
295
|
this.tracker.getTrackedPointersCount() < this.minPointers
|
|
294
296
|
)
|
|
295
297
|
) {
|
|
296
|
-
this.checkBegan(
|
|
298
|
+
this.checkBegan();
|
|
297
299
|
}
|
|
298
300
|
}
|
|
299
301
|
|
|
300
|
-
protected onPointerMove(event:
|
|
302
|
+
protected onPointerMove(event: AdaptedEvent): void {
|
|
301
303
|
this.tracker.track(event);
|
|
302
304
|
|
|
303
305
|
this.lastX = this.tracker.getLastAvgX();
|
|
@@ -305,17 +307,17 @@ export default class PanGestureHandler extends GestureHandler {
|
|
|
305
307
|
this.velocityX = this.tracker.getVelocityX(event.pointerId);
|
|
306
308
|
this.velocityY = this.tracker.getVelocityY(event.pointerId);
|
|
307
309
|
|
|
308
|
-
this.checkBegan(
|
|
310
|
+
this.checkBegan();
|
|
309
311
|
|
|
310
312
|
super.onPointerMove(event);
|
|
311
313
|
}
|
|
312
314
|
|
|
313
|
-
protected onPointerCancel(event:
|
|
315
|
+
protected onPointerCancel(event: AdaptedEvent): void {
|
|
314
316
|
super.onPointerCancel(event);
|
|
315
317
|
|
|
316
318
|
this.reset();
|
|
317
319
|
}
|
|
318
|
-
protected onPointerOutOfBounds(event:
|
|
320
|
+
protected onPointerOutOfBounds(event: AdaptedEvent): void {
|
|
319
321
|
if (this.getShouldCancelWhenOutside()) {
|
|
320
322
|
return;
|
|
321
323
|
}
|
|
@@ -327,7 +329,7 @@ export default class PanGestureHandler extends GestureHandler {
|
|
|
327
329
|
this.velocityX = this.tracker.getVelocityX(event.pointerId);
|
|
328
330
|
this.velocityY = this.tracker.getVelocityY(event.pointerId);
|
|
329
331
|
|
|
330
|
-
this.checkBegan(
|
|
332
|
+
this.checkBegan();
|
|
331
333
|
|
|
332
334
|
if (this.currentState === State.ACTIVE) {
|
|
333
335
|
super.onPointerOutOfBounds(event);
|
|
@@ -409,6 +411,7 @@ export default class PanGestureHandler extends GestureHandler {
|
|
|
409
411
|
const distanceSq = dx * dx + dy * dy;
|
|
410
412
|
|
|
411
413
|
if (this.activateAfterLongPress > 0 && distanceSq > DEFAULT_MIN_DIST_SQ) {
|
|
414
|
+
this.clearActivationTimeout();
|
|
412
415
|
return true;
|
|
413
416
|
}
|
|
414
417
|
|
|
@@ -439,7 +442,7 @@ export default class PanGestureHandler extends GestureHandler {
|
|
|
439
442
|
);
|
|
440
443
|
}
|
|
441
444
|
|
|
442
|
-
private tryBegin(event:
|
|
445
|
+
private tryBegin(event: AdaptedEvent): void {
|
|
443
446
|
if (
|
|
444
447
|
this.currentState === State.UNDETERMINED &&
|
|
445
448
|
this.tracker.getTrackedPointersCount() >= this.minPointers
|
|
@@ -450,31 +453,43 @@ export default class PanGestureHandler extends GestureHandler {
|
|
|
450
453
|
this.velocityX = 0;
|
|
451
454
|
this.velocityY = 0;
|
|
452
455
|
|
|
453
|
-
this.begin(
|
|
456
|
+
this.begin();
|
|
454
457
|
|
|
455
|
-
|
|
458
|
+
if (this.activateAfterLongPress > 0) {
|
|
459
|
+
this.activationTimeout = setTimeout(() => {
|
|
460
|
+
this.activate();
|
|
461
|
+
}, this.activateAfterLongPress);
|
|
462
|
+
}
|
|
456
463
|
} else {
|
|
457
464
|
this.velocityX = this.tracker.getVelocityX(event.pointerId);
|
|
458
465
|
this.velocityY = this.tracker.getVelocityY(event.pointerId);
|
|
459
466
|
}
|
|
460
467
|
}
|
|
461
468
|
|
|
462
|
-
private checkBegan(
|
|
469
|
+
private checkBegan(): void {
|
|
463
470
|
if (this.currentState === State.BEGAN) {
|
|
464
471
|
if (this.shouldFail()) {
|
|
465
|
-
this.fail(
|
|
472
|
+
this.fail();
|
|
466
473
|
} else if (this.shouldActivate()) {
|
|
467
|
-
this.activate(
|
|
474
|
+
this.activate();
|
|
468
475
|
}
|
|
469
476
|
}
|
|
470
477
|
}
|
|
471
478
|
|
|
472
|
-
|
|
479
|
+
public activate(force = false): void {
|
|
473
480
|
if (this.currentState !== State.ACTIVE) {
|
|
474
481
|
this.resetProgress();
|
|
475
482
|
}
|
|
476
483
|
|
|
477
|
-
super.activate(
|
|
484
|
+
super.activate(force);
|
|
485
|
+
}
|
|
486
|
+
|
|
487
|
+
protected onCancel(): void {
|
|
488
|
+
this.clearActivationTimeout();
|
|
489
|
+
}
|
|
490
|
+
|
|
491
|
+
protected onReset(): void {
|
|
492
|
+
this.clearActivationTimeout();
|
|
478
493
|
}
|
|
479
494
|
|
|
480
495
|
protected resetProgress(): void {
|