UNPKG

@turbox3d/event-manager

Version:

Large-scale productivity application event management library

110 lines (109 loc) 3.65 kB
import { Vec2, Vec3 } from '@turbox3d/shared'; import { CanvasHandlers, InteractiveConfig, InteractiveType, ViewportInfo } from './type'; import { CoordinateController } from './coordinate'; export interface HitResult<DisplayObject> { /** event 的直接对象 */ originalTarget?: DisplayObject; /** originalTarget 或 originalTarget 的祖先中的第一个可被交互的元素 */ target?: DisplayObject; /** 选中对象的具体场景鼠标位置 */ originalTargetPoint?: Vec2 | Vec3; } interface Option<Container, DisplayObject, Renderer> { renderer: Renderer; container: Container; canvasHandler: CanvasHandlers; coordinateType?: string; viewport?: ViewportInfo; getCoordinateCtrl: () => CoordinateController; getHitTargetOriginal: (point: Vec2, container: Container, configMap: Map<DisplayObject, InteractiveConfig>, interactiveType: InteractiveType) => HitResult<DisplayObject>; maxFPS: number; } export declare class InteractiveController<Container, DisplayObject, Renderer> { static create<Container, DisplayObject, Renderer>(option: Option<Container, DisplayObject, Renderer>): InteractiveController<Container, DisplayObject, Renderer>; /** 渲染器对应的 canvas */ private renderer; /** 根容器 */ private container; private interactiveListener; /** 交互对象的配置 */ private interactiveConfig; /** 画布处理事件 */ private canvasHandlers; /** * 当前的拖拽目标 */ private dragTarget?; /** * 持续 hover 的目标 */ private hoverTarget?; /** 上次点击命中的目标 */ private lastClickTarget?; /** 当前视口的区域信息 */ private viewport?; /** 坐标系类型 */ private coordinateType?; /** hitTarget 的实现,不同渲染引擎不一样 */ private getHitTargetOriginal; private getCoordinateCtrl; /** 最大帧率限制 */ private maxFPS; constructor(option: Option<Container, DisplayObject, Renderer>); /** * 更新视图对象的交互配置 * * @param view 视图对象 * @param config 交互配置。该参数不传时认为该对象无法交互 */ updateInteractiveObject: (view: DisplayObject, config?: InteractiveConfig) => void; /** 更新视口信息 */ updateViewportInfo: (viewport: ViewportInfo) => void; /** * 对画布进行交互事件监听 * * @param canvas */ startListener(): void; /** * 取消所有监听的交互事件 * @param canvas */ removeAllListener(): void; /** * 用于给外部发起一次点击拾取 * @param point 是相对于 canvas 左上角的点击位置 */ hitTarget: (point: Vec2) => Partial<import("./type").ViewEntity> | undefined; /** * 获取本次鼠标事件的交互对象 */ private hitTargetHandler; /** * 主动传入一个点位做一次 hitTest,返回结果 * @param point 是相对于 canvas 左上角的点击位置 */ hitTargetOriginalByPoint(point: Vec2): HitResult<DisplayObject>; private revisePointByViewPort; private onClick; private onDBClick; private onRightClick; private onDragStart; private onDragMove; private onDragEnd; private onPinchStart; private onPinch; private onPinchEnd; private onRotateStart; private onRotate; private onRotateEnd; private onPress; private onPressUp; private onCarriageMove; private onCarriageEnd; private onHover; private onHoverIn; private onHoverOut; private onWheel; } export {};