203 lines
5.8 KiB
TypeScript
203 lines
5.8 KiB
TypeScript
|
/**
|
||
|
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
||
|
*
|
||
|
* This source code is licensed under the MIT license found in the
|
||
|
* LICENSE file in the root directory of this source tree.
|
||
|
*
|
||
|
* @format
|
||
|
*/
|
||
|
|
||
|
import {GestureResponderHandlers} from '../../types/public/ReactNativeRenderer';
|
||
|
import {GestureResponderEvent} from '../Types/CoreEventTypes';
|
||
|
|
||
|
export interface PanResponderGestureState {
|
||
|
/**
|
||
|
* ID of the gestureState- persisted as long as there at least one touch on
|
||
|
*/
|
||
|
stateID: number;
|
||
|
|
||
|
/**
|
||
|
* the latest screen coordinates of the recently-moved touch
|
||
|
*/
|
||
|
moveX: number;
|
||
|
|
||
|
/**
|
||
|
* the latest screen coordinates of the recently-moved touch
|
||
|
*/
|
||
|
moveY: number;
|
||
|
|
||
|
/**
|
||
|
* the screen coordinates of the responder grant
|
||
|
*/
|
||
|
x0: number;
|
||
|
|
||
|
/**
|
||
|
* the screen coordinates of the responder grant
|
||
|
*/
|
||
|
y0: number;
|
||
|
|
||
|
/**
|
||
|
* accumulated distance of the gesture since the touch started
|
||
|
*/
|
||
|
dx: number;
|
||
|
|
||
|
/**
|
||
|
* accumulated distance of the gesture since the touch started
|
||
|
*/
|
||
|
dy: number;
|
||
|
|
||
|
/**
|
||
|
* current velocity of the gesture
|
||
|
*/
|
||
|
vx: number;
|
||
|
|
||
|
/**
|
||
|
* current velocity of the gesture
|
||
|
*/
|
||
|
vy: number;
|
||
|
|
||
|
/**
|
||
|
* Number of touches currently on screen
|
||
|
*/
|
||
|
numberActiveTouches: number;
|
||
|
|
||
|
// All `gestureState` accounts for timeStamps up until:
|
||
|
_accountsForMovesUpTo: number;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @see documentation of GestureResponderHandlers
|
||
|
*/
|
||
|
export interface PanResponderCallbacks {
|
||
|
onMoveShouldSetPanResponder?:
|
||
|
| ((
|
||
|
e: GestureResponderEvent,
|
||
|
gestureState: PanResponderGestureState,
|
||
|
) => boolean)
|
||
|
| undefined;
|
||
|
onStartShouldSetPanResponder?:
|
||
|
| ((
|
||
|
e: GestureResponderEvent,
|
||
|
gestureState: PanResponderGestureState,
|
||
|
) => boolean)
|
||
|
| undefined;
|
||
|
onPanResponderGrant?:
|
||
|
| ((
|
||
|
e: GestureResponderEvent,
|
||
|
gestureState: PanResponderGestureState,
|
||
|
) => void)
|
||
|
| undefined;
|
||
|
onPanResponderMove?:
|
||
|
| ((
|
||
|
e: GestureResponderEvent,
|
||
|
gestureState: PanResponderGestureState,
|
||
|
) => void)
|
||
|
| undefined;
|
||
|
onPanResponderRelease?:
|
||
|
| ((
|
||
|
e: GestureResponderEvent,
|
||
|
gestureState: PanResponderGestureState,
|
||
|
) => void)
|
||
|
| undefined;
|
||
|
onPanResponderTerminate?:
|
||
|
| ((
|
||
|
e: GestureResponderEvent,
|
||
|
gestureState: PanResponderGestureState,
|
||
|
) => void)
|
||
|
| undefined;
|
||
|
|
||
|
onMoveShouldSetPanResponderCapture?:
|
||
|
| ((
|
||
|
e: GestureResponderEvent,
|
||
|
gestureState: PanResponderGestureState,
|
||
|
) => boolean)
|
||
|
| undefined;
|
||
|
onStartShouldSetPanResponderCapture?:
|
||
|
| ((
|
||
|
e: GestureResponderEvent,
|
||
|
gestureState: PanResponderGestureState,
|
||
|
) => boolean)
|
||
|
| undefined;
|
||
|
onPanResponderReject?:
|
||
|
| ((
|
||
|
e: GestureResponderEvent,
|
||
|
gestureState: PanResponderGestureState,
|
||
|
) => void)
|
||
|
| undefined;
|
||
|
onPanResponderStart?:
|
||
|
| ((
|
||
|
e: GestureResponderEvent,
|
||
|
gestureState: PanResponderGestureState,
|
||
|
) => void)
|
||
|
| undefined;
|
||
|
onPanResponderEnd?:
|
||
|
| ((
|
||
|
e: GestureResponderEvent,
|
||
|
gestureState: PanResponderGestureState,
|
||
|
) => void)
|
||
|
| undefined;
|
||
|
onPanResponderTerminationRequest?:
|
||
|
| ((
|
||
|
e: GestureResponderEvent,
|
||
|
gestureState: PanResponderGestureState,
|
||
|
) => boolean)
|
||
|
| undefined;
|
||
|
onShouldBlockNativeResponder?:
|
||
|
| ((
|
||
|
e: GestureResponderEvent,
|
||
|
gestureState: PanResponderGestureState,
|
||
|
) => boolean)
|
||
|
| undefined;
|
||
|
}
|
||
|
|
||
|
export interface PanResponderInstance {
|
||
|
panHandlers: GestureResponderHandlers;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* PanResponder reconciles several touches into a single gesture.
|
||
|
* It makes single-touch gestures resilient to extra touches,
|
||
|
* and can be used to recognize simple multi-touch gestures.
|
||
|
*
|
||
|
* It provides a predictable wrapper of the responder handlers provided by the gesture responder system.
|
||
|
* For each handler, it provides a new gestureState object alongside the normal event.
|
||
|
*/
|
||
|
export interface PanResponderStatic {
|
||
|
/**
|
||
|
* @param config Enhanced versions of all of the responder callbacks
|
||
|
* that provide not only the typical `ResponderSyntheticEvent`, but also the
|
||
|
* `PanResponder` gesture state. Simply replace the word `Responder` with
|
||
|
* `PanResponder` in each of the typical `onResponder*` callbacks. For
|
||
|
* example, the `config` object would look like:
|
||
|
*
|
||
|
* - `onMoveShouldSetPanResponder: (e, gestureState) => {...}`
|
||
|
* - `onMoveShouldSetPanResponderCapture: (e, gestureState) => {...}`
|
||
|
* - `onStartShouldSetPanResponder: (e, gestureState) => {...}`
|
||
|
* - `onStartShouldSetPanResponderCapture: (e, gestureState) => {...}`
|
||
|
* - `onPanResponderReject: (e, gestureState) => {...}`
|
||
|
* - `onPanResponderGrant: (e, gestureState) => {...}`
|
||
|
* - `onPanResponderStart: (e, gestureState) => {...}`
|
||
|
* - `onPanResponderEnd: (e, gestureState) => {...}`
|
||
|
* - `onPanResponderRelease: (e, gestureState) => {...}`
|
||
|
* - `onPanResponderMove: (e, gestureState) => {...}`
|
||
|
* - `onPanResponderTerminate: (e, gestureState) => {...}`
|
||
|
* - `onPanResponderTerminationRequest: (e, gestureState) => {...}`
|
||
|
* - `onShouldBlockNativeResponder: (e, gestureState) => {...}`
|
||
|
*
|
||
|
* In general, for events that have capture equivalents, we update the
|
||
|
* gestureState once in the capture phase and can use it in the bubble phase
|
||
|
* as well.
|
||
|
*
|
||
|
* Be careful with onStartShould* callbacks. They only reflect updated
|
||
|
* `gestureState` for start/end events that bubble/capture to the Node.
|
||
|
* Once the node is the responder, you can rely on every start/end event
|
||
|
* being processed by the gesture and `gestureState` being updated
|
||
|
* accordingly. (numberActiveTouches) may not be totally accurate unless you
|
||
|
* are the responder.
|
||
|
*/
|
||
|
create(config: PanResponderCallbacks): PanResponderInstance;
|
||
|
}
|
||
|
|
||
|
export const PanResponder: PanResponderStatic;
|
||
|
export type PanResponder = PanResponderStatic;
|