react-native-gesture-handler
Version:
Declarative API exposing native platform touch and gesture system to React Native
58 lines (45 loc) • 1.71 kB
text/typescript
import type { StylusData } from '../../handlers/gestureHandlerCommon';
import { State } from '../../State';
import { SingleGestureName } from '../../v3/types';
import type { AdaptedEvent } from '../interfaces';
import type { GestureHandlerDelegate } from '../tools/GestureHandlerDelegate';
import GestureHandlerOrchestrator from '../tools/GestureHandlerOrchestrator';
import GestureHandler from './GestureHandler';
import type IGestureHandler from './IGestureHandler';
export default class HoverGestureHandler extends GestureHandler {
public override readonly isContinuous = true;
private stylusData: StylusData | undefined;
public constructor(
delegate: GestureHandlerDelegate<unknown, IGestureHandler>
) {
super(delegate);
this.name = SingleGestureName.Hover;
}
protected override transformNativeEvent(): Record<string, unknown> {
return {
...super.transformNativeEvent(),
stylusData: this.stylusData,
};
}
protected override onPointerMoveOver(event: AdaptedEvent): void {
GestureHandlerOrchestrator.instance.recordHandlerIfNotPresent(this);
this.tracker.addToTracker(event);
this.stylusData = event.stylusData;
super.onPointerMoveOver(event);
if (this.state === State.UNDETERMINED) {
this.begin();
this.activate();
}
}
protected override onPointerMoveOut(event: AdaptedEvent): void {
this.tracker.removeFromTracker(event.pointerId);
this.stylusData = event.stylusData;
super.onPointerMoveOut(event);
this.end();
}
protected override onPointerMove(event: AdaptedEvent): void {
this.tracker.track(event);
this.stylusData = event.stylusData;
super.onPointerMove(event);
}
}