@leafer/interface 1.0.0-beta.15 → 1.0.0-beta.17

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/package.json +2 -1
  2. package/src/app/IApp.ts +6 -0
  3. package/src/app/ILeafer.ts +103 -0
  4. package/src/canvas/ICanvas.ts +334 -0
  5. package/src/canvas/ICanvasManager.ts +10 -0
  6. package/src/canvas/IHitCanvasManager.ts +9 -0
  7. package/src/canvas/ILeaferCanvas.ts +205 -0
  8. package/src/canvas/ISkiaCanvas.ts +20 -0
  9. package/src/control/IControl.ts +5 -0
  10. package/src/data/IData.ts +28 -0
  11. package/src/data/ILeafData.ts +27 -0
  12. package/src/data/IList.ts +45 -0
  13. package/src/display/IBranch.ts +10 -0
  14. package/src/display/ILeaf.ts +385 -0
  15. package/src/display/IView.ts +10 -0
  16. package/src/display/module/IBranchRender.ts +10 -0
  17. package/src/display/module/ILeafBounds.ts +23 -0
  18. package/src/display/module/ILeafDataProxy.ts +10 -0
  19. package/src/display/module/ILeafEventer.ts +18 -0
  20. package/src/display/module/ILeafHit.ts +12 -0
  21. package/src/display/module/ILeafMask.ts +12 -0
  22. package/src/display/module/ILeafMatrix.ts +8 -0
  23. package/src/display/module/ILeafRender.ts +16 -0
  24. package/src/event/IEvent.ts +111 -0
  25. package/src/event/IEventer.ts +43 -0
  26. package/src/event/IUIEvent.ts +88 -0
  27. package/src/file/IFileType.ts +2 -0
  28. package/src/function/IFunction.ts +13 -0
  29. package/src/image/IImageManager.ts +18 -0
  30. package/src/image/ILeaferImage.ts +43 -0
  31. package/src/interaction/IInteraction.ts +106 -0
  32. package/src/layout/ILeafLayout.ts +94 -0
  33. package/src/layouter/ILayouter.ts +60 -0
  34. package/src/math/IMath.ts +182 -0
  35. package/src/path/IPathCommand.ts +50 -0
  36. package/src/path/IPathDrawer.ts +41 -0
  37. package/src/platform/IPlatform.ts +49 -0
  38. package/src/plugin/IPlugin.ts +10 -0
  39. package/src/renderer/IRenderer.ts +53 -0
  40. package/src/selector/ISelector.ts +35 -0
  41. package/src/task/ITaskProcessor.ts +44 -0
  42. package/src/watcher/IWatcher.ts +34 -0
  43. package/types/index.d.ts +2 -2
package/package.json CHANGED
@@ -1,12 +1,13 @@
1
1
  {
2
2
  "name": "@leafer/interface",
3
- "version": "1.0.0-beta.15",
3
+ "version": "1.0.0-beta.17",
4
4
  "description": "@leafer/interface",
5
5
  "author": "Chao (Leafer) Wan",
6
6
  "license": "MIT",
7
7
  "main": "src/index.ts",
8
8
  "types": "types/index.d.ts",
9
9
  "files": [
10
+ "src",
10
11
  "types",
11
12
  "dist"
12
13
  ],
@@ -0,0 +1,6 @@
1
+ import { ILeafer } from './ILeafer'
2
+
3
+ export interface IApp extends ILeafer {
4
+ children: ILeafer[]
5
+ realCanvas: boolean
6
+ }
@@ -0,0 +1,103 @@
1
+ import { ILeaf } from '../display/ILeaf'
2
+ import { IRenderer, IRendererConfig } from '../renderer/IRenderer'
3
+ import { IHitCanvas, ILeaferCanvas, ILeaferCanvasConfig, IHitCanvasConfig } from '../canvas/ILeaferCanvas'
4
+ import { ILayouter, ILayouterConfig } from '../layouter/ILayouter'
5
+ import { ISelector, ISelectorConfig } from '../selector/ISelector'
6
+ import { IInteraction, IInteractionCanvas, IInteractionConfig } from '../interaction/IInteraction'
7
+ import { IWatcher, IWatcherConfig } from '../watcher/IWatcher'
8
+ import { IAutoBounds, IScreenSizeData } from '../math/IMath'
9
+ import { ICanvasManager } from '../canvas/ICanvasManager'
10
+ import { IHitCanvasManager } from '../canvas/IHitCanvasManager'
11
+ import { IEventListenerId } from '../event/IEventer'
12
+ import { IObject } from '../data/IData'
13
+ import { IZoomView } from '../display/IView'
14
+ import { IApp } from './IApp'
15
+ import { ILeaferImage, ILeaferImageConfig } from '../image/ILeaferImage'
16
+ import { IControl } from '../control/IControl'
17
+ import { IFunction } from '../function/IFunction'
18
+
19
+
20
+ export type ILeaferType = 'draw' | 'design' | 'board' | 'document' | 'user'
21
+ export interface ILeaferConfig extends IRendererConfig, ILeaferCanvasConfig, IInteractionConfig, ILayouterConfig {
22
+ start?: boolean
23
+ type?: ILeaferType
24
+ realCanvas?: boolean
25
+ }
26
+
27
+ export interface ILeafer extends IZoomView, IControl {
28
+
29
+ readonly isApp: boolean
30
+ readonly app: ILeafer
31
+ parent?: IApp
32
+
33
+ running: boolean
34
+ created: boolean
35
+ ready: boolean
36
+ viewReady: boolean
37
+ viewCompleted: boolean
38
+
39
+ pixelRatio: number
40
+
41
+ view: unknown
42
+
43
+ canvas: ILeaferCanvas
44
+ renderer: IRenderer
45
+
46
+ watcher: IWatcher
47
+ layouter: ILayouter
48
+
49
+ selector?: ISelector
50
+ interaction?: IInteraction
51
+
52
+ canvasManager: ICanvasManager
53
+ hitCanvasManager?: IHitCanvasManager
54
+
55
+ autoLayout?: IAutoBounds
56
+
57
+ config: ILeaferConfig
58
+
59
+ __eventIds: IEventListenerId[]
60
+ __nextRenderWait: IFunction[]
61
+
62
+ init(userConfig?: ILeaferConfig, parentApp?: IApp): void
63
+ setZoomLayer(zoomLayer: ILeaf, moveLayer?: ILeaf): void
64
+ forceFullRender(): void
65
+ updateCursor(): void
66
+ resize(size: IScreenSizeData): void
67
+
68
+ waitReady(item: IFunction): void
69
+ waitViewReady(item: IFunction): void
70
+ waitViewCompleted(item: IFunction): void
71
+ }
72
+
73
+ export interface ILeaferTypeCreator {
74
+ list: ILeaferTypeList
75
+ register(name: string, fn: ILeaferTypeFunction): void
76
+ run(name: string, leafer: ILeafer): void
77
+ }
78
+
79
+ export interface ILeaferTypeFunction {
80
+ (leafer: ILeafer): void
81
+ }
82
+
83
+ export interface ILeaferTypeList {
84
+ [key: string]: ILeaferTypeFunction
85
+ }
86
+
87
+ export interface ICreator {
88
+ image?(options?: ILeaferImageConfig): ILeaferImage
89
+ canvas?(options?: ILeaferCanvasConfig, manager?: ICanvasManager): ILeaferCanvas
90
+ hitCanvas?(options?: IHitCanvasConfig, manager?: ICanvasManager): IHitCanvas
91
+
92
+ watcher?(target: ILeaf, options?: IWatcherConfig): IWatcher
93
+ layouter?(target: ILeaf, options?: ILayouterConfig): ILayouter
94
+ renderer?(target: ILeaf, canvas: ILeaferCanvas, options?: IRendererConfig): IRenderer
95
+ selector?(target: ILeaf, options?: ISelectorConfig): ISelector
96
+
97
+ interaction?(target: ILeaf, canvas: IInteractionCanvas, selector: ISelector, options?: IInteractionConfig): IInteraction
98
+ }
99
+
100
+ export interface IUICreator {
101
+ register(UI: IObject): void
102
+ get(tag: string, data: IObject): IObject
103
+ }
@@ -0,0 +1,334 @@
1
+ type GlobalCompositeOperation = 'color' | 'color-burn' | 'color-dodge' | 'copy' | 'darken' | 'destination-atop' | 'destination-in' | 'destination-out' | 'destination-over' | 'difference' | 'exclusion' | 'hard-light' | 'hue' | 'lighten' | 'lighter' | 'luminosity' | 'multiply' | 'overlay' | 'saturation' | 'screen' | 'soft-light' | 'source-atop' | 'source-in' | 'source-out' | 'source-over' | 'xor'
2
+ type CanvasDirection = 'inherit' | 'ltr' | 'rtl'
3
+ export type IWindingRule = 'evenodd' | 'nonzero'
4
+ // type CanvasFontKerning = 'auto' | 'none' | 'normal'
5
+ // type CanvasFontStretch = 'condensed' | 'expanded' | 'extra-condensed' | 'extra-expanded' | 'normal' | 'semi-condensed' | 'semi-expanded' | 'ultra-condensed' | 'ultra-expanded'
6
+ // type CanvasFontVariantCaps = 'all-petite-caps' | 'all-small-caps' | 'normal' | 'petite-caps' | 'small-caps' | 'titling-caps' | 'unicase'
7
+ type CanvasLineCap = 'butt' | 'round' | 'square'
8
+ type CanvasLineJoin = 'bevel' | 'miter' | 'round'
9
+ type CanvasTextAlign = 'center' | 'end' | 'left' | 'right' | 'start'
10
+ type CanvasTextBaseline = 'alphabetic' | 'bottom' | 'hanging' | 'ideographic' | 'middle' | 'top'
11
+ //type CanvasTextRendering = 'auto' | 'geometricPrecision' | 'optimizeLegibility' | 'optimizeSpeed'
12
+
13
+ export interface IPath2D extends CanvasPath {
14
+ addPath(path: IPath2D, transform?: DOMMatrix2DInit): void
15
+ }
16
+
17
+ declare var IPath2D: {
18
+ prototype: IPath2D
19
+ new(path?: IPath2D | string): IPath2D
20
+ }
21
+
22
+ interface CanvasCompositing {
23
+ globalAlpha: number
24
+ globalCompositeOperation: GlobalCompositeOperation
25
+ }
26
+
27
+ type CanvasImageSource = any
28
+ interface CanvasDrawImage {
29
+ drawImage(image: CanvasImageSource, dx: number, dy: number): void
30
+ drawImage(image: CanvasImageSource, dx: number, dy: number, dw: number, dh: number): void
31
+ drawImage(image: CanvasImageSource, sx: number, sy: number, sw: number, sh: number, dx: number, dy: number, dw: number, dh: number): void
32
+ }
33
+
34
+ interface CanvasDrawPath {
35
+ beginPath(): void
36
+ clip(fillRule?: IWindingRule): void
37
+ clip(path: IPath2D, fillRule?: IWindingRule): void
38
+ fill(fillRule?: IWindingRule): void
39
+ fill(path: IPath2D, fillRule?: IWindingRule): void
40
+ isPointInPath(x: number, y: number, fillRule?: IWindingRule): boolean
41
+ isPointInPath(path: IPath2D, x: number, y: number, fillRule?: IWindingRule): boolean
42
+ isPointInStroke(x: number, y: number): boolean
43
+ isPointInStroke(path: IPath2D, x: number, y: number): boolean
44
+ stroke(): void
45
+ stroke(path: IPath2D): void
46
+ }
47
+
48
+ interface CanvasFillStrokeStyles {
49
+ fillStyle: string | CanvasGradient | CanvasPattern
50
+ strokeStyle: string | CanvasGradient | CanvasPattern
51
+ createConicGradient(startAngle: number, x: number, y: number): CanvasGradient
52
+ createLinearGradient(x0: number, y0: number, x1: number, y1: number): CanvasGradient
53
+ createPattern(image: CanvasImageSource, repetition: string | null): CanvasPattern | null
54
+ createRadialGradient(x0: number, y0: number, r0: number, x1: number, y1: number, r1: number): CanvasGradient
55
+ }
56
+
57
+ interface CanvasFilters {
58
+ filter: string
59
+ }
60
+
61
+ export interface CanvasGradient {
62
+ addColorStop(offset: number, color: string): void
63
+ }
64
+
65
+ declare var CanvasGradient: {
66
+ prototype: CanvasGradient
67
+ new(): CanvasGradient
68
+ }
69
+
70
+ interface ImageDataSettings {
71
+ colorSpace?: PredefinedColorSpace
72
+ }
73
+
74
+ interface CanvasImageData {
75
+ createImageData(sw: number, sh: number, settings?: ImageDataSettings): ImageData
76
+ createImageData(imagedata: ImageData): ImageData
77
+ getImageData(sx: number, sy: number, sw: number, sh: number, settings?: ImageDataSettings): ImageData
78
+ putImageData(imagedata: ImageData, dx: number, dy: number): void
79
+ putImageData(imagedata: ImageData, dx: number, dy: number, dirtyX: number, dirtyY: number, dirtyWidth: number, dirtyHeight: number): void
80
+ }
81
+
82
+ interface CanvasImageSmoothing {
83
+ imageSmoothingEnabled: boolean
84
+ imageSmoothingQuality: ImageSmoothingQuality
85
+ }
86
+
87
+ interface CanvasPath {
88
+ arc(x: number, y: number, radius: number, startAngle: number, endAngle: number, anticlockwise?: boolean): void
89
+ arcTo(x1: number, y1: number, x2: number, y2: number, radius: number): void
90
+ bezierCurveTo(cp1x: number, cp1y: number, cp2x: number, cp2y: number, x: number, y: number): void
91
+ closePath(): void
92
+ ellipse(x: number, y: number, radiusX: number, radiusY: number, rotation: number, startAngle: number, endAngle: number, anticlockwise?: boolean): void
93
+ lineTo(x: number, y: number): void
94
+ moveTo(x: number, y: number): void
95
+ quadraticCurveTo(cpx: number, cpy: number, x: number, y: number): void
96
+ rect(x: number, y: number, w: number, h: number): void
97
+ roundRect(x: number, y: number, width: number, height: number, radius?: number | number[]): void
98
+ }
99
+
100
+ interface CanvasPathDrawingStyles {
101
+ lineCap: CanvasLineCap
102
+ lineDashOffset: number
103
+ lineJoin: CanvasLineJoin
104
+ lineWidth: number
105
+ miterLimit: number
106
+ getLineDash(): number[]
107
+ setLineDash(segments: number[]): void
108
+ }
109
+
110
+ export interface CanvasPattern {
111
+ setTransform(transform?: DOMMatrix2DInit): void
112
+ }
113
+
114
+ declare var CanvasPattern: {
115
+ prototype: CanvasPattern
116
+ new(): CanvasPattern
117
+ }
118
+
119
+ interface CanvasRect {
120
+ clearRect(x: number, y: number, w: number, h: number): void
121
+ fillRect(x: number, y: number, w: number, h: number): void
122
+ strokeRect(x: number, y: number, w: number, h: number): void
123
+ }
124
+
125
+ type PredefinedColorSpace = 'display-p3' | 'srgb'
126
+ interface CanvasRenderingContext2DSettings {
127
+ alpha?: boolean
128
+ colorSpace?: PredefinedColorSpace
129
+ desynchronized?: boolean
130
+ willReadFrequently?: boolean
131
+ }
132
+ export interface ICanvasContext2D extends CanvasCompositing, CanvasDrawImage, CanvasDrawPath, CanvasFillStrokeStyles, CanvasFilters, CanvasImageData, CanvasImageSmoothing, CanvasPath, CanvasPathDrawingStyles, CanvasRect, CanvasShadowStyles, CanvasState, CanvasText, CanvasTextDrawingStyles, CanvasTransform, CanvasUserInterface {
133
+ readonly canvas: HTMLCanvasElement
134
+ getContextAttributes(): CanvasRenderingContext2DSettings
135
+ }
136
+
137
+ declare var ICanvasContext2D: {
138
+ prototype: ICanvasContext2D
139
+ new(): ICanvasContext2D
140
+ }
141
+
142
+ interface CanvasShadowStyles {
143
+ shadowBlur: number
144
+ shadowColor: string
145
+ shadowOffsetX: number
146
+ shadowOffsetY: number
147
+ }
148
+
149
+ interface CanvasState {
150
+ restore(): void
151
+ save(): void
152
+ }
153
+
154
+ interface CanvasUserInterface {
155
+ drawFocusIfNeeded(element: any): void
156
+ drawFocusIfNeeded(path: IPath2D, element: any): void
157
+ }
158
+
159
+
160
+ export interface ITextMetrics {
161
+ /** Returns the measurement described below. */
162
+ readonly actualBoundingBoxAscent: number
163
+ /** Returns the measurement described below. */
164
+ readonly actualBoundingBoxDescent: number
165
+ /** Returns the measurement described below. */
166
+ readonly actualBoundingBoxLeft: number
167
+ /** Returns the measurement described below. */
168
+ readonly actualBoundingBoxRight: number
169
+ /** Returns the measurement described below. */
170
+ readonly fontBoundingBoxAscent: number
171
+ /** Returns the measurement described below. */
172
+ readonly fontBoundingBoxDescent: number
173
+ /** Returns the measurement described below. */
174
+ readonly width: number
175
+ }
176
+
177
+ declare var TextMetrics: {
178
+ prototype: ITextMetrics
179
+ new(): ITextMetrics
180
+ }
181
+
182
+ interface CanvasText {
183
+ fillText(text: string, x: number, y: number, maxWidth?: number): void
184
+ measureText(text: string): ITextMetrics
185
+ strokeText(text: string, x: number, y: number, maxWidth?: number): void
186
+ }
187
+
188
+ interface CanvasTextDrawingStyles {
189
+ direction: CanvasDirection
190
+ font: string
191
+ textAlign: CanvasTextAlign
192
+ textBaseline: CanvasTextBaseline
193
+ }
194
+
195
+ interface CanvasTransform {
196
+ getTransform(): DOMMatrix
197
+ resetTransform(): void
198
+ rotate(angle: number): void
199
+ scale(x: number, y: number): void
200
+ setTransform(a: number, b: number, c: number, d: number, e: number, f: number): void
201
+ setTransform(transform?: DOMMatrix2DInit): void
202
+ transform(a: number, b: number, c: number, d: number, e: number, f: number): void
203
+ translate(x: number, y: number): void
204
+ }
205
+
206
+
207
+
208
+ interface DOMMatrix2DInit {
209
+ a?: number
210
+ b?: number
211
+ c?: number
212
+ d?: number
213
+ e?: number
214
+ f?: number
215
+ m11?: number
216
+ m12?: number
217
+ m21?: number
218
+ m22?: number
219
+ m41?: number
220
+ m42?: number
221
+ }
222
+
223
+ interface DOMMatrixInit extends DOMMatrix2DInit {
224
+ is2D?: boolean
225
+ m13?: number
226
+ m14?: number
227
+ m23?: number
228
+ m24?: number
229
+ m31?: number
230
+ m32?: number
231
+ m33?: number
232
+ m34?: number
233
+ m43?: number
234
+ m44?: number
235
+ }
236
+
237
+ interface DOMMatrixReadOnly {
238
+ readonly a: number
239
+ readonly b: number
240
+ readonly c: number
241
+ readonly d: number
242
+ readonly e: number
243
+ readonly f: number
244
+ readonly is2D: boolean
245
+ readonly isIdentity: boolean
246
+ readonly m11: number
247
+ readonly m12: number
248
+ readonly m13: number
249
+ readonly m14: number
250
+ readonly m21: number
251
+ readonly m22: number
252
+ readonly m23: number
253
+ readonly m24: number
254
+ readonly m31: number
255
+ readonly m32: number
256
+ readonly m33: number
257
+ readonly m34: number
258
+ readonly m41: number
259
+ readonly m42: number
260
+ readonly m43: number
261
+ readonly m44: number
262
+ flipX(): DOMMatrix
263
+ flipY(): DOMMatrix
264
+ inverse(): DOMMatrix
265
+ multiply(other?: DOMMatrixInit): DOMMatrix
266
+ rotate(rotX?: number, rotY?: number, rotZ?: number): DOMMatrix
267
+ rotateAxisAngle(x?: number, y?: number, z?: number, angle?: number): DOMMatrix
268
+ rotateFromVector(x?: number, y?: number): DOMMatrix
269
+ scale(scaleX?: number, scaleY?: number, scaleZ?: number, originX?: number, originY?: number, originZ?: number): DOMMatrix
270
+ scale3d(scale?: number, originX?: number, originY?: number, originZ?: number): DOMMatrix
271
+ scaleNonUniform(scaleX?: number, scaleY?: number): DOMMatrix
272
+ skewX(sx?: number): DOMMatrix
273
+ skewY(sy?: number): DOMMatrix
274
+ toFloat32Array(): Float32Array
275
+ toFloat64Array(): Float64Array
276
+ toJSON(): any
277
+ transformPoint(point?: DOMPointInit): DOMPoint
278
+ translate(tx?: number, ty?: number, tz?: number): DOMMatrix
279
+ toString(): string
280
+ }
281
+
282
+ declare var DOMMatrixReadOnly: {
283
+ prototype: DOMMatrixReadOnly
284
+ new(init?: string | number[]): DOMMatrixReadOnly
285
+ fromFloat32Array(array32: Float32Array): DOMMatrixReadOnly
286
+ fromFloat64Array(array64: Float64Array): DOMMatrixReadOnly
287
+ fromMatrix(other?: DOMMatrixInit): DOMMatrixReadOnly
288
+ toString(): string
289
+ }
290
+
291
+ interface DOMMatrix extends DOMMatrixReadOnly {
292
+ a: number
293
+ b: number
294
+ c: number
295
+ d: number
296
+ e: number
297
+ f: number
298
+ m11: number
299
+ m12: number
300
+ m13: number
301
+ m14: number
302
+ m21: number
303
+ m22: number
304
+ m23: number
305
+ m24: number
306
+ m31: number
307
+ m32: number
308
+ m33: number
309
+ m34: number
310
+ m41: number
311
+ m42: number
312
+ m43: number
313
+ m44: number
314
+ invertSelf(): DOMMatrix
315
+ multiplySelf(other?: DOMMatrixInit): DOMMatrix
316
+ preMultiplySelf(other?: DOMMatrixInit): DOMMatrix
317
+ rotateAxisAngleSelf(x?: number, y?: number, z?: number, angle?: number): DOMMatrix
318
+ rotateFromVectorSelf(x?: number, y?: number): DOMMatrix
319
+ rotateSelf(rotX?: number, rotY?: number, rotZ?: number): DOMMatrix
320
+ scale3dSelf(scale?: number, originX?: number, originY?: number, originZ?: number): DOMMatrix
321
+ scaleSelf(scaleX?: number, scaleY?: number, scaleZ?: number, originX?: number, originY?: number, originZ?: number): DOMMatrix
322
+ setMatrixValue(transformList: string): DOMMatrix
323
+ skewXSelf(sx?: number): DOMMatrix
324
+ skewYSelf(sy?: number): DOMMatrix
325
+ translateSelf(tx?: number, ty?: number, tz?: number): DOMMatrix
326
+ }
327
+
328
+ declare var DOMMatrix: {
329
+ prototype: DOMMatrix
330
+ new(init?: string | number[]): DOMMatrix
331
+ fromFloat32Array(array32: Float32Array): DOMMatrix
332
+ fromFloat64Array(array64: Float64Array): DOMMatrix
333
+ fromMatrix(other?: DOMMatrixInit): DOMMatrix
334
+ }
@@ -0,0 +1,10 @@
1
+ import { IScreenSizeData, ILeaferCanvas } from '@leafer/interface'
2
+
3
+ export interface ICanvasManager {
4
+ add(canvas: ILeaferCanvas): void
5
+ get(size: IScreenSizeData): ILeaferCanvas
6
+ recycle(old: ILeaferCanvas): void
7
+ clearRecycled(): void
8
+ clear(): void
9
+ destroy(): void
10
+ }
@@ -0,0 +1,9 @@
1
+ import { ILeaf } from '../display/ILeaf'
2
+ import { IScreenSizeData } from '../math/IMath'
3
+ import { ICanvasManager } from './ICanvasManager'
4
+ import { IHitCanvas } from './ILeaferCanvas'
5
+
6
+ export interface IHitCanvasManager extends ICanvasManager {
7
+ getPathType(leaf: ILeaf): IHitCanvas
8
+ getImageType(leaf: ILeaf, size: IScreenSizeData): IHitCanvas
9
+ }
@@ -0,0 +1,205 @@
1
+ import { IObject } from '../data/IData'
2
+ import { IBounds, IMatrixData, IBoundsData, IAutoBoundsData, IAutoBounds, IScreenSizeData, IMatrixWithBoundsData, IPointData } from '../math/IMath'
3
+ import { ICanvasContext2D, IWindingRule, IPath2D, ITextMetrics, CanvasGradient, CanvasPattern } from './ICanvas'
4
+ import { IResizeEventListener } from '../event/IEvent'
5
+ import { IPathDrawer } from '../path/IPathDrawer'
6
+ import { InnerId } from '../event/IEventer'
7
+ import { ICanvasManager } from './ICanvasManager'
8
+ import { ICursorType } from '../display/ILeaf'
9
+
10
+ export interface ILeaferCanvasConfig extends IAutoBoundsData {
11
+ view?: string | IObject
12
+ fill?: string
13
+ pixelRatio?: number
14
+ smooth?: boolean
15
+ hittable?: boolean
16
+ webgl?: boolean
17
+ }
18
+
19
+ export type IHitCanvasConfig = ILeaferCanvasConfig
20
+
21
+ export interface ICanvasStrokeOptions {
22
+ strokeWidth?: number
23
+ strokeAlign?: string
24
+
25
+ strokeCap?: string // lineCap
26
+ strokeJoin?: string // lineJoin
27
+ dashPattern?: number[] // lineDash
28
+ dashOffset?: number // lineDashOffset
29
+ miterLimit?: number
30
+ }
31
+
32
+ export interface ICanvasAttr extends ICanvasStrokeOptions, IObject {
33
+
34
+ smooth: boolean // imageSmoothingEnabled: boolean
35
+ smoothLevel: string // imageSmoothingQuality: string
36
+ opacity: number // globalAlpha: number
37
+ blendMode: string // globalCompositeOperation: string
38
+
39
+ fillStyle: string | object
40
+
41
+ strokeStyle: string | object
42
+ strokeWidth: number // lineWidth
43
+
44
+ shadowBlur: number
45
+ shadowColor: string
46
+ shadowOffsetX: number
47
+ shadowOffsetY: number
48
+
49
+ filter: string
50
+
51
+ font: string
52
+ fontKerning: string
53
+ fontStretch: string
54
+ fontVariantCaps: string
55
+
56
+ textAlign: string
57
+ textBaseline: string
58
+ textRendering: string
59
+ wordSpacing: string
60
+ letterSpacing: string
61
+
62
+ direction: string
63
+ }
64
+
65
+ interface ICanvasMethod {
66
+ save(): void
67
+ restore(): void
68
+
69
+ fill(path?: IPath2D | IWindingRule, rule?: IWindingRule): void
70
+ stroke(path?: IPath2D): void
71
+ clip(path?: IPath2D | IWindingRule, rule?: IWindingRule): void
72
+
73
+ fillRect(x: number, y: number, width: number, height: number): void
74
+ strokeRect(x: number, y: number, width: number, height: number): void
75
+ clearRect(x: number, y: number, width: number, height: number): void
76
+
77
+ transform(a: number | IMatrixData, b?: number, c?: number, d?: number, e?: number, f?: number): void
78
+ translate(x: number, y: number): void
79
+ scale(x: number, y: number): void
80
+ rotate(angle: number): void
81
+
82
+ drawImage(image: CanvasImageSource, dx: number, dy: number): void
83
+ drawImage(image: CanvasImageSource, dx: number, dy: number, dw: number, dh: number): void
84
+ drawImage(image: CanvasImageSource, sx: number, sy: number, sw: number, sh: number, dx: number, dy: number, dw: number, dh: number): void
85
+
86
+ setTransform(a: number | IMatrixData, b?: number, c?: number, d?: number, e?: number, f?: number): void
87
+ getTransform(): IMatrixData
88
+ resetTransform(): void
89
+
90
+ createConicGradient(startAngle: number, x: number, y: number): CanvasGradient
91
+ createLinearGradient(x0: number, y0: number, x1: number, y1: number): CanvasGradient
92
+ createPattern(image: CanvasImageSource, repetition: string | null): CanvasPattern | null
93
+ createRadialGradient(x0: number, y0: number, r0: number, x1: number, y1: number, r1: number): CanvasGradient
94
+
95
+ // text
96
+
97
+ fillText(text: string, x: number, y: number, maxWidth?: number): void
98
+ measureText(text: string): ITextMetrics
99
+ strokeText(text: string, x: number, y: number, maxWidth?: number): void
100
+
101
+ // custom
102
+
103
+ saveBlendMode(blendMode?: string): void
104
+ restoreBlendMode(): void
105
+
106
+ hitFill(point: IPointData, fillRule?: string): boolean
107
+ hitStroke(point: IPointData, strokeWidth?: number): boolean
108
+
109
+ setStroke(strokeStyle: string | object, strokeWidth: number, options?: ICanvasStrokeOptions): void
110
+ setStrokeOptions(options: ICanvasStrokeOptions): void
111
+
112
+ setWorld(matrix: IMatrixData, parentMatrix?: IMatrixData): void
113
+ useWorldTransform(worldTransform?: IMatrixData): void
114
+
115
+ setWorldShadow(x: number, y: number, blur: number, color?: string): void
116
+ setWorldBlur(blur: number): void
117
+
118
+ copyWorld(canvas: ILeaferCanvas, fromBounds?: IBoundsData, toBounds?: IBoundsData, blendMode?: string): void
119
+ copyWorldByReset(canvas: ILeaferCanvas, from?: IBoundsData, to?: IBoundsData, blendMode?: string): void
120
+ copyWorldToInner(canvas: ILeaferCanvas, fromWorld: IMatrixWithBoundsData, toInnerBounds: IBoundsData, blendMode?: string): void
121
+
122
+ useMask(maskCanvas: ILeaferCanvas, fromBounds?: IBoundsData, toBounds?: IBoundsData): void
123
+ useEraser(eraserCanvas: ILeaferCanvas, fromBounds?: IBoundsData, toBounds?: IBoundsData): void
124
+
125
+ fillWorld(bounds: IBoundsData, color: string | object, blendMode?: string): void
126
+ strokeWorld(bounds: IBoundsData, color: string | object, blendMode?: string): void
127
+ clipWorld(bounds: IBoundsData, ceilPixel?: boolean): void
128
+ clearWorld(bounds: IBoundsData, ceilPixel?: boolean): void
129
+
130
+ clear(): void
131
+ }
132
+
133
+ export interface ILeaferCanvas extends ICanvasAttr, ICanvasMethod, IPathDrawer {
134
+
135
+ readonly innerId: InnerId
136
+ name: string
137
+
138
+ manager: ICanvasManager
139
+
140
+ width: number
141
+ height: number
142
+
143
+ pixelRatio: number
144
+ readonly pixelWidth: number
145
+ readonly pixelHeight: number
146
+
147
+ readonly allowBackgroundColor?: boolean
148
+ backgroundColor?: string
149
+ hittable?: boolean
150
+
151
+ bounds: IBounds
152
+ clientBounds: IBoundsData
153
+
154
+ config: ILeaferCanvasConfig
155
+
156
+ autoLayout: boolean
157
+
158
+ view: any
159
+ parentView: any
160
+
161
+ unreal?: boolean
162
+
163
+ context: ICanvasContext2D
164
+
165
+ recycled?: boolean
166
+
167
+ worldTransform: IMatrixData
168
+
169
+ init(): void
170
+
171
+ toBlob(type?: string, quality?: number): Promise<IBlob>
172
+ toDataURL(type?: string, quality?: number): string | Promise<string>
173
+ saveAs(filename: string, quality?: number): Promise<boolean>
174
+
175
+ startAutoLayout(autoBounds: IAutoBounds, listener: IResizeEventListener): void
176
+ stopAutoLayout(): void
177
+
178
+ resize(size: IScreenSizeData): void
179
+ updateViewSize(): void
180
+ updateClientBounds(): void
181
+
182
+ setCursor(cursor: ICursorType | ICursorType[]): void
183
+
184
+ // other
185
+ isSameSize(options: ILeaferCanvasConfig): boolean
186
+ getSameCanvas(useSameWorldTransform?: boolean): ILeaferCanvas
187
+ getBiggerCanvas(addWidth: number, addHeight: number): ILeaferCanvas
188
+ recycle(): void
189
+
190
+ updateRender(): void
191
+ unrealCanvas(): void
192
+ destroy(): void
193
+ }
194
+
195
+
196
+ export interface IHitCanvas extends ILeaferCanvas {
197
+
198
+ }
199
+
200
+
201
+ export interface IBlobFunction {
202
+ (blob: IBlob | null): void
203
+ }
204
+
205
+ export type IBlob = any