@deck.gl/core
Version:
deck.gl core library
157 lines • 7.07 kB
TypeScript
import TransitionManager, { TransitionProps } from "./transition-manager.js";
import { IViewState } from "./view-state.js";
import { ConstructorOf } from "../types/types.js";
import type Viewport from "../viewports/viewport.js";
import type { EventManager, MjolnirEvent, MjolnirGestureEvent, MjolnirWheelEvent, MjolnirKeyEvent } from 'mjolnir.js';
import type { Timeline } from '@luma.gl/engine';
/** Configuration of how user input is handled */
export type ControllerOptions = {
/** Enable zooming with mouse wheel. Default `true`. */
scrollZoom?: boolean | {
/** Scaler that translates wheel delta to the change of viewport scale. Default `0.01`. */
speed?: number;
/** Smoothly transition to the new zoom. If enabled, will provide a slightly lagged but smoother experience. Default `false`. */
smooth?: boolean;
};
/** Enable panning with pointer drag. Default `true` */
dragPan?: boolean;
/** Enable rotating with pointer drag. Default `true` */
dragRotate?: boolean;
/** Enable zooming with double click. Default `true` */
doubleClickZoom?: boolean;
/** Enable zooming with multi-touch. Default `true` */
touchZoom?: boolean;
/** Enable rotating with multi-touch. Use two-finger rotating gesture for horizontal and three-finger swiping gesture for vertical rotation. Default `false` */
touchRotate?: boolean;
/** Enable interaction with keyboard. Default `true`. */
keyboard?: boolean | {
/** Speed of zoom using +/- keys. Default `2` */
zoomSpeed?: number;
/** Speed of movement using arrow keys, in pixels. */
moveSpeed?: number;
/** Speed of rotation using shift + left/right arrow keys, in degrees. Default 15. */
rotateSpeedX?: number;
/** Speed of rotation using shift + up/down arrow keys, in degrees. Default 10. */
rotateSpeedY?: number;
};
/** Drag behavior without pressing function keys, one of `pan` and `rotate`. */
dragMode?: 'pan' | 'rotate';
/** Enable inertia after panning/pinching. If a number is provided, indicates the duration of time over which the velocity reduces to zero, in milliseconds. Default `false`. */
inertia?: boolean | number;
};
export type ControllerProps = {
/** Identifier of the controller */
id: string;
/** Viewport x position */
x: number;
/** Viewport y position */
y: number;
/** Viewport width */
width: number;
/** Viewport height */
height: number;
} & ControllerOptions & TransitionProps;
/** The state of a controller */
export type InteractionState = {
/** If the view state is in transition */
inTransition?: boolean;
/** If the user is dragging */
isDragging?: boolean;
/** If the view is being panned, either from user input or transition */
isPanning?: boolean;
/** If the view is being rotated, either from user input or transition */
isRotating?: boolean;
/** If the view is being zoomed, either from user input or transition */
isZooming?: boolean;
};
/** Parameters passed to the onViewStateChange callback */
export type ViewStateChangeParameters<ViewStateT = any> = {
viewId: string;
/** The next view state, either from user input or transition */
viewState: ViewStateT;
/** Object describing the nature of the view state change */
interactionState: InteractionState;
/** The current view state */
oldViewState?: ViewStateT;
};
export default abstract class Controller<ControllerState extends IViewState<ControllerState>> {
abstract get ControllerState(): ConstructorOf<ControllerState>;
abstract get transition(): TransitionProps;
protected props: ControllerProps;
protected state: Record<string, any>;
protected transitionManager: TransitionManager<ControllerState>;
protected eventManager: EventManager;
protected onViewStateChange: (params: ViewStateChangeParameters) => void;
protected onStateChange: (state: InteractionState) => void;
protected makeViewport: (opts: Record<string, any>) => Viewport;
private _controllerState?;
private _events;
private _interactionState;
private _customEvents;
private _eventStartBlocked;
private _panMove;
protected invertPan: boolean;
protected dragMode: 'pan' | 'rotate';
protected inertia: number;
protected scrollZoom: boolean | {
speed?: number;
smooth?: boolean;
};
protected dragPan: boolean;
protected dragRotate: boolean;
protected doubleClickZoom: boolean;
protected touchZoom: boolean;
protected touchRotate: boolean;
protected keyboard: boolean | {
zoomSpeed?: number;
moveSpeed?: number;
rotateSpeedX?: number;
rotateSpeedY?: number;
};
constructor(opts: {
timeline: Timeline;
eventManager: EventManager;
makeViewport: (opts: Record<string, any>) => Viewport;
onViewStateChange: (params: ViewStateChangeParameters) => void;
onStateChange: (state: InteractionState) => void;
});
set events(customEvents: any);
finalize(): void;
/**
* Callback for events
*/
handleEvent(event: MjolnirEvent): boolean;
get controllerState(): ControllerState;
getCenter(event: MjolnirGestureEvent | MjolnirWheelEvent): [number, number];
isPointInBounds(pos: [number, number], event: MjolnirEvent): boolean;
isFunctionKeyPressed(event: MjolnirEvent): boolean;
isDragging(): boolean;
blockEvents(timeout: number): void;
/**
* Extract interactivity options
*/
setProps(props: ControllerProps): void;
updateTransition(): void;
toggleEvents(eventNames: any, enabled: any): void;
protected updateViewport(newControllerState: ControllerState, extraProps?: Record<string, any> | null, interactionState?: InteractionState): void;
private _onTransition;
private _setInteractionState;
protected _onPanStart(event: MjolnirGestureEvent): boolean;
protected _onPan(event: MjolnirGestureEvent): boolean;
protected _onPanEnd(event: MjolnirGestureEvent): boolean;
protected _onPanMove(event: MjolnirGestureEvent): boolean;
protected _onPanMoveEnd(event: MjolnirGestureEvent): boolean;
protected _onPanRotate(event: MjolnirGestureEvent): boolean;
protected _onPanRotateEnd(event: any): boolean;
protected _onWheel(event: MjolnirWheelEvent): boolean;
protected _onMultiPanStart(event: MjolnirGestureEvent): boolean;
protected _onMultiPan(event: MjolnirGestureEvent): boolean;
protected _onMultiPanEnd(event: MjolnirGestureEvent): boolean;
protected _onPinchStart(event: MjolnirGestureEvent): boolean;
protected _onPinch(event: MjolnirGestureEvent): boolean;
protected _onPinchEnd(event: MjolnirGestureEvent): boolean;
protected _onDoubleClick(event: MjolnirGestureEvent): boolean;
protected _onKeyDown(event: MjolnirKeyEvent): boolean;
protected _getTransitionProps(opts?: any): TransitionProps;
}
//# sourceMappingURL=controller.d.ts.map