react-native-gesture-handler 2.7.0 → 2.8.0
Sign up to get free protection for your applications and to get access to all the features.
- package/android/build.gradle +10 -5
- package/android/noreanimated/src/main/java/com/swmansion/gesturehandler/ReanimatedEventDispatcher.kt +3 -3
- package/android/reanimated/src/main/java/com/swmansion/gesturehandler/ReanimatedEventDispatcher.kt +7 -7
- package/android/src/fabric/java/com/swmansion/gesturehandler/ReactContextExtensions.kt +2 -2
- package/android/src/main/java/com/swmansion/gesturehandler/RNGestureHandlerPackage.kt +3 -3
- package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/FlingGestureHandler.kt +12 -9
- package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/GestureHandler.kt +39 -31
- package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/GestureHandlerInteractionController.kt +1 -1
- package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/GestureHandlerOrchestrator.kt +28 -19
- package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/GestureHandlerRegistry.kt +1 -1
- package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/GestureUtils.kt +1 -1
- package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/LongPressGestureHandler.kt +1 -1
- package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/ManualGestureHandler.kt +1 -1
- package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/NativeViewGestureHandler.kt +5 -5
- package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/OnTouchEventListener.kt +1 -1
- package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/PanGestureHandler.kt +7 -5
- package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/PinchGestureHandler.kt +11 -4
- package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/PointerEventsConfig.kt +1 -1
- package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/RotationGestureDetector.kt +1 -1
- package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/RotationGestureHandler.kt +7 -2
- package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/ScaleGestureDetector.java +1 -1
- package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/TapGestureHandler.kt +3 -3
- package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/core}/ViewConfigurationHelper.kt +1 -1
- package/android/{lib/src/main/java/com/swmansion/gesturehandler → src/main/java/com/swmansion/gesturehandler/react}/Extensions.kt +3 -3
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerButtonViewManager.kt +7 -6
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEnabledRootView.kt +1 -5
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEvent.kt +6 -6
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerEventDataExtractor.kt +1 -1
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerInteractionManager.kt +3 -3
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerModule.kt +35 -14
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRegistry.kt +2 -2
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootHelper.kt +8 -6
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootView.kt +0 -2
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootViewManager.kt +4 -2
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerStateChangeEvent.kt +7 -7
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerTouchEvent.kt +5 -5
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNViewConfigurationHelper.kt +2 -2
- package/android/src/paper/java/com/swmansion/gesturehandler/ReactContextExtensions.kt +5 -5
- package/ios/Handlers/RNManualHandler.m +24 -8
- package/ios/RNGestureHandlerButtonComponentView.mm +7 -8
- package/ios/RNGestureHandlerManager.mm +176 -178
- package/lib/commonjs/RNGestureHandlerModule.macos.js.map +1 -1
- package/lib/commonjs/RNGestureHandlerModule.web.js.map +1 -1
- package/lib/commonjs/RNGestureHandlerModule.windows.js +156 -0
- package/lib/commonjs/RNGestureHandlerModule.windows.js.map +1 -0
- package/lib/commonjs/components/DrawerLayout.js +1 -0
- package/lib/commonjs/components/DrawerLayout.js.map +1 -1
- package/lib/commonjs/components/Swipeable.js.map +1 -1
- package/lib/commonjs/components/touchables/TouchableOpacity.js.map +1 -1
- package/lib/commonjs/getShadowNodeFromRef.js +2 -2
- package/lib/commonjs/getShadowNodeFromRef.js.map +1 -1
- package/lib/commonjs/handlers/createHandler.js.map +1 -1
- package/lib/commonjs/handlers/gestureHandlerCommon.js +5 -2
- package/lib/commonjs/handlers/gestureHandlerCommon.js.map +1 -1
- package/lib/commonjs/handlers/gestureHandlerTypesCompat.js +4 -0
- package/lib/commonjs/handlers/gestures/GestureDetector.js +26 -12
- package/lib/commonjs/handlers/gestures/GestureDetector.js.map +1 -1
- package/lib/commonjs/handlers/gestures/eventReceiver.js.map +1 -1
- package/lib/commonjs/handlers/gestures/gesture.js.map +1 -1
- package/lib/commonjs/handlers/gestures/gestureComposition.js +15 -4
- package/lib/commonjs/handlers/gestures/gestureComposition.js.map +1 -1
- package/lib/commonjs/jestUtils/jestUtils.js.map +1 -1
- package/lib/commonjs/web/detectors/RotationGestureDetector.js.map +1 -1
- package/lib/commonjs/web/handlers/FlingGestureHandler.js +18 -15
- package/lib/commonjs/web/handlers/FlingGestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/GestureHandler.js +36 -7
- package/lib/commonjs/web/handlers/GestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/LongPressGestureHandler.js +2 -1
- package/lib/commonjs/web/handlers/LongPressGestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/ManualGestureHandler.js +15 -0
- package/lib/commonjs/web/handlers/ManualGestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/NativeViewGestureHandler.js +0 -5
- package/lib/commonjs/web/handlers/NativeViewGestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/PanGestureHandler.js +0 -5
- package/lib/commonjs/web/handlers/PanGestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/PinchGestureHandler.js +0 -1
- package/lib/commonjs/web/handlers/PinchGestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/RotationGestureHandler.js +0 -1
- package/lib/commonjs/web/handlers/RotationGestureHandler.js.map +1 -1
- package/lib/commonjs/web/handlers/TapGestureHandler.js +0 -1
- package/lib/commonjs/web/handlers/TapGestureHandler.js.map +1 -1
- package/lib/commonjs/web/interfaces.js.map +1 -1
- package/lib/commonjs/web/tools/InteractionManager.js.map +1 -1
- package/lib/commonjs/web_hammer/GestureHandler.js.map +1 -1
- package/lib/commonjs/web_hammer/NodeManager.js +4 -1
- package/lib/commonjs/web_hammer/NodeManager.js.map +1 -1
- package/lib/commonjs/web_hammer/PanGestureHandler.js +25 -6
- package/lib/commonjs/web_hammer/PanGestureHandler.js.map +1 -1
- package/lib/module/RNGestureHandlerModule.macos.js.map +1 -1
- package/lib/module/RNGestureHandlerModule.web.js.map +1 -1
- package/lib/module/RNGestureHandlerModule.windows.js +117 -0
- package/lib/module/RNGestureHandlerModule.windows.js.map +1 -0
- package/lib/module/components/DrawerLayout.js +1 -0
- package/lib/module/components/DrawerLayout.js.map +1 -1
- package/lib/module/components/Swipeable.js.map +1 -1
- package/lib/module/components/touchables/TouchableOpacity.js.map +1 -1
- package/lib/module/getShadowNodeFromRef.js +2 -2
- package/lib/module/getShadowNodeFromRef.js.map +1 -1
- package/lib/module/handlers/createHandler.js.map +1 -1
- package/lib/module/handlers/gestureHandlerCommon.js +5 -2
- package/lib/module/handlers/gestureHandlerCommon.js.map +1 -1
- package/lib/module/handlers/gestureHandlerTypesCompat.js +1 -1
- package/lib/module/handlers/gestures/GestureDetector.js +26 -12
- package/lib/module/handlers/gestures/GestureDetector.js.map +1 -1
- package/lib/module/handlers/gestures/eventReceiver.js.map +1 -1
- package/lib/module/handlers/gestures/gesture.js.map +1 -1
- package/lib/module/handlers/gestures/gestureComposition.js +15 -4
- package/lib/module/handlers/gestures/gestureComposition.js.map +1 -1
- package/lib/module/jestUtils/jestUtils.js.map +1 -1
- package/lib/module/web/detectors/RotationGestureDetector.js.map +1 -1
- package/lib/module/web/handlers/FlingGestureHandler.js +18 -15
- package/lib/module/web/handlers/FlingGestureHandler.js.map +1 -1
- package/lib/module/web/handlers/GestureHandler.js +36 -6
- package/lib/module/web/handlers/GestureHandler.js.map +1 -1
- package/lib/module/web/handlers/LongPressGestureHandler.js +2 -1
- package/lib/module/web/handlers/LongPressGestureHandler.js.map +1 -1
- package/lib/module/web/handlers/ManualGestureHandler.js +15 -0
- package/lib/module/web/handlers/ManualGestureHandler.js.map +1 -1
- package/lib/module/web/handlers/NativeViewGestureHandler.js +0 -5
- package/lib/module/web/handlers/NativeViewGestureHandler.js.map +1 -1
- package/lib/module/web/handlers/PanGestureHandler.js +0 -5
- package/lib/module/web/handlers/PanGestureHandler.js.map +1 -1
- package/lib/module/web/handlers/PinchGestureHandler.js +0 -1
- package/lib/module/web/handlers/PinchGestureHandler.js.map +1 -1
- package/lib/module/web/handlers/RotationGestureHandler.js +0 -1
- package/lib/module/web/handlers/RotationGestureHandler.js.map +1 -1
- package/lib/module/web/handlers/TapGestureHandler.js +0 -1
- package/lib/module/web/handlers/TapGestureHandler.js.map +1 -1
- package/lib/module/web/interfaces.js.map +1 -1
- package/lib/module/web/tools/InteractionManager.js.map +1 -1
- package/lib/module/web_hammer/GestureHandler.js.map +1 -1
- package/lib/module/web_hammer/NodeManager.js +4 -1
- package/lib/module/web_hammer/NodeManager.js.map +1 -1
- package/lib/module/web_hammer/PanGestureHandler.js +25 -6
- package/lib/module/web_hammer/PanGestureHandler.js.map +1 -1
- package/lib/typescript/RNGestureHandlerModule.macos.d.ts +1 -1
- package/lib/typescript/RNGestureHandlerModule.web.d.ts +1 -1
- package/lib/typescript/RNGestureHandlerModule.windows.d.ts +48 -0
- package/lib/typescript/components/DrawerLayout.d.ts +7 -0
- package/lib/typescript/handlers/NativeViewGestureHandler.d.ts +1 -1
- package/lib/typescript/handlers/PanGestureHandler.d.ts +1 -1
- package/lib/typescript/handlers/gestureHandlerCommon.d.ts +3 -1
- package/lib/typescript/handlers/gestures/GestureDetector.d.ts +3 -1
- package/lib/typescript/web/handlers/FlingGestureHandler.d.ts +1 -0
- package/lib/typescript/web/handlers/GestureHandler.d.ts +1 -0
- package/lib/typescript/web/handlers/ManualGestureHandler.d.ts +3 -1
- package/lib/typescript/web/interfaces.d.ts +3 -1
- package/lib/typescript/web/tools/NodeManager.d.ts +2 -2
- package/package.json +14 -10
- package/src/RNGestureHandlerModule.macos.ts +2 -2
- package/src/RNGestureHandlerModule.web.ts +2 -2
- package/src/RNGestureHandlerModule.windows.ts +140 -0
- package/src/components/DrawerLayout.tsx +14 -8
- package/src/components/Swipeable.tsx +2 -4
- package/src/components/touchables/TouchableOpacity.tsx +1 -1
- package/src/getShadowNodeFromRef.ts +3 -3
- package/src/handlers/createHandler.tsx +13 -15
- package/src/handlers/gestureHandlerCommon.ts +9 -4
- package/src/handlers/gestureHandlerTypesCompat.ts +34 -17
- package/src/handlers/gestures/GestureDetector.tsx +46 -19
- package/src/handlers/gestures/eventReceiver.ts +2 -1
- package/src/handlers/gestures/gesture.ts +8 -12
- package/src/handlers/gestures/gestureComposition.ts +19 -6
- package/src/jestUtils/jestUtils.ts +3 -4
- package/src/web/detectors/RotationGestureDetector.ts +2 -1
- package/src/web/handlers/FlingGestureHandler.ts +28 -20
- package/src/web/handlers/GestureHandler.ts +42 -17
- package/src/web/handlers/LongPressGestureHandler.ts +2 -2
- package/src/web/handlers/ManualGestureHandler.ts +10 -1
- package/src/web/handlers/NativeViewGestureHandler.ts +0 -5
- package/src/web/handlers/PanGestureHandler.ts +0 -6
- package/src/web/handlers/PinchGestureHandler.ts +0 -2
- package/src/web/handlers/RotationGestureHandler.ts +2 -5
- package/src/web/handlers/TapGestureHandler.ts +0 -2
- package/src/web/interfaces.ts +3 -0
- package/src/web/tools/InteractionManager.ts +2 -3
- package/src/web_hammer/GestureHandler.ts +6 -8
- package/src/web_hammer/NodeManager.ts +3 -1
- package/src/web_hammer/PanGestureHandler.ts +12 -6
- package/android/lib/build.gradle +0 -28
- package/ios/RNGestureHandler.xcodeproj/project.xcworkspace/xcuserdata/jakubpiasecki.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
- package/ios/RNGestureHandler.xcodeproj/xcuserdata/jakubpiasecki.xcuserdatad/xcschemes/xcschememanagement.plist +0 -19
@@ -69,14 +69,24 @@ export class ComposedGesture extends Gesture {
|
|
69
69
|
|
70
70
|
export class SimultaneousGesture extends ComposedGesture {
|
71
71
|
prepare() {
|
72
|
-
|
73
|
-
|
74
|
-
|
72
|
+
// this piece of magic works something like this:
|
73
|
+
// for every gesture in the array
|
74
|
+
const simultaneousArrays = this.gestures.map((gesture) =>
|
75
|
+
// we take the array it's in
|
76
|
+
this.gestures
|
77
|
+
// and make a copy without it
|
78
|
+
.filter((x) => x !== gesture)
|
79
|
+
// then we flatmap the result to get list of raw (not composed) gestures
|
80
|
+
// this way we don't make the gestures simultaneous with themselves, which is
|
81
|
+
// important when the gesture is `ExclusiveGesture` - we don't want to make
|
82
|
+
// exclusive gestures simultaneous
|
83
|
+
.flatMap((x) => x.toGestureArray())
|
84
|
+
);
|
75
85
|
|
76
|
-
for (
|
86
|
+
for (let i = 0; i < this.gestures.length; i++) {
|
77
87
|
this.prepareSingleGesture(
|
78
|
-
|
79
|
-
|
88
|
+
this.gestures[i],
|
89
|
+
simultaneousArrays[i],
|
80
90
|
this.requireGesturesToFail
|
81
91
|
);
|
82
92
|
}
|
@@ -85,6 +95,8 @@ export class SimultaneousGesture extends ComposedGesture {
|
|
85
95
|
|
86
96
|
export class ExclusiveGesture extends ComposedGesture {
|
87
97
|
prepare() {
|
98
|
+
// transforms the array of gestures into array of grouped raw (not composed) gestures
|
99
|
+
// i.e. [gesture1, gesture2, ComposedGesture(gesture3, gesture4)] -> [[gesture1], [gesture2], [gesture3, gesture4]]
|
88
100
|
const gestureArrays = this.gestures.map((gesture) =>
|
89
101
|
gesture.toGestureArray()
|
90
102
|
);
|
@@ -98,6 +110,7 @@ export class ExclusiveGesture extends ComposedGesture {
|
|
98
110
|
this.requireGesturesToFail.concat(requireToFail)
|
99
111
|
);
|
100
112
|
|
113
|
+
// every group gets to wait for all groups before it
|
101
114
|
requireToFail = requireToFail.concat(gestureArrays[i]);
|
102
115
|
}
|
103
116
|
}
|
@@ -464,9 +464,8 @@ export function fireGestureHandler<THandler extends AllGestures | AllHandlers>(
|
|
464
464
|
componentOrGesture: ReactTestInstance | GestureType,
|
465
465
|
eventList: Partial<GestureHandlerTestEvent<ExtractConfig<THandler>>>[] = []
|
466
466
|
): void {
|
467
|
-
const { emitEvent, handlerType, handlerTag } =
|
468
|
-
componentOrGesture
|
469
|
-
);
|
467
|
+
const { emitEvent, handlerType, handlerTag } =
|
468
|
+
getHandlerData(componentOrGesture);
|
470
469
|
|
471
470
|
let _ = fillMissingStatesTransitions(
|
472
471
|
eventList,
|
@@ -478,7 +477,7 @@ export function fireGestureHandler<THandler extends AllGestures | AllHandlers>(
|
|
478
477
|
// @ts-ignore TODO
|
479
478
|
_ = _.map(wrapWithNativeEvent);
|
480
479
|
|
481
|
-
const events =
|
480
|
+
const events = _ as unknown as WrappedGestureHandlerTestEvent[];
|
482
481
|
|
483
482
|
const firstEvent = events.shift()!;
|
484
483
|
|
@@ -8,7 +8,8 @@ export interface RotationGestureListener {
|
|
8
8
|
}
|
9
9
|
|
10
10
|
export default class RotationGestureDetector
|
11
|
-
implements RotationGestureListener
|
11
|
+
implements RotationGestureListener
|
12
|
+
{
|
12
13
|
onRotationBegin: (detector: RotationGestureDetector) => boolean;
|
13
14
|
onRotation: (detector: RotationGestureDetector) => boolean;
|
14
15
|
onRotationEnd: (detector: RotationGestureDetector) => void;
|
@@ -21,6 +21,7 @@ export default class FlingGestureHandler extends GestureHandler {
|
|
21
21
|
private startY = 0;
|
22
22
|
|
23
23
|
private maxNumberOfPointersSimultaneously = 0;
|
24
|
+
private keyPointer = NaN;
|
24
25
|
|
25
26
|
public init(ref: number, propsRef: React.RefObject<unknown>): void {
|
26
27
|
super.init(ref, propsRef);
|
@@ -29,8 +30,6 @@ export default class FlingGestureHandler extends GestureHandler {
|
|
29
30
|
public updateGestureConfig({ enabled = true, ...props }: Config): void {
|
30
31
|
super.updateGestureConfig({ enabled: enabled, ...props });
|
31
32
|
|
32
|
-
this.enabled = enabled;
|
33
|
-
|
34
33
|
if (this.config.direction) {
|
35
34
|
this.direction = this.config.direction;
|
36
35
|
}
|
@@ -51,9 +50,9 @@ export default class FlingGestureHandler extends GestureHandler {
|
|
51
50
|
};
|
52
51
|
}
|
53
52
|
|
54
|
-
private startFling(
|
55
|
-
this.startX =
|
56
|
-
this.startY =
|
53
|
+
private startFling(): void {
|
54
|
+
this.startX = this.tracker.getLastX(this.keyPointer);
|
55
|
+
this.startY = this.tracker.getLastY(this.keyPointer);
|
57
56
|
|
58
57
|
this.begin();
|
59
58
|
|
@@ -62,18 +61,22 @@ export default class FlingGestureHandler extends GestureHandler {
|
|
62
61
|
this.delayTimeout = setTimeout(() => this.fail(), this.maxDurationMs);
|
63
62
|
}
|
64
63
|
|
65
|
-
private tryEndFling(
|
64
|
+
private tryEndFling(): boolean {
|
66
65
|
if (
|
67
66
|
this.maxNumberOfPointersSimultaneously ===
|
68
67
|
this.numberOfPointersRequired &&
|
69
68
|
((this.direction & Direction.RIGHT &&
|
70
|
-
|
69
|
+
this.tracker.getLastX(this.keyPointer) - this.startX >
|
70
|
+
this.minAcceptableDelta) ||
|
71
71
|
(this.direction & Direction.LEFT &&
|
72
|
-
this.startX -
|
72
|
+
this.startX - this.tracker.getLastX(this.keyPointer) >
|
73
|
+
this.minAcceptableDelta) ||
|
73
74
|
(this.direction & Direction.UP &&
|
74
|
-
this.startY -
|
75
|
+
this.startY - this.tracker.getLastY(this.keyPointer) >
|
76
|
+
this.minAcceptableDelta) ||
|
75
77
|
(this.direction & Direction.DOWN &&
|
76
|
-
|
78
|
+
this.tracker.getLastY(this.keyPointer) - this.startY >
|
79
|
+
this.minAcceptableDelta))
|
77
80
|
) {
|
78
81
|
clearTimeout(this.delayTimeout);
|
79
82
|
this.activate();
|
@@ -84,40 +87,43 @@ export default class FlingGestureHandler extends GestureHandler {
|
|
84
87
|
return false;
|
85
88
|
}
|
86
89
|
|
87
|
-
private endFling(
|
88
|
-
if (!this.tryEndFling(
|
90
|
+
private endFling() {
|
91
|
+
if (!this.tryEndFling()) {
|
89
92
|
this.fail();
|
90
93
|
}
|
91
94
|
}
|
92
95
|
|
93
96
|
protected onPointerDown(event: AdaptedEvent): void {
|
94
97
|
this.tracker.addToTracker(event);
|
98
|
+
this.keyPointer = event.pointerId;
|
99
|
+
|
95
100
|
super.onPointerDown(event);
|
96
|
-
this.newPointerAction(
|
101
|
+
this.newPointerAction();
|
97
102
|
}
|
98
103
|
|
99
104
|
protected onPointerAdd(event: AdaptedEvent): void {
|
100
105
|
this.tracker.addToTracker(event);
|
101
106
|
super.onPointerAdd(event);
|
102
|
-
this.newPointerAction(
|
107
|
+
this.newPointerAction();
|
103
108
|
}
|
104
109
|
|
105
|
-
private newPointerAction(
|
110
|
+
private newPointerAction(): void {
|
106
111
|
if (this.currentState === State.UNDETERMINED) {
|
107
|
-
this.startFling(
|
112
|
+
this.startFling();
|
108
113
|
}
|
109
114
|
|
110
115
|
if (this.currentState !== State.BEGAN) {
|
111
116
|
return;
|
112
117
|
}
|
113
118
|
|
114
|
-
this.tryEndFling(
|
119
|
+
this.tryEndFling();
|
115
120
|
|
116
121
|
if (
|
117
122
|
this.tracker.getTrackedPointersCount() >
|
118
123
|
this.maxNumberOfPointersSimultaneously
|
119
124
|
) {
|
120
|
-
this.maxNumberOfPointersSimultaneously =
|
125
|
+
this.maxNumberOfPointersSimultaneously =
|
126
|
+
this.tracker.getTrackedPointersCount();
|
121
127
|
}
|
122
128
|
}
|
123
129
|
|
@@ -128,7 +134,7 @@ export default class FlingGestureHandler extends GestureHandler {
|
|
128
134
|
return;
|
129
135
|
}
|
130
136
|
|
131
|
-
this.tryEndFling(
|
137
|
+
this.tryEndFling();
|
132
138
|
|
133
139
|
super.onPointerMove(event);
|
134
140
|
}
|
@@ -136,6 +142,8 @@ export default class FlingGestureHandler extends GestureHandler {
|
|
136
142
|
protected onPointerUp(event: AdaptedEvent): void {
|
137
143
|
super.onPointerUp(event);
|
138
144
|
this.onUp(event);
|
145
|
+
|
146
|
+
this.keyPointer = NaN;
|
139
147
|
}
|
140
148
|
|
141
149
|
protected onPointerRemove(event: AdaptedEvent): void {
|
@@ -148,7 +156,7 @@ export default class FlingGestureHandler extends GestureHandler {
|
|
148
156
|
if (this.currentState !== State.BEGAN) {
|
149
157
|
return;
|
150
158
|
}
|
151
|
-
this.endFling(
|
159
|
+
this.endFling();
|
152
160
|
}
|
153
161
|
|
154
162
|
protected onPointerCancel(event: AdaptedEvent): void {
|
@@ -70,13 +70,18 @@ export default abstract class GestureHandler {
|
|
70
70
|
);
|
71
71
|
}
|
72
72
|
|
73
|
-
this.view =
|
73
|
+
this.view = findNodeHandle(this.ref) as unknown as HTMLElement;
|
74
74
|
this.view.style['touchAction'] = 'none';
|
75
|
-
this.view.style['webkitUserSelect'] = 'none';
|
76
|
-
this.view.style['userSelect'] = 'none';
|
77
|
-
|
78
75
|
//@ts-ignore This one disables default events on Safari
|
79
76
|
this.view.style['WebkitTouchCallout'] = 'none';
|
77
|
+
|
78
|
+
if (!this.config.userSelect) {
|
79
|
+
this.view.style['webkitUserSelect'] = 'none';
|
80
|
+
this.view.style['userSelect'] = 'none';
|
81
|
+
} else {
|
82
|
+
this.view.style['webkitUserSelect'] = this.config.userSelect;
|
83
|
+
this.view.style['userSelect'] = this.config.userSelect;
|
84
|
+
}
|
80
85
|
}
|
81
86
|
|
82
87
|
private addEventManager(manager: EventManager): void {
|
@@ -121,19 +126,17 @@ export default abstract class GestureHandler {
|
|
121
126
|
return;
|
122
127
|
}
|
123
128
|
|
129
|
+
const oldState = this.currentState;
|
130
|
+
this.currentState = newState;
|
131
|
+
|
124
132
|
if (
|
125
133
|
this.tracker.getTrackedPointersCount() > 0 &&
|
126
134
|
this.config.needsPointerData &&
|
127
|
-
(
|
128
|
-
newState === State.CANCELLED ||
|
129
|
-
newState === State.FAILED)
|
135
|
+
this.isFinished()
|
130
136
|
) {
|
131
137
|
this.cancelTouches();
|
132
138
|
}
|
133
139
|
|
134
|
-
const oldState = this.currentState;
|
135
|
-
this.currentState = newState;
|
136
|
-
|
137
140
|
GestureHandlerOrchestrator.getInstance().onHandlerStateChange(
|
138
141
|
this,
|
139
142
|
newState,
|
@@ -324,6 +327,18 @@ export default abstract class GestureHandler {
|
|
324
327
|
}
|
325
328
|
}
|
326
329
|
protected onPointerOut(event: AdaptedEvent): void {
|
330
|
+
if (this.shouldCancellWhenOutside) {
|
331
|
+
switch (this.currentState) {
|
332
|
+
case State.ACTIVE:
|
333
|
+
this.cancel();
|
334
|
+
break;
|
335
|
+
case State.BEGAN:
|
336
|
+
this.fail();
|
337
|
+
break;
|
338
|
+
}
|
339
|
+
return;
|
340
|
+
}
|
341
|
+
|
327
342
|
if (this.config.needsPointerData) {
|
328
343
|
this.sendTouchEvent(event);
|
329
344
|
}
|
@@ -362,9 +377,8 @@ export default abstract class GestureHandler {
|
|
362
377
|
const { onGestureHandlerEvent }: PropsRef = this.propsRef
|
363
378
|
.current as PropsRef;
|
364
379
|
|
365
|
-
const touchEvent: ResultTouchEvent | undefined =
|
366
|
-
event
|
367
|
-
);
|
380
|
+
const touchEvent: ResultTouchEvent | undefined =
|
381
|
+
this.transformTouchEvent(event);
|
368
382
|
|
369
383
|
if (touchEvent) {
|
370
384
|
invokeNullableMethod(onGestureHandlerEvent, touchEvent);
|
@@ -376,10 +390,8 @@ export default abstract class GestureHandler {
|
|
376
390
|
//
|
377
391
|
|
378
392
|
public sendEvent = (newState: State, oldState: State): void => {
|
379
|
-
const {
|
380
|
-
|
381
|
-
onGestureHandlerStateChange,
|
382
|
-
}: PropsRef = this.propsRef.current as PropsRef;
|
393
|
+
const { onGestureHandlerEvent, onGestureHandlerStateChange }: PropsRef =
|
394
|
+
this.propsRef.current as PropsRef;
|
383
395
|
|
384
396
|
const resultEvent: ResultEvent = this.transformEventData(
|
385
397
|
newState,
|
@@ -578,6 +590,11 @@ export default abstract class GestureHandler {
|
|
578
590
|
public updateGestureConfig({ enabled = true, ...props }: Config): void {
|
579
591
|
this.config = { enabled: enabled, ...props };
|
580
592
|
this.enabled = enabled;
|
593
|
+
|
594
|
+
if (this.config.shouldCancelWhenOutside !== undefined) {
|
595
|
+
this.setShouldCancelWhenOutside(this.config.shouldCancelWhenOutside);
|
596
|
+
}
|
597
|
+
|
581
598
|
this.validateHitSlops();
|
582
599
|
|
583
600
|
if (this.enabled) {
|
@@ -775,6 +792,14 @@ export default abstract class GestureHandler {
|
|
775
792
|
return this.enabled;
|
776
793
|
}
|
777
794
|
|
795
|
+
private isFinished(): boolean {
|
796
|
+
return (
|
797
|
+
this.currentState === State.END ||
|
798
|
+
this.currentState === State.FAILED ||
|
799
|
+
this.currentState === State.CANCELLED
|
800
|
+
);
|
801
|
+
}
|
802
|
+
|
778
803
|
protected setShouldCancelWhenOutside(shouldCancel: boolean) {
|
779
804
|
this.shouldCancellWhenOutside = shouldCancel;
|
780
805
|
}
|
@@ -23,6 +23,8 @@ export default class LongPressGestureHandler extends GestureHandler {
|
|
23
23
|
public init(ref: number, propsRef: React.RefObject<unknown>) {
|
24
24
|
super.init(ref, propsRef);
|
25
25
|
this.setShouldCancelWhenOutside(true);
|
26
|
+
|
27
|
+
this.view.oncontextmenu = () => false;
|
26
28
|
}
|
27
29
|
|
28
30
|
protected transformNativeEvent() {
|
@@ -40,8 +42,6 @@ export default class LongPressGestureHandler extends GestureHandler {
|
|
40
42
|
public updateGestureConfig({ enabled = true, ...props }: Config): void {
|
41
43
|
super.updateGestureConfig({ enabled: enabled, ...props });
|
42
44
|
|
43
|
-
this.enabled = enabled;
|
44
|
-
|
45
45
|
if (this.config.minDurationMs !== undefined) {
|
46
46
|
this.minDurationMs = this.config.minDurationMs;
|
47
47
|
}
|
@@ -1,4 +1,4 @@
|
|
1
|
-
import { AdaptedEvent } from '../interfaces';
|
1
|
+
import { AdaptedEvent, Config } from '../interfaces';
|
2
2
|
import GestureHandler from './GestureHandler';
|
3
3
|
|
4
4
|
export default class ManualGestureHandler extends GestureHandler {
|
@@ -6,6 +6,10 @@ export default class ManualGestureHandler extends GestureHandler {
|
|
6
6
|
super.init(ref, propsRef);
|
7
7
|
}
|
8
8
|
|
9
|
+
public updateGestureConfig({ enabled = true, ...props }: Config): void {
|
10
|
+
super.updateGestureConfig({ enabled: enabled, ...props });
|
11
|
+
}
|
12
|
+
|
9
13
|
protected onPointerDown(event: AdaptedEvent): void {
|
10
14
|
this.tracker.addToTracker(event);
|
11
15
|
super.onPointerDown(event);
|
@@ -22,6 +26,11 @@ export default class ManualGestureHandler extends GestureHandler {
|
|
22
26
|
super.onPointerMove(event);
|
23
27
|
}
|
24
28
|
|
29
|
+
protected onPointerOutOfBounds(event: AdaptedEvent): void {
|
30
|
+
this.tracker.track(event);
|
31
|
+
super.onPointerOutOfBounds(event);
|
32
|
+
}
|
33
|
+
|
25
34
|
protected onPointerUp(event: AdaptedEvent): void {
|
26
35
|
super.onPointerUp(event);
|
27
36
|
this.tracker.removeFromTracker(event.pointerId);
|
@@ -30,11 +30,6 @@ export default class NativeViewGestureHandler extends GestureHandler {
|
|
30
30
|
} else {
|
31
31
|
this.buttonRole = false;
|
32
32
|
}
|
33
|
-
|
34
|
-
if (this.view.tagName.toLowerCase() === 'input') {
|
35
|
-
//Enables text input on Safari
|
36
|
-
this.view.style['webkitUserSelect'] = 'auto';
|
37
|
-
}
|
38
33
|
}
|
39
34
|
|
40
35
|
public updateGestureConfig({ enabled = true, ...props }: Config): void {
|
@@ -65,8 +65,6 @@ export default class PanGestureHandler extends GestureHandler {
|
|
65
65
|
super.updateGestureConfig({ enabled: enabled, ...props });
|
66
66
|
this.checkCustomActivationCriteria(this.customActivationProperties);
|
67
67
|
|
68
|
-
this.enabled = enabled;
|
69
|
-
|
70
68
|
if (this.config.minDist !== undefined) {
|
71
69
|
this.minDistSq = this.config.minDist * this.config.minDist;
|
72
70
|
} else if (this.hasCustomActivationCriteria) {
|
@@ -98,10 +96,6 @@ export default class PanGestureHandler extends GestureHandler {
|
|
98
96
|
this.activateAfterLongPress = this.config.activateAfterLongPress;
|
99
97
|
}
|
100
98
|
|
101
|
-
if (this.config.shouldCancelWhenOutside) {
|
102
|
-
this.setShouldCancelWhenOutside(false);
|
103
|
-
}
|
104
|
-
|
105
99
|
if (this.config.activeOffsetXStart !== undefined) {
|
106
100
|
this.activeOffsetXStart = this.config.activeOffsetXStart;
|
107
101
|
|
@@ -57,8 +57,6 @@ export default class PinchGestureHandler extends GestureHandler {
|
|
57
57
|
|
58
58
|
public updateGestureConfig({ enabled = true, ...props }: Config): void {
|
59
59
|
super.updateGestureConfig({ enabled: enabled, ...props });
|
60
|
-
|
61
|
-
this.enabled = enabled;
|
62
60
|
}
|
63
61
|
|
64
62
|
protected transformNativeEvent() {
|
@@ -41,9 +41,8 @@ export default class RotationGestureHandler extends GestureHandler {
|
|
41
41
|
},
|
42
42
|
};
|
43
43
|
|
44
|
-
private rotationGestureDetector: RotationGestureDetector =
|
45
|
-
this.rotationGestureListener
|
46
|
-
);
|
44
|
+
private rotationGestureDetector: RotationGestureDetector =
|
45
|
+
new RotationGestureDetector(this.rotationGestureListener);
|
47
46
|
|
48
47
|
public init(ref: number, propsRef: React.RefObject<unknown>): void {
|
49
48
|
super.init(ref, propsRef);
|
@@ -53,8 +52,6 @@ export default class RotationGestureHandler extends GestureHandler {
|
|
53
52
|
|
54
53
|
public updateGestureConfig({ enabled = true, ...props }: Config): void {
|
55
54
|
super.updateGestureConfig({ enabled: enabled, ...props });
|
56
|
-
|
57
|
-
this.enabled = enabled;
|
58
55
|
}
|
59
56
|
|
60
57
|
protected transformNativeEvent() {
|
@@ -39,8 +39,6 @@ export default class TapGestureHandler extends GestureHandler {
|
|
39
39
|
public updateGestureConfig({ enabled = true, ...props }: Config): void {
|
40
40
|
super.updateGestureConfig({ enabled: enabled, ...props });
|
41
41
|
|
42
|
-
this.enabled = enabled;
|
43
|
-
|
44
42
|
if (this.config.numberOfTaps !== undefined) {
|
45
43
|
this.numberOfTaps = this.config.numberOfTaps;
|
46
44
|
}
|
package/src/web/interfaces.ts
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
import { UserSelect } from '../handlers/gestureHandlerCommon';
|
1
2
|
import { Directions } from '../Directions';
|
2
3
|
import { State } from '../State';
|
3
4
|
|
@@ -20,6 +21,7 @@ type ConfigArgs =
|
|
20
21
|
| number
|
21
22
|
| boolean
|
22
23
|
| HitSlop
|
24
|
+
| UserSelect
|
23
25
|
| Directions
|
24
26
|
| Handler[]
|
25
27
|
| null
|
@@ -31,6 +33,7 @@ export interface Config extends Record<string, ConfigArgs> {
|
|
31
33
|
waitFor?: Handler[] | null;
|
32
34
|
hitSlop?: HitSlop;
|
33
35
|
shouldCancelWhenOutside?: boolean;
|
36
|
+
userSelect?: UserSelect;
|
34
37
|
|
35
38
|
activateAfterLongPress?: number;
|
36
39
|
failOffsetXStart?: number;
|
@@ -69,9 +69,8 @@ export default class InteractionManager {
|
|
69
69
|
handler: GestureHandler,
|
70
70
|
otherHandler: GestureHandler
|
71
71
|
): boolean {
|
72
|
-
const simultaneousHandlers:
|
73
|
-
|
74
|
-
| undefined = this.simultaneousRelations.get(handler.getTag());
|
72
|
+
const simultaneousHandlers: number[] | undefined =
|
73
|
+
this.simultaneousRelations.get(handler.getTag());
|
75
74
|
if (!simultaneousHandlers) {
|
76
75
|
return false;
|
77
76
|
}
|
@@ -206,10 +206,8 @@ abstract class GestureHandler {
|
|
206
206
|
}
|
207
207
|
|
208
208
|
sendEvent = (nativeEvent: HammerInputExt) => {
|
209
|
-
const {
|
210
|
-
|
211
|
-
onGestureHandlerStateChange,
|
212
|
-
} = this.propsRef.current;
|
209
|
+
const { onGestureHandlerEvent, onGestureHandlerStateChange } =
|
210
|
+
this.propsRef.current;
|
213
211
|
|
214
212
|
const event = this.transformEventData(nativeEvent);
|
215
213
|
|
@@ -312,7 +310,7 @@ abstract class GestureHandler {
|
|
312
310
|
return;
|
313
311
|
}
|
314
312
|
|
315
|
-
this.onRawEvent(
|
313
|
+
this.onRawEvent(ev as unknown as HammerInputExt);
|
316
314
|
|
317
315
|
// TODO: Bacon: Check against something other than null
|
318
316
|
// The isFirst value is not called when the first rotation is calculated.
|
@@ -336,17 +334,17 @@ abstract class GestureHandler {
|
|
336
334
|
// TODO(TS) Hammer types aren't exactly that what we get in runtime
|
337
335
|
if (!this.isDiscrete) {
|
338
336
|
this.hammer!.on(`${this.name}start`, (event: HammerInput) =>
|
339
|
-
this.onStart(
|
337
|
+
this.onStart(event as unknown as HammerInputExt)
|
340
338
|
);
|
341
339
|
this.hammer!.on(
|
342
340
|
`${this.name}end ${this.name}cancel`,
|
343
341
|
(event: HammerInput) => {
|
344
|
-
this.onGestureEnded(
|
342
|
+
this.onGestureEnded(event as unknown as HammerInputExt);
|
345
343
|
}
|
346
344
|
);
|
347
345
|
}
|
348
346
|
this.hammer!.on(this.name, (ev: HammerInput) =>
|
349
|
-
this.onGestureActivated(
|
347
|
+
this.onGestureActivated(ev as unknown as HammerInputExt)
|
350
348
|
); // TODO(TS) remove cast after https://github.com/DefinitelyTyped/DefinitelyTyped/pull/50438 is merged
|
351
349
|
}
|
352
350
|
|
@@ -54,23 +54,29 @@ class PanGestureHandler extends DraggingGestureHandler {
|
|
54
54
|
return Hammer.DIRECTION_ALL;
|
55
55
|
}
|
56
56
|
|
57
|
-
if (!isnan(activeOffsetXStart))
|
57
|
+
if (!isnan(activeOffsetXStart)) {
|
58
58
|
horizontalDirections.push(Hammer.DIRECTION_LEFT);
|
59
|
-
|
59
|
+
}
|
60
|
+
if (!isnan(activeOffsetXEnd)) {
|
60
61
|
horizontalDirections.push(Hammer.DIRECTION_RIGHT);
|
61
|
-
|
62
|
+
}
|
63
|
+
if (horizontalDirections.length === 2) {
|
62
64
|
horizontalDirections = [Hammer.DIRECTION_HORIZONTAL];
|
65
|
+
}
|
63
66
|
|
64
67
|
directions = directions.concat(horizontalDirections);
|
65
68
|
let verticalDirections = [];
|
66
69
|
|
67
|
-
if (!isnan(activeOffsetYStart))
|
70
|
+
if (!isnan(activeOffsetYStart)) {
|
68
71
|
verticalDirections.push(Hammer.DIRECTION_UP);
|
69
|
-
|
72
|
+
}
|
73
|
+
if (!isnan(activeOffsetYEnd)) {
|
70
74
|
verticalDirections.push(Hammer.DIRECTION_DOWN);
|
75
|
+
}
|
71
76
|
|
72
|
-
if (verticalDirections.length === 2)
|
77
|
+
if (verticalDirections.length === 2) {
|
73
78
|
verticalDirections = [Hammer.DIRECTION_VERTICAL];
|
79
|
+
}
|
74
80
|
|
75
81
|
directions = directions.concat(verticalDirections);
|
76
82
|
|
package/android/lib/build.gradle
DELETED
@@ -1,28 +0,0 @@
|
|
1
|
-
apply plugin: 'com.android.library'
|
2
|
-
|
3
|
-
repositories {
|
4
|
-
maven { url 'https://repo1.maven.org/maven2' }
|
5
|
-
}
|
6
|
-
|
7
|
-
android {
|
8
|
-
compileSdkVersion 23
|
9
|
-
buildToolsVersion '25.0.0'
|
10
|
-
|
11
|
-
defaultConfig {
|
12
|
-
minSdkVersion 16
|
13
|
-
targetSdkVersion 23
|
14
|
-
versionCode 1
|
15
|
-
versionName "1.0"
|
16
|
-
}
|
17
|
-
buildTypes {
|
18
|
-
release {
|
19
|
-
minifyEnabled false
|
20
|
-
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
|
21
|
-
}
|
22
|
-
}
|
23
|
-
}
|
24
|
-
|
25
|
-
dependencies {
|
26
|
-
testCompile 'junit:junit:4.12'
|
27
|
-
compile 'com.android.support:appcompat-v7:23.4.0'
|
28
|
-
}
|
Binary file
|
@@ -1,19 +0,0 @@
|
|
1
|
-
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
-
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
3
|
-
<plist version="1.0">
|
4
|
-
<dict>
|
5
|
-
<key>SchemeUserState</key>
|
6
|
-
<dict>
|
7
|
-
<key>RNGestureHandler-tvOS.xcscheme_^#shared#^_</key>
|
8
|
-
<dict>
|
9
|
-
<key>orderHint</key>
|
10
|
-
<integer>0</integer>
|
11
|
-
</dict>
|
12
|
-
<key>RNGestureHandler.xcscheme_^#shared#^_</key>
|
13
|
-
<dict>
|
14
|
-
<key>orderHint</key>
|
15
|
-
<integer>1</integer>
|
16
|
-
</dict>
|
17
|
-
</dict>
|
18
|
-
</dict>
|
19
|
-
</plist>
|