UNPKG

@visactor/vrender-core

Version:
202 lines (201 loc) 11.2 kB
import type { Matrix, IMatrix, IBoundsLike, IPointLike } from '@visactor/vutils'; import type { ICamera } from './camera'; import type { ICanvas } from './canvas'; import type { Releaseable } from './common'; import type { mat4, vec3 } from './matrix'; import type { IFillType, IStrokeType, ITransform } from './graphic'; export interface IConicalGradientData { addColorStop: (pos: number, color: string) => void; readonly stops: [number, string][]; GetPattern: (minW: number, minH: number, deltaAngle?: number) => CanvasPattern | null; } export interface ICommonStyleParams { fill?: IFillType; fillOpacity?: number; shadowBlur?: number; shadowColor?: string; shadowOffsetX?: number; shadowOffsetY?: number; globalCompositeOperation?: CanvasRenderingContext2D['globalCompositeOperation'] | ''; opacity?: number; blur?: number; filter?: string; } export interface IStrokeStyleParams { stroke?: IStrokeType | IStrokeType[]; strokeOpacity?: number; lineDash?: number[]; lineDashOffset?: number; lineWidth?: number; lineCap?: CanvasLineCap; lineJoin?: CanvasLineJoin; miterLimit?: number; opacity?: number; keepStrokeScale?: boolean; } export interface ITextStyleParams { font?: string; fontSize: number; fontFamily?: string; fontWeight?: string | number; textAlign?: CanvasTextAlign; textBaseline?: CanvasTextBaseline; scaleIn3d?: boolean; } export interface ISetCommonStyleParams { attribute: Partial<ICommonStyleParams & ITransform>; AABBBounds: IBoundsLike; } export interface ISetStrokeStyleParams { attribute: Partial<IStrokeStyleParams & ITransform>; AABBBounds: IBoundsLike; } export interface IContext2d extends Releaseable { stack: IMatrix[]; inuse?: boolean; camera?: ICamera; modelMatrix?: mat4; drawPromise?: Promise<any>; baseGlobalAlpha?: number; fillStyle: string | CanvasGradient | CanvasPattern; disableFill?: boolean; disableStroke?: boolean; disableBeginPath?: boolean; font: string; globalAlpha: number; lineCap: string; lineDashOffset: number; lineJoin: string; lineWidth: number; miterLimit: number; shadowBlur: number; shadowColor: string; shadowOffsetX: number; shadowOffsetY: number; strokeStyle: string | CanvasGradient | CanvasPattern; dpr: number; textAlign: string; textBaseline: string; nativeContext: CanvasRenderingContext2D | any; canvas: ICanvas; [key: string]: any; getCanvas: () => ICanvas; getContext: () => any; setTransformForCurrent: (force?: boolean) => void; currentMatrix: IMatrix; clear: () => void; restore: () => void; highPerformanceRestore: () => void; rotate: (angle: number, setTransform?: boolean) => void; save: () => void; highPerformanceSave: () => void; project?: (x: number, y: number, z?: number) => IPointLike; view?: (x: number, y: number, z?: number) => vec3; scale: (x: number, y: number, setTransform?: boolean) => void; scalePoint: (sx: number, sy: number, px: number, py: number, setTransform?: boolean) => void; transform: (m11: number, m12: number, m21: number, m22: number, dx: number, dy: number, setTransform?: boolean) => void; transformFromMatrix: (matrix: Matrix, setTransform?: boolean) => void; setTransform: (m11: number, m12: number, m21: number, m22: number, dx: number, dy: number, setTransform?: boolean, dpr?: number) => void; setTransformFromMatrix: (matrix: Matrix, setTransform?: boolean, dpr?: number) => void; resetTransform: (setTransform?: boolean, dpr?: number) => void; translate: (x: number, y: number, setTransform?: boolean) => void; rotateDegrees: (deg: number, setTransform?: boolean) => void; rotateAbout: (rad: number, x: number, y: number, setTransform?: boolean) => void; rotateDegreesAbout: (deg: number, x: number, y: number, setTransform?: boolean) => void; beginPath: () => void; clip: ((fillRule?: CanvasFillRule) => void) & ((path: Path2D, fillRule?: CanvasFillRule) => void); arc: (x: number, y: number, radius: number, startAngle: number, endAngle: number, anticlockwise?: boolean, z?: number) => void; arcTo: (x1: number, y1: number, x2: number, y2: number, radius: number) => void; bezierCurveTo: (cp1x: number, cp1y: number, cp2x: number, cp2y: number, x: number, y: number) => void; closePath: () => void; ellipse: (x: number, y: number, radiusX: number, radiusY: number, rotation: number, startAngle: number, endAngle: number, anticlockwise?: boolean) => void; lineTo: (x: number, y: number, z?: number) => void; moveTo: (x: number, y: number, z?: number) => void; quadraticCurveTo: (cpx: number, cpy: number, x: number, y: number, z?: number) => void; rect: (x: number, y: number, w: number, h: number, z?: number) => void; createImageData: (imageDataOrSw: number | ImageData, sh?: number) => ImageData; createLinearGradient: (x0: number, y0: number, x1: number, y1: number) => CanvasGradient; createPattern: (image: HTMLImageElement | HTMLCanvasElement | HTMLVideoElement | ICanvas | any, repetition: string) => CanvasPattern | null; createRadialGradient: (x0: number, y0: number, r0: number, x1: number, y1: number, r1: number) => CanvasGradient; createConicGradient: (x: number, y: number, startAngle: number, endAngle: number) => IConicalGradientData | null; fill: (path?: Path2D, fillRule?: CanvasFillRule) => void; fillRect: (x: number, y: number, w: number, h: number) => void; clearRect: (x: number, y: number, w: number, h: number) => void; fillText: (text: string, x: number, y: number, z?: number) => void; getImageData: (sx: number, sy: number, sw: number, sh: number) => ImageData; getLineDash: () => number[]; isPointInPath: (x: number, y: number) => boolean; isPointInStroke: (x: number, y: number) => boolean; measureText: (text: string, method?: 'native' | 'simple' | 'quick') => { width: number; }; putImageData: (imagedata: ImageData, dx: number, dy: number) => void; setLineDash: (segments: number[]) => void; stroke: (path?: Path2D) => void; strokeRect: (x: number, y: number, w: number, h: number) => void; strokeText: (text: string, x: number, y: number, z?: number) => void; drawImage: ((image: HTMLImageElement | HTMLCanvasElement | HTMLVideoElement | ImageBitmap | ICanvas | any, dstX: number, dstY: number) => void) & ((image: HTMLImageElement | HTMLCanvasElement | HTMLVideoElement | ImageBitmap | ICanvas | any, dstX: number, dstY: number, dstW: number, dstH: number) => void) & ((image: HTMLImageElement | HTMLCanvasElement | HTMLVideoElement | ImageBitmap | ICanvas | any, srcX: number, srcY: number, srcW: number, srcH: number, dstX: number, dstY: number, dstW: number, dstH: number) => void); setCommonStyle: (params: ISetCommonStyleParams, attribute: ICommonStyleParams, offsetX: number, offsetY: number, defultParams?: ICommonStyleParams | Partial<ICommonStyleParams>[]) => void; setShadowBlendStyle?: (params: ISetCommonStyleParams, attribute: ICommonStyleParams, defultParams?: ICommonStyleParams | Partial<ICommonStyleParams>[]) => void; setStrokeStyle: (params: ISetStrokeStyleParams, attribute: IStrokeStyleParams, offsetX: number, offsetY: number, defultParams?: Required<IStrokeStyleParams> | Partial<IStrokeStyleParams>[]) => void; setTextStyle: (params: Partial<ITextStyleParams>, defaultParams?: ITextStyleParams, z?: number) => void; setTextStyleWithoutAlignBaseline: (params: Partial<ITextStyleParams>, defaultParams?: ITextStyleParams, z?: number) => void; draw: (...params: any) => void; clearMatrix: (setTransform?: boolean, dpr?: number) => void; setClearMatrix: (a: number, b: number, c: number, d: number, e: number, f: number) => void; onlyTranslate: (dpr?: number) => boolean; } export interface IContextLike { fillStyle: string | CanvasGradient | CanvasPattern; font: string; globalAlpha: number; lineCap: string; lineDashOffset: number; lineJoin: string; lineWidth: number; miterLimit: number; shadowBlur: number; shadowColor: string; shadowOffsetX: number; shadowOffsetY: number; strokeStyle: string | CanvasGradient | CanvasPattern; dpr: number; textAlign: string; textBaseline: string; nativeContext: CanvasRenderingContext2D | any; [key: string]: any; clear: () => void; restore: () => void; save: () => void; translate: (x: number, y: number) => void; beginPath: () => void; clip: ((fillRule?: CanvasFillRule) => void) & ((path: Path2D, fillRule?: CanvasFillRule) => void); arc: (x: number, y: number, radius: number, startAngle: number, endAngle: number, anticlockwise?: boolean) => void; arcTo: ((x1: number, y1: number, x2: number, y2: number, radius: number) => void) & ((x1: number, y1: number, x2: number, y2: number, radiusX: number, radiusY: number, rotation: number) => void); bezierCurveTo: (cp1x: number, cp1y: number, cp2x: number, cp2y: number, x: number, y: number) => void; closePath: () => void; ellipse: (x: number, y: number, radiusX: number, radiusY: number, rotation: number, startAngle: number, endAngle: number, anticlockwise?: boolean) => void; lineTo: (x: number, y: number) => void; moveTo: (x: number, y: number) => void; quadraticCurveTo: (cpx: number, cpy: number, x: number, y: number) => void; rect: (x: number, y: number, w: number, h: number) => void; fill: (path?: Path2D, fillRule?: CanvasFillRule) => void; fillRect: (x: number, y: number, w: number, h: number) => void; clearRect: (x: number, y: number, w: number, h: number) => void; fillText: (text: string, x: number, y: number, maxWidth?: number) => void; getImageData: (sx: number, sy: number, sw: number, sh: number) => ImageData; getLineDash: () => number[]; isPointInPath: (x: number, y: number) => boolean; isPointInStroke: (x: number, y: number) => boolean; measureText: (text: string, method?: 'native' | 'simple' | 'quick') => { width: number; }; putImageData: (imagedata: ImageData, dx: number, dy: number, dirtyX?: number, dirtyY?: number, dirtyWidth?: number, dirtyHeight?: number) => void; setLineDash: (segments: number[]) => void; stroke: (path?: Path2D) => void; strokeRect: (x: number, y: number, w: number, h: number) => void; strokeText: (text: string, x: number, y: number, maxWidth?: number) => void; drawImage: ((image: HTMLImageElement | HTMLCanvasElement | HTMLVideoElement | ImageBitmap | any, dstX: number, dstY: number) => void) & ((image: HTMLImageElement | HTMLCanvasElement | HTMLVideoElement | ImageBitmap | any, dstX: number, dstY: number, dstW: number, dstH: number) => void) & ((image: HTMLImageElement | HTMLCanvasElement | HTMLVideoElement | ImageBitmap | any, srcX: number, srcY: number, srcW: number, srcH: number, dstX: number, dstY: number, dstW: number, dstH: number) => void); clearMatrix: () => void; onlyTranslate: () => boolean; }