import { ICanvas } from '@/uni_modules/tmx-ui/core/canvas/ICanvas.uts'; export type ShapeType = any; /** 旋转元素时的中心点,默认是topLeft左顶,center表示元素的中间 */ export type ITextAlignType = 'left' | 'center' | 'right'; export type ITextBaselineType = 'top' | 'middle' | 'bottom'; export type ILineJoinType = "round" | "bevel" | "miter"; export type ILineCapType = "butt" | "round" | "square"; export type CanvasRotateCenter = "topLeft"|"center"|"topRight"|"bottomLeft"|"bottomRight" export type DirectionEventType = 'down' | 'move' | 'up'; export type InteractionEventType = 'click' | 'longpress' | 'dbclick' | 'cancel'; export type CanvasEventType = DirectionEventType | InteractionEventType; export type ShapeSetAttrType = string | number | boolean | Array export type IShapeVector2d = { x:number, y:number } export type ICanvasEvent = { type: CanvasEventType; /** 在画布上的坐标X */ x: number; /** 在画布上的坐标Y */ y: number; detail:IcanvasDomEventDetail[], touches:ICanvasEvent[]; target: ShapeType[]; } export type IcanvasDomEventDetail = { startX:number, startY:number, endX:number, endY:number, moveX:number, moveY:number, /** 相对上一次移动的距离*/ moveLenX:number, /** 相对上一次移动的距离*/ moveLenY:number, /** 相对起始时到当前位置移动的距离*/ endLenX:number, /** 相对起始时到当前位置移动的距离*/ endLenY:number // /** 多点触摸时,两点之间的距离 */ // touchesLenX:number, // /** 多点触摸时,两点之间的距离 */ // touchesLenY:number } export type ICanvasDomEvent = { type: CanvasEventType; x: number; y: number; detail:IcanvasDomEventDetail[], touches:ICanvasDomEvent[]; } export type IEventListener = (event: ICanvasEvent) => void; export type IEventShape = { type: CanvasEventType; x: number; y: number; /** 元素本身内的坐标X */ layerX:number; /** 元素本身内的坐标Y */ layerY:number; touches:IEventShape[]; target:ShapeType } export type IEventShapeListener = (event: IEventShape) => void; export type IEventMap = Map; export type ICanvasOptional = { /** 选式时传递当前组件this,组合式传递 getCurrentInstance()?.proxy ?? null */ component:any|null, /** 画布id */ canvasId:string, } export type IShapeOptional = { x?: number; y?: number; width?: number; height?: number; fill?: string; stroke?: string; strokeWidth?: number; opacity?: number; visible?: boolean; rotation?: number; scaleX?: number; scaleY?: number; /** 元素相对舞台x坐标系的坐标,就是x,y为起始点,如果x,y为0就相当于是舞台的顶左 **/ offsetX?: number; /** 元素相对舞台y坐标系的坐标,就是x,y为起始点,如果x,y为0就相当于是舞台的顶左 **/ offsetY?: number; draggable?: boolean; // 元素之间上下重叠时,是否允许穿透冒泡逐层触发,默认不允许 bubbleEvent?: boolean; rotateCenter?:CanvasRotateCenter; // 线条样式 lineJoin?: ILineJoinType; lineDashOffset?: number; lineDash ?:number[] ; lineCap?: ILineCapType; src?:string; // 二维码的前景块的颜色。 foreground?:string; // 二维码内容。 qrcodeText?:string; text?: string; fontSize?: number; fontFamily?: string; textAlign?: ITextAlignType; textBaseline?: ITextBaselineType; padding?: number; lineHeight?: number; innerRadius ?: number; outerRadius ?: number; startAngle ?: number; endAngle ?: number; radius ?:number; sides ?:number; //多边形线的点 points ?:number[]; //多边形线是否自动闭合 closed ?:boolean; // 多边线将连接线曲线化 tension ?:number //将曲线平滑化 bezier ?:boolean; // 椭圆的小径 radiusX ?:number //椭圆的大径 radiusY ?:number //星的角数量,默认5角星 numPoints ?: number; pointStart?:IShapeVector2d; pointEnd?:IShapeVector2d; strokeGradient?:string[]; fillGradient?:string[]; clip?:boolean; zIndex?:number; textBgColor?:string; } export type IShapeBoundRect = { x : number, y : number, height : number, width : number } export type QrGenerateFrameResult = { frameBuffer: number[], width: number } export interface IShape { canvas : ICanvas, x: number; y: number; width: number; height: number; fill: string; stroke: string; strokeWidth: number; opacity: number; visible: boolean; rotation: number; scaleX: number; scaleY: number; /** 元素相对舞台x坐标系的坐标,就是x,y为起始点,如果x,y为0就相当于是舞台的顶左 **/ offsetX: number; /** 元素相对舞台y坐标系的坐标,就是x,y为起始点,如果x,y为0就相当于是舞台的顶左 **/ offsetY: number; draggable: boolean; // 元素之间上下重叠时,是否允许穿透冒泡逐层触发,默认不允许 bubbleEvent: boolean; rotateCenter:CanvasRotateCenter; /**toggle方法中的选中状态 */ toggleStatus:boolean; // 线条样式 lineJoin: ILineJoinType; lineDashOffset: number; lineDash:number[] lineCap: ILineCapType; // text数据 text : string; fontSize : number; fontFamily : string ; textAlign : ITextAlignType; textBaseline : ITextBaselineType; padding : number; lineHeight : number; //ring数据 innerRadius : number; outerRadius : number; startAngle : number; endAngle : number; radius :number; sides: number; src:string; // 二维码的前景块的颜色。 foreground:string; // 二维码内容。 qrcodeText:string; points :number[]; //多边形线是否自动闭合 closed :boolean; // 多边线将连接线曲线化 tension:number bezier :boolean; // 椭圆的小径 radiusX :number; //椭圆的大径 radiusY :number; //星的角数量,默认5角星 numPoints: number; pointStart:IShapeVector2d; pointEnd:IShapeVector2d; strokeGradient:string[]; fillGradient:string[]; clip:boolean; zIndex:number; textBgColor:string; drag : (eventName : CanvasEventType, parentEventDetail : ICanvasEvent) => void draw(ctx: CanvasRenderingContext2D): void; isPointInPath(x: number, y: number,shapeId:string): boolean; getBoundRect() : IShapeBoundRect; setAttr(key:string,value:any):void; getAttr(key: string): any | null; toggle(call:(status:boolean,target:any)=>void):void; }