react-native-gesture-handler 2.15.0 → 2.16.0-rc.0
Sign up to get free protection for your applications and to get access to all the features.
- package/RNGestureHandler.podspec +2 -23
- package/android/build.gradle +1 -1
- package/android/src/main/java/com/swmansion/gesturehandler/RNGestureHandlerPackage.kt +9 -4
- package/android/src/main/java/com/swmansion/gesturehandler/core/FlingGestureHandler.kt +4 -0
- package/android/src/main/java/com/swmansion/gesturehandler/core/GestureHandler.kt +69 -0
- package/android/src/main/java/com/swmansion/gesturehandler/core/GestureHandlerOrchestrator.kt +25 -19
- package/android/src/main/java/com/swmansion/gesturehandler/core/LongPressGestureHandler.kt +5 -1
- package/android/src/main/java/com/swmansion/gesturehandler/core/PanGestureHandler.kt +5 -1
- package/android/src/main/java/com/swmansion/gesturehandler/core/TapGestureHandler.kt +7 -3
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerModule.kt +8 -5
- package/android/src/main/java/com/swmansion/gesturehandler/react/RNGestureHandlerRootHelper.kt +3 -2
- package/android/src/main/java/com/swmansion/gesturehandler/react/eventbuilders/GestureHandlerEventDataBuilder.kt +3 -0
- package/android/src/main/jni/cpp-adapter.cpp +18 -22
- package/apple/Handlers/RNFlingHandler.m +5 -4
- package/apple/Handlers/RNForceTouchHandler.m +3 -1
- package/apple/Handlers/RNHoverHandler.m +2 -1
- package/apple/Handlers/RNLongPressHandler.m +3 -1
- package/apple/Handlers/RNManualHandler.m +1 -0
- package/apple/Handlers/RNNativeViewHandler.mm +9 -7
- package/apple/Handlers/RNPanHandler.m +7 -2
- package/apple/Handlers/RNPinchHandler.m +38 -25
- package/apple/Handlers/RNRotationHandler.m +43 -29
- package/apple/Handlers/RNTapHandler.m +6 -4
- package/apple/RNGestureHandler.h +9 -0
- package/apple/RNGestureHandler.m +38 -3
- package/apple/RNGestureHandlerEvents.h +18 -9
- package/apple/RNGestureHandlerEvents.m +29 -11
- package/apple/RNGestureHandlerManager.h +5 -0
- package/apple/RNGestureHandlerManager.mm +32 -6
- package/apple/RNGestureHandlerModule.h +5 -3
- package/apple/RNGestureHandlerModule.mm +33 -19
- package/apple/RNGestureHandlerPointerType.h +8 -0
- package/lib/commonjs/PointerType.js +16 -0
- package/lib/commonjs/PointerType.js.map +1 -0
- package/lib/commonjs/components/GestureHandlerRootView.android.js +17 -2
- package/lib/commonjs/components/GestureHandlerRootView.android.js.map +1 -1
- package/lib/commonjs/components/GestureHandlerRootView.js +15 -2
- package/lib/commonjs/components/GestureHandlerRootView.js.map +1 -1
- package/lib/commonjs/components/GestureHandlerRootView.web.js +15 -2
- package/lib/commonjs/components/GestureHandlerRootView.web.js.map +1 -1
- package/lib/commonjs/getShadowNodeFromRef.js +19 -2
- package/lib/commonjs/getShadowNodeFromRef.js.map +1 -1
- package/lib/commonjs/handlers/createHandler.js +5 -0
- package/lib/commonjs/handlers/createHandler.js.map +1 -1
- package/lib/commonjs/handlers/gestureHandlerCommon.js.map +1 -1
- package/lib/commonjs/index.js +8 -0
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/specs/NativeRNGestureHandlerModule.js.map +1 -1
- package/lib/commonjs/web/handlers/GestureHandler.js +6 -3
- package/lib/commonjs/web/handlers/GestureHandler.js.map +1 -1
- package/lib/commonjs/web/interfaces.js +3 -13
- package/lib/commonjs/web/interfaces.js.map +1 -1
- package/lib/commonjs/web/tools/GestureHandlerOrchestrator.js +3 -3
- package/lib/commonjs/web/tools/GestureHandlerOrchestrator.js.map +1 -1
- package/lib/commonjs/web/tools/PointerEventManager.js +29 -7
- package/lib/commonjs/web/tools/PointerEventManager.js.map +1 -1
- package/lib/commonjs/web/tools/TouchEventManager.js +3 -1
- package/lib/commonjs/web/tools/TouchEventManager.js.map +1 -1
- package/lib/commonjs/web/utils.js +6 -0
- package/lib/commonjs/web/utils.js.map +1 -1
- package/lib/module/PointerType.js +9 -0
- package/lib/module/PointerType.js.map +1 -0
- package/lib/module/components/GestureHandlerRootView.android.js +15 -2
- package/lib/module/components/GestureHandlerRootView.android.js.map +1 -1
- package/lib/module/components/GestureHandlerRootView.js +15 -3
- package/lib/module/components/GestureHandlerRootView.js.map +1 -1
- package/lib/module/components/GestureHandlerRootView.web.js +15 -3
- package/lib/module/components/GestureHandlerRootView.web.js.map +1 -1
- package/lib/module/getShadowNodeFromRef.js +19 -2
- package/lib/module/getShadowNodeFromRef.js.map +1 -1
- package/lib/module/handlers/createHandler.js +6 -1
- package/lib/module/handlers/createHandler.js.map +1 -1
- package/lib/module/handlers/gestureHandlerCommon.js.map +1 -1
- package/lib/module/index.js +1 -0
- package/lib/module/index.js.map +1 -1
- package/lib/module/specs/NativeRNGestureHandlerModule.js.map +1 -1
- package/lib/module/web/handlers/GestureHandler.js +5 -3
- package/lib/module/web/handlers/GestureHandler.js.map +1 -1
- package/lib/module/web/interfaces.js +2 -11
- package/lib/module/web/interfaces.js.map +1 -1
- package/lib/module/web/tools/GestureHandlerOrchestrator.js +2 -2
- package/lib/module/web/tools/GestureHandlerOrchestrator.js.map +1 -1
- package/lib/module/web/tools/PointerEventManager.js +30 -9
- package/lib/module/web/tools/PointerEventManager.js.map +1 -1
- package/lib/module/web/tools/TouchEventManager.js +2 -1
- package/lib/module/web/tools/TouchEventManager.js.map +1 -1
- package/lib/module/web/utils.js +2 -0
- package/lib/module/web/utils.js.map +1 -1
- package/lib/typescript/PointerType.d.ts +6 -0
- package/lib/typescript/components/GestureHandlerRootView.android.d.ts +1 -1
- package/lib/typescript/components/GestureHandlerRootView.d.ts +1 -1
- package/lib/typescript/components/GestureHandlerRootView.web.d.ts +1 -1
- package/lib/typescript/getShadowNodeFromRef.d.ts +1 -1
- package/lib/typescript/handlers/gestureHandlerCommon.d.ts +2 -0
- package/lib/typescript/index.d.ts +1 -0
- package/lib/typescript/specs/NativeRNGestureHandlerModule.d.ts +6 -6
- package/lib/typescript/web/handlers/GestureHandler.d.ts +2 -1
- package/lib/typescript/web/interfaces.d.ts +4 -8
- package/lib/typescript/web/utils.d.ts +2 -0
- package/package.json +1 -1
- package/src/PointerType.ts +6 -0
- package/src/components/GestureHandlerRootView.android.tsx +13 -5
- package/src/components/GestureHandlerRootView.tsx +10 -5
- package/src/components/GestureHandlerRootView.web.tsx +10 -5
- package/src/getShadowNodeFromRef.ts +28 -6
- package/src/handlers/createHandler.tsx +6 -0
- package/src/handlers/gestureHandlerCommon.ts +2 -0
- package/src/index.ts +1 -0
- package/src/specs/NativeRNGestureHandlerModule.ts +8 -8
- package/src/web/handlers/GestureHandler.ts +3 -2
- package/src/web/interfaces.ts +4 -9
- package/src/web/tools/GestureHandlerOrchestrator.ts +2 -2
- package/src/web/tools/PointerEventManager.ts +34 -14
- package/src/web/tools/TouchEventManager.ts +2 -6
- package/src/web/utils.ts +9 -0
@@ -1,13 +1,13 @@
|
|
1
|
-
import {
|
2
|
-
AdaptedEvent,
|
3
|
-
EventTypes,
|
4
|
-
MouseButton,
|
5
|
-
PointerType,
|
6
|
-
} from '../interfaces';
|
1
|
+
import { AdaptedEvent, EventTypes, MouseButton } from '../interfaces';
|
7
2
|
import EventManager from './EventManager';
|
8
|
-
import { isPointerInBounds } from '../utils';
|
3
|
+
import { PointerTypeMapping, isPointerInBounds } from '../utils';
|
4
|
+
import { PointerType } from '../../PointerType';
|
9
5
|
|
10
6
|
const POINTER_CAPTURE_EXCLUDE_LIST = new Set<string>(['SELECT', 'INPUT']);
|
7
|
+
const PointerTypes = {
|
8
|
+
Touch: 'touch',
|
9
|
+
Stylus: 'pen',
|
10
|
+
};
|
11
11
|
|
12
12
|
export default class PointerEventManager extends EventManager<HTMLElement> {
|
13
13
|
private trackedPointers = new Set<number>();
|
@@ -25,7 +25,7 @@ export default class PointerEventManager extends EventManager<HTMLElement> {
|
|
25
25
|
|
26
26
|
public setListeners(): void {
|
27
27
|
this.view.addEventListener('pointerdown', (event: PointerEvent): void => {
|
28
|
-
if (event.pointerType ===
|
28
|
+
if (event.pointerType === PointerTypes.Touch) {
|
29
29
|
return;
|
30
30
|
}
|
31
31
|
if (
|
@@ -53,7 +53,7 @@ export default class PointerEventManager extends EventManager<HTMLElement> {
|
|
53
53
|
});
|
54
54
|
|
55
55
|
this.view.addEventListener('pointerup', (event: PointerEvent): void => {
|
56
|
-
if (event.pointerType ===
|
56
|
+
if (event.pointerType === PointerTypes.Touch) {
|
57
57
|
return;
|
58
58
|
}
|
59
59
|
|
@@ -83,8 +83,24 @@ export default class PointerEventManager extends EventManager<HTMLElement> {
|
|
83
83
|
}
|
84
84
|
});
|
85
85
|
|
86
|
+
const lastPosition: { x: number | null; y: number | null } = {
|
87
|
+
x: null,
|
88
|
+
y: null,
|
89
|
+
};
|
90
|
+
|
86
91
|
this.view.addEventListener('pointermove', (event: PointerEvent): void => {
|
87
|
-
if (event.pointerType ===
|
92
|
+
if (event.pointerType === PointerTypes.Touch) {
|
93
|
+
return;
|
94
|
+
}
|
95
|
+
|
96
|
+
// Stylus triggers `pointermove` event when it detects changes in pressure. Since it is very sensitive to those changes,
|
97
|
+
// it constantly sends events, even though there was no change in position. To fix that we check whether
|
98
|
+
// pointer has actually moved and if not, we do not send event.
|
99
|
+
if (
|
100
|
+
event.pointerType === PointerTypes.Stylus &&
|
101
|
+
event.x === lastPosition.x &&
|
102
|
+
event.y === lastPosition.y
|
103
|
+
) {
|
88
104
|
return;
|
89
105
|
}
|
90
106
|
|
@@ -136,10 +152,13 @@ export default class PointerEventManager extends EventManager<HTMLElement> {
|
|
136
152
|
this.onPointerOutOfBounds(adaptedEvent);
|
137
153
|
}
|
138
154
|
}
|
155
|
+
|
156
|
+
lastPosition.x = event.x;
|
157
|
+
lastPosition.y = event.y;
|
139
158
|
});
|
140
159
|
|
141
160
|
this.view.addEventListener('pointercancel', (event: PointerEvent): void => {
|
142
|
-
if (event.pointerType ===
|
161
|
+
if (event.pointerType === PointerTypes.Touch) {
|
143
162
|
return;
|
144
163
|
}
|
145
164
|
|
@@ -160,7 +179,7 @@ export default class PointerEventManager extends EventManager<HTMLElement> {
|
|
160
179
|
// mapping them to onPointerMoveOver and onPointerMoveOut respectively.
|
161
180
|
|
162
181
|
this.view.addEventListener('pointerenter', (event: PointerEvent): void => {
|
163
|
-
if (event.pointerType ===
|
182
|
+
if (event.pointerType === PointerTypes.Touch) {
|
164
183
|
return;
|
165
184
|
}
|
166
185
|
|
@@ -170,7 +189,7 @@ export default class PointerEventManager extends EventManager<HTMLElement> {
|
|
170
189
|
});
|
171
190
|
|
172
191
|
this.view.addEventListener('pointerleave', (event: PointerEvent): void => {
|
173
|
-
if (event.pointerType ===
|
192
|
+
if (event.pointerType === PointerTypes.Touch) {
|
174
193
|
return;
|
175
194
|
}
|
176
195
|
|
@@ -207,7 +226,8 @@ export default class PointerEventManager extends EventManager<HTMLElement> {
|
|
207
226
|
offsetY: event.offsetY,
|
208
227
|
pointerId: event.pointerId,
|
209
228
|
eventType: eventType,
|
210
|
-
pointerType:
|
229
|
+
pointerType:
|
230
|
+
PointerTypeMapping.get(event.pointerType) ?? PointerType.OTHER,
|
211
231
|
button: this.mouseButtonsMapper.get(event.button),
|
212
232
|
time: event.timeStamp,
|
213
233
|
};
|
@@ -1,11 +1,7 @@
|
|
1
|
-
import {
|
2
|
-
AdaptedEvent,
|
3
|
-
EventTypes,
|
4
|
-
PointerType,
|
5
|
-
TouchEventType,
|
6
|
-
} from '../interfaces';
|
1
|
+
import { AdaptedEvent, EventTypes, TouchEventType } from '../interfaces';
|
7
2
|
import EventManager from './EventManager';
|
8
3
|
import { isPointerInBounds } from '../utils';
|
4
|
+
import { PointerType } from '../../PointerType';
|
9
5
|
|
10
6
|
export default class TouchEventManager extends EventManager<HTMLElement> {
|
11
7
|
public setListeners(): void {
|
package/src/web/utils.ts
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
import { PointerType } from '../PointerType';
|
2
|
+
|
1
3
|
export function isPointerInBounds(
|
2
4
|
view: HTMLElement,
|
3
5
|
{ x, y }: { x: number; y: number }
|
@@ -6,3 +8,10 @@ export function isPointerInBounds(
|
|
6
8
|
|
7
9
|
return x >= rect.left && x <= rect.right && y >= rect.top && y <= rect.bottom;
|
8
10
|
}
|
11
|
+
|
12
|
+
export const PointerTypeMapping = new Map<string, PointerType>([
|
13
|
+
['mouse', PointerType.MOUSE],
|
14
|
+
['touch', PointerType.TOUCH],
|
15
|
+
['pen', PointerType.STYLUS],
|
16
|
+
['none', PointerType.OTHER],
|
17
|
+
]);
|