Skip to content

Commit a2dce32

Browse files
authored
[Web] Remove TouchEventManager (#3101)
## Description While working on `stylus` support I've noticed that events from `stylus` are being sent twice. This is because `pen` also sends `TouchEvents`. Our code has the following check: ```tsx if (event.changedTouches[i].touchType === 'stylus') { continue; } ``` The problem with this approach is that `touchType` is [only supported on mobile Safari](https://developer.mozilla.org/en-US/docs/Web/API/Touch#browser_compatibility). Given that `TouchEvents` that we send to handlers are constructed manually from data taken from `PointerTracker` (see [this function](https://github.com/software-mansion/react-native-gesture-handler/blob/329b2b2f923c0e7d6b886cbf26f2a169468f84c1/src/web/handlers/GestureHandler.ts#L421)) I think it is better to remove `TouchEventManager` than trying to find some weird ways to block it from sending `stylus` events. ## Test plan Verified that our examples work as they should
1 parent bf3ddd3 commit a2dce32

File tree

6 files changed

+3
-208
lines changed

6 files changed

+3
-208
lines changed

src/web/handlers/GestureHandler.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -507,7 +507,7 @@ export default abstract class GestureHandler implements IGestureHandler {
507507
nativeEvent: {
508508
handlerTag: this.handlerTag,
509509
state: this.currentState,
510-
eventType: event.touchEventType ?? eventType,
510+
eventType: eventType,
511511
changedTouches: changed,
512512
allTouches: all,
513513
numberOfTouches: numberOfTouches,

src/web/interfaces.ts

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -142,9 +142,6 @@ export interface AdaptedEvent {
142142
pointerType: PointerType;
143143
time: number;
144144
button?: MouseButton;
145-
allTouches?: TouchList;
146-
changedTouches?: TouchList;
147-
touchEventType?: TouchEventType;
148145
}
149146

150147
export enum EventTypes {

src/web/tools/EventManager.ts

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/* eslint-disable @typescript-eslint/no-empty-function */
2-
import { AdaptedEvent, EventTypes, TouchEventType } from '../interfaces';
2+
import { AdaptedEvent, EventTypes } from '../interfaces';
33

44
type PointerEventCallback = (event: AdaptedEvent) => void;
55

@@ -18,9 +18,7 @@ export default abstract class EventManager<T> {
1818

1919
protected abstract mapEvent(
2020
event: Event,
21-
eventType: EventTypes,
22-
index?: number,
23-
touchEventType?: TouchEventType
21+
eventType: EventTypes
2422
): AdaptedEvent;
2523

2624
protected onPointerDown(_event: AdaptedEvent): void {}

src/web/tools/GestureHandlerWebDelegate.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import {
55
MeasureResult,
66
} from './GestureHandlerDelegate';
77
import PointerEventManager from './PointerEventManager';
8-
import TouchEventManager from './TouchEventManager';
98
import { State } from '../../State';
109
import { isPointerInBounds } from '../utils';
1110
import EventManager from './EventManager';
@@ -58,7 +57,6 @@ export class GestureHandlerWebDelegate
5857
this.setContextMenu(config.enabled);
5958

6059
this.eventManagers.push(new PointerEventManager(this.view));
61-
this.eventManagers.push(new TouchEventManager(this.view));
6260
this.eventManagers.push(new KeyboardEventManager(this.view));
6361

6462
this.eventManagers.forEach((manager) =>

src/web/tools/PointerEventManager.ts

Lines changed: 0 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,6 @@ export default class PointerEventManager extends EventManager<HTMLElement> {
3535
}
3636

3737
private pointerDownCallback = (event: PointerEvent) => {
38-
if (event.pointerType === PointerTypes.Touch) {
39-
return;
40-
}
4138
if (!isPointerInBounds(this.view, { x: event.clientX, y: event.clientY })) {
4239
return;
4340
}
@@ -61,10 +58,6 @@ export default class PointerEventManager extends EventManager<HTMLElement> {
6158
};
6259

6360
private pointerUpCallback = (event: PointerEvent) => {
64-
if (event.pointerType === PointerTypes.Touch) {
65-
return;
66-
}
67-
6861
// When we call reset on gesture handlers, it also resets their event managers
6962
// In some handlers (like RotationGestureHandler) reset is called before all pointers leave view
7063
// This means, that activePointersCounter will be set to 0, while there are still remaining pointers on view
@@ -92,10 +85,6 @@ export default class PointerEventManager extends EventManager<HTMLElement> {
9285
};
9386

9487
private pointerMoveCallback = (event: PointerEvent) => {
95-
if (event.pointerType === PointerTypes.Touch) {
96-
return;
97-
}
98-
9988
// Stylus triggers `pointermove` event when it detects changes in pressure. Since it is very sensitive to those changes,
10089
// it constantly sends events, even though there was no change in position. To fix that we check whether
10190
// pointer has actually moved and if not, we do not send event.
@@ -161,10 +150,6 @@ export default class PointerEventManager extends EventManager<HTMLElement> {
161150
};
162151

163152
private pointerCancelCallback = (event: PointerEvent) => {
164-
if (event.pointerType === PointerTypes.Touch) {
165-
return;
166-
}
167-
168153
const adaptedEvent: AdaptedEvent = this.mapEvent(event, EventTypes.CANCEL);
169154

170155
this.onPointerCancel(adaptedEvent);
@@ -174,20 +159,12 @@ export default class PointerEventManager extends EventManager<HTMLElement> {
174159
};
175160

176161
private pointerEnterCallback = (event: PointerEvent) => {
177-
if (event.pointerType === PointerTypes.Touch) {
178-
return;
179-
}
180-
181162
const adaptedEvent: AdaptedEvent = this.mapEvent(event, EventTypes.ENTER);
182163

183164
this.onPointerMoveOver(adaptedEvent);
184165
};
185166

186167
private pointerLeaveCallback = (event: PointerEvent) => {
187-
if (event.pointerType === PointerTypes.Touch) {
188-
return;
189-
}
190-
191168
const adaptedEvent: AdaptedEvent = this.mapEvent(event, EventTypes.LEAVE);
192169

193170
this.onPointerMoveOut(adaptedEvent);

src/web/tools/TouchEventManager.ts

Lines changed: 0 additions & 175 deletions
This file was deleted.

0 commit comments

Comments
 (0)