174 lines
4.5 KiB
TypeScript
174 lines
4.5 KiB
TypeScript
|
/// <reference types="node" />
|
|||
|
import { DisplayObject, FederatedMouseEvent, FederatedPointerEvent, Point } from 'pixi.js';
|
|||
|
import { IGraphicScene } from '../app/JlGraphicApp';
|
|||
|
import { JlGraphic } from '../core/JlGraphic';
|
|||
|
export declare enum InteractionPluginType {
|
|||
|
App = "app",
|
|||
|
Graphic = "graphic",
|
|||
|
Other = "other"
|
|||
|
}
|
|||
|
/**
|
|||
|
* 交互插件
|
|||
|
*/
|
|||
|
export interface InteractionPlugin {
|
|||
|
readonly _type: string;
|
|||
|
name: string;
|
|||
|
app: IGraphicScene;
|
|||
|
/**
|
|||
|
* 恢复
|
|||
|
*/
|
|||
|
resume(): void;
|
|||
|
/**
|
|||
|
* 停止
|
|||
|
*/
|
|||
|
pause(): void;
|
|||
|
/**
|
|||
|
* 是否生效
|
|||
|
*/
|
|||
|
isActive(): boolean;
|
|||
|
isAppPlugin(): boolean;
|
|||
|
isOtherPlugin(): boolean;
|
|||
|
isGraphicPlugin(): boolean;
|
|||
|
}
|
|||
|
export declare abstract class InteractionPluginBase implements InteractionPlugin {
|
|||
|
readonly _type: string;
|
|||
|
name: string;
|
|||
|
app: IGraphicScene;
|
|||
|
_pause: boolean;
|
|||
|
constructor(app: IGraphicScene, name: string, type: string);
|
|||
|
/**
|
|||
|
* 恢复
|
|||
|
*/
|
|||
|
resume(): void;
|
|||
|
/**
|
|||
|
* 停止
|
|||
|
*/
|
|||
|
pause(): void;
|
|||
|
abstract bind(): void;
|
|||
|
abstract unbind(): void;
|
|||
|
/**
|
|||
|
* 是否生效
|
|||
|
*/
|
|||
|
isActive(): boolean;
|
|||
|
isGraphicPlugin(): boolean;
|
|||
|
isAppPlugin(): boolean;
|
|||
|
isOtherPlugin(): boolean;
|
|||
|
}
|
|||
|
export declare abstract class OtherInteractionPlugin extends InteractionPluginBase {
|
|||
|
constructor(app: IGraphicScene, name: string);
|
|||
|
}
|
|||
|
export declare class AppDragEvent {
|
|||
|
app: IGraphicScene;
|
|||
|
type: 'start' | 'move' | 'end';
|
|||
|
target: DisplayObject;
|
|||
|
original: FederatedPointerEvent;
|
|||
|
start: Point;
|
|||
|
constructor(app: IGraphicScene, type: 'start' | 'move' | 'end', target: DisplayObject, original: FederatedPointerEvent, start: Point);
|
|||
|
get isMouse(): boolean;
|
|||
|
get isLeftButton(): boolean;
|
|||
|
get isRightButton(): boolean;
|
|||
|
get isMiddleButton(): boolean;
|
|||
|
get isTouch(): boolean;
|
|||
|
/**
|
|||
|
* 终点坐标(画布坐标)
|
|||
|
*/
|
|||
|
get end(): Point;
|
|||
|
get dx(): number;
|
|||
|
get dy(): number;
|
|||
|
get dsx(): number;
|
|||
|
get dsy(): number;
|
|||
|
/**
|
|||
|
* 转换为目标对象的位移距离
|
|||
|
*/
|
|||
|
toTargetShiftLen(target: DisplayObject): {
|
|||
|
dx: number;
|
|||
|
dy: number;
|
|||
|
};
|
|||
|
}
|
|||
|
/**
|
|||
|
* 拖拽操作插件
|
|||
|
*/
|
|||
|
export declare class DragPlugin extends OtherInteractionPlugin {
|
|||
|
static Name: string;
|
|||
|
private threshold;
|
|||
|
target: DisplayObject | null;
|
|||
|
start: Point | null;
|
|||
|
startClientPoint: Point | null;
|
|||
|
drag: boolean;
|
|||
|
constructor(app: IGraphicScene);
|
|||
|
static new(app: IGraphicScene): DragPlugin;
|
|||
|
bind(): void;
|
|||
|
unbind(): void;
|
|||
|
onPointerDown(e: FederatedPointerEvent): void;
|
|||
|
onPointerMove(e: FederatedPointerEvent): void;
|
|||
|
onPointerUp(e: FederatedPointerEvent): void;
|
|||
|
/**
|
|||
|
* 清理缓存
|
|||
|
*/
|
|||
|
clearCache(): void;
|
|||
|
}
|
|||
|
/**
|
|||
|
* 视口移动插件
|
|||
|
*/
|
|||
|
export declare class ViewportMovePlugin extends OtherInteractionPlugin {
|
|||
|
static Name: string;
|
|||
|
static MoveInterval: number;
|
|||
|
static TriggerRange: number;
|
|||
|
static DefaultMoveSpeed: number;
|
|||
|
moveHandler: NodeJS.Timeout | null;
|
|||
|
moveSpeedx: number;
|
|||
|
moveSpeedy: number;
|
|||
|
constructor(app: IGraphicScene);
|
|||
|
static new(app: IGraphicScene): ViewportMovePlugin;
|
|||
|
pause(): void;
|
|||
|
bind(): void;
|
|||
|
unbind(): void;
|
|||
|
startMove(moveSpeedx: number, moveSpeedy: number): void;
|
|||
|
stopMove(): void;
|
|||
|
private calculateBoundaryMoveSpeed;
|
|||
|
calculateMoveSpeed(dd: number): number;
|
|||
|
viewportMove(e: FederatedMouseEvent): void;
|
|||
|
}
|
|||
|
/**
|
|||
|
* 应用交互插件,同时只能生效一个
|
|||
|
*/
|
|||
|
export declare abstract class AppInteractionPlugin extends InteractionPluginBase {
|
|||
|
constructor(name: string, app: IGraphicScene);
|
|||
|
/**
|
|||
|
* 恢复,app交互插件同时只能生效一个
|
|||
|
*/
|
|||
|
resume(): void;
|
|||
|
}
|
|||
|
/**
|
|||
|
* 图形交互插件,可同时生效
|
|||
|
*/
|
|||
|
export declare abstract class GraphicInteractionPlugin<G extends JlGraphic> implements InteractionPlugin {
|
|||
|
readonly _type = InteractionPluginType.Graphic;
|
|||
|
app: IGraphicScene;
|
|||
|
name: string;
|
|||
|
_pause: boolean;
|
|||
|
constructor(name: string, app: IGraphicScene);
|
|||
|
isActive(): boolean;
|
|||
|
isAppPlugin(): boolean;
|
|||
|
isOtherPlugin(): boolean;
|
|||
|
isGraphicPlugin(): boolean;
|
|||
|
resume(): void;
|
|||
|
pause(): void;
|
|||
|
/**
|
|||
|
* 过滤需要的图形对象
|
|||
|
*/
|
|||
|
abstract filter(...grahpics: JlGraphic[]): G[] | undefined;
|
|||
|
binds(list?: G[]): void;
|
|||
|
unbinds(list?: G[]): void;
|
|||
|
/**
|
|||
|
* 绑定图形对象的交互处理
|
|||
|
* @param g 图形对象
|
|||
|
*/
|
|||
|
abstract bind(g: G): void;
|
|||
|
/**
|
|||
|
* 取消图形对象的交互处理
|
|||
|
* @param g 图形对象
|
|||
|
*/
|
|||
|
abstract unbind(g: G): void;
|
|||
|
}
|