99 lines
2.0 KiB
TypeScript
99 lines
2.0 KiB
TypeScript
|
export abstract class Drawing
|
||
|
{
|
||
|
width: number
|
||
|
height: number
|
||
|
|
||
|
scale: number = 1
|
||
|
abstract drawPath(path: DrawPathContext, option: DrawLineOption)
|
||
|
|
||
|
abstract drawLine(
|
||
|
x0: number,
|
||
|
y0: number,
|
||
|
x1: number,
|
||
|
y1: number,
|
||
|
option: DrawLineOption,
|
||
|
)
|
||
|
abstract drawRect(
|
||
|
x: number,
|
||
|
y: number,
|
||
|
width: number,
|
||
|
height: number,
|
||
|
option: DrawRectOption,
|
||
|
)
|
||
|
abstract drawLinePolygon(points: Array<any>, option: DrawLinePolygonOption)
|
||
|
abstract drawText(text: string, x: number, y: number, option: DrawTextOption)
|
||
|
abstract drawForeignObjectText(
|
||
|
text: string,
|
||
|
x: number,
|
||
|
y: number,
|
||
|
option: DrawTextOption,
|
||
|
)
|
||
|
abstract drawImage(
|
||
|
source: CanvasImageSource,
|
||
|
x: number,
|
||
|
y: number,
|
||
|
width: number,
|
||
|
height: number,
|
||
|
option: DrawImageOption,
|
||
|
border: number,
|
||
|
): Promise<any>
|
||
|
|
||
|
abstract clearAll()
|
||
|
|
||
|
abstract toHTML(): string
|
||
|
}
|
||
|
|
||
|
export class BaseDrawOption
|
||
|
{
|
||
|
lineWidth: number = 1
|
||
|
strokeStyle: string
|
||
|
}
|
||
|
|
||
|
interface IDrawPath
|
||
|
{
|
||
|
method: string
|
||
|
args: number[]
|
||
|
}
|
||
|
export class DrawPathContext
|
||
|
{
|
||
|
data: Array<IDrawPath> = []
|
||
|
|
||
|
moveTo(x: number, y: number)
|
||
|
{
|
||
|
this.data.push({ method: 'M', args: [x, y] })
|
||
|
|
||
|
return this
|
||
|
}
|
||
|
|
||
|
lineTo(x: number, y: number)
|
||
|
{
|
||
|
this.data.push({ method: 'L', args: [x, y] })
|
||
|
return this
|
||
|
}
|
||
|
}
|
||
|
|
||
|
export class DrawLineOption extends BaseDrawOption { }
|
||
|
export class DrawRectOption extends BaseDrawOption
|
||
|
{
|
||
|
fillStyle: string
|
||
|
}
|
||
|
export class DrawImageOption extends BaseDrawOption { }
|
||
|
export class DrawLinePolygonOption extends BaseDrawOption
|
||
|
{
|
||
|
isFill: boolean = true
|
||
|
fillStyle: string = 'rgb(0,0,0)'
|
||
|
}
|
||
|
|
||
|
export type DrawTextBaseLnie = 'alphabetic' | 'bottom' | 'hanging' | 'ideographic' | 'middle' | 'top'
|
||
|
export type DrawTextAlign = 'start' | 'center' | 'right'
|
||
|
export class DrawTextOption
|
||
|
{
|
||
|
maxWidth?: number
|
||
|
textAlign: DrawTextAlign = 'center'
|
||
|
textBaseline: DrawTextBaseLnie = 'middle'
|
||
|
fillStyle: string = 'rgb(0,0,0)'
|
||
|
fontSize: string = '12'
|
||
|
fontWeight: string = '400'
|
||
|
fontFamily: string = '宋体'
|
||
|
}
|