@leafer/interface 1.0.0-alpha.1

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 (39) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +1 -0
  3. package/package.json +19 -0
  4. package/src/app/ILeafer.ts +74 -0
  5. package/src/app/ISupperLeafer.ts +5 -0
  6. package/src/canvas/ICanvas.ts +344 -0
  7. package/src/canvas/ICanvasManager.ts +10 -0
  8. package/src/canvas/ICanvasPathDrawer.ts +16 -0
  9. package/src/canvas/IHitCanvasManager.ts +10 -0
  10. package/src/canvas/ILeaferCanvas.ts +163 -0
  11. package/src/data/IData.ts +27 -0
  12. package/src/data/ILeafData.ts +17 -0
  13. package/src/data/IList.ts +45 -0
  14. package/src/display/IBranch.ts +9 -0
  15. package/src/display/ILeaf.ts +191 -0
  16. package/src/display/IView.ts +9 -0
  17. package/src/display/module/ILeafBounds.ts +21 -0
  18. package/src/display/module/ILeafDataProxy.ts +11 -0
  19. package/src/display/module/ILeafEventer.ts +18 -0
  20. package/src/display/module/ILeafHit.ts +10 -0
  21. package/src/display/module/ILeafMatrix.ts +8 -0
  22. package/src/display/module/ILeafRender.ts +17 -0
  23. package/src/event/IEvent.ts +89 -0
  24. package/src/event/IEventer.ts +43 -0
  25. package/src/event/IUIEvent.ts +69 -0
  26. package/src/function/IFunction.ts +13 -0
  27. package/src/image/IImageManager.ts +3 -0
  28. package/src/image/ILeaferImage.ts +8 -0
  29. package/src/index.ts +48 -0
  30. package/src/interaction/IInteraction.ts +53 -0
  31. package/src/layout/ILeafLayout.ts +87 -0
  32. package/src/layouter/ILayouter.ts +52 -0
  33. package/src/math/IMath.ts +141 -0
  34. package/src/path/IPathCommand.ts +50 -0
  35. package/src/platform/IPlatform.ts +7 -0
  36. package/src/plugin/IPlugin.ts +11 -0
  37. package/src/renderer/IRenderer.ts +37 -0
  38. package/src/selector/ISelector.ts +28 -0
  39. package/src/watcher/IWatcher.ts +25 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2023-present, Chao (Leafer) Wan
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
package/README.md ADDED
@@ -0,0 +1 @@
1
+ # @leafer/interface
package/package.json ADDED
@@ -0,0 +1,19 @@
1
+ {
2
+ "name": "@leafer/interface",
3
+ "version": "1.0.0-alpha.1",
4
+ "description": "@leafer/interface",
5
+ "author": "Chao (Leafer) Wan",
6
+ "license": "MIT",
7
+ "main": "src/index.ts",
8
+ "files": ["src"],
9
+ "repository": {
10
+ "type": "git",
11
+ "url": "https://github.com/leaferjs/leafer.git"
12
+ },
13
+ "homepage": "https://github.com/leaferjs/leafer/tree/main/packages/interface",
14
+ "bugs": "https://github.com/leaferjs/leafer/issues",
15
+ "keywords": [
16
+ "leafer",
17
+ "leaferjs"
18
+ ]
19
+ }
@@ -0,0 +1,74 @@
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 } from '../selector/ISelector'
6
+ import { IInteraction, IInteractionConfig } from '../interaction/IInteraction'
7
+ import { IWatcher } from '../watcher/IWatcher'
8
+ import { IAutoBounds, IScreenSizeData } from '../math/IMath'
9
+ import { ICanvasManager } from '../canvas/ICanvasManager'
10
+ import { IHitCanvasManager } from '../canvas/IHitCanvasManager'
11
+ import { IImageManager } from '../image/IImageManager'
12
+ import { IObject } from '../data/IData'
13
+ import { IZoomView } from '../display/IView'
14
+ import { ISupperLeafer } from './ISupperLeafer'
15
+ import { ILeaferImage, ILeaferImageConfig } from '../image/ILeaferImage'
16
+ import { IEvent } from '../event/IEvent'
17
+
18
+
19
+ export interface ILeaferConfig extends IRendererConfig, ILeaferCanvasConfig, IInteractionConfig, ILayouterConfig {
20
+ start?: boolean
21
+ zoom?: boolean
22
+ move?: boolean
23
+ }
24
+
25
+ export interface ILeafer extends IZoomView {
26
+
27
+ creator: ICreator
28
+
29
+ readonly isSupperLeafer: boolean
30
+ parent?: ISupperLeafer
31
+
32
+ running: boolean
33
+
34
+ autoLayout?: IAutoBounds
35
+
36
+ canvas: ILeaferCanvas
37
+ renderer: IRenderer
38
+
39
+ watcher: IWatcher
40
+ layouter: ILayouter
41
+
42
+ selector?: ISelector
43
+ interaction?: IInteraction
44
+
45
+ canvasManager: ICanvasManager
46
+ hitCanvasManager?: IHitCanvasManager
47
+ imageManager: IImageManager
48
+
49
+ start(): void
50
+ stop(): void
51
+
52
+ resize(size: IScreenSizeData): void
53
+ }
54
+
55
+ export interface ICreator {
56
+ ui?(tag: string, data?: IObject): ILeaf
57
+ event?(type: string, event: IEvent): IEvent
58
+
59
+ image?(options?: ILeaferImageConfig): ILeaferImage
60
+ canvas?(options?: ILeaferCanvasConfig, manager?: ICanvasManager): ILeaferCanvas
61
+ hitCanvas?(options?: IHitCanvasConfig, manager?: ICanvasManager): IHitCanvas
62
+
63
+ watcher?(target: ILeaf): IWatcher
64
+ layouter?(target: ILeaf): ILayouter
65
+ renderer?(target: ILeaf, canvas: ILeaferCanvas, options: IRendererConfig): IRenderer
66
+ selector?(target: ILeaf): ISelector
67
+
68
+ interaction?(target: ILeaf, canvas: ILeaferCanvas, selector: ISelector, options?: IInteractionConfig): IInteraction
69
+ }
70
+
71
+ export interface IUICreator {
72
+ register(UI: IObject): void
73
+ get(tag: string, data: IObject): IObject
74
+ }
@@ -0,0 +1,5 @@
1
+ import { ILeafer } from './ILeafer'
2
+
3
+ export interface ISupperLeafer extends ILeafer {
4
+ children: ILeafer[]
5
+ }
@@ -0,0 +1,344 @@
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 CanvasFillRule = '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
+ /** This Canvas 2D API interface is used to declare a path that can then be used on a CanvasRenderingContext2D object. The path methods of the CanvasRenderingContext2D interface are also present on this interface, which gives you the convenience of being able to retain and replay your path whenever desired. */
14
+ interface Path2D extends CanvasPath {
15
+ /** Adds to the path the path given by the argument. */
16
+ addPath(path: Path2D, transform?: DOMMatrix2DInit): void
17
+ }
18
+
19
+ export declare var Path2D: {
20
+ prototype: Path2D
21
+ new(path?: Path2D | string): Path2D
22
+ }
23
+
24
+ interface CanvasCompositing {
25
+ globalAlpha: number
26
+ globalCompositeOperation: GlobalCompositeOperation
27
+ }
28
+
29
+ type CanvasImageSource = any
30
+ interface CanvasDrawImage {
31
+ drawImage(image: CanvasImageSource, dx: number, dy: number): void
32
+ drawImage(image: CanvasImageSource, dx: number, dy: number, dw: number, dh: number): void
33
+ drawImage(image: CanvasImageSource, sx: number, sy: number, sw: number, sh: number, dx: number, dy: number, dw: number, dh: number): void
34
+ }
35
+
36
+ interface CanvasDrawPath {
37
+ beginPath(): void
38
+ clip(fillRule?: CanvasFillRule): void
39
+ clip(path: Path2D, fillRule?: CanvasFillRule): void
40
+ fill(fillRule?: CanvasFillRule): void
41
+ fill(path: Path2D, fillRule?: CanvasFillRule): void
42
+ isPointInPath(x: number, y: number, fillRule?: CanvasFillRule): boolean
43
+ isPointInPath(path: Path2D, x: number, y: number, fillRule?: CanvasFillRule): boolean
44
+ isPointInStroke(x: number, y: number): boolean
45
+ isPointInStroke(path: Path2D, x: number, y: number): boolean
46
+ stroke(): void
47
+ stroke(path: Path2D): void
48
+ }
49
+
50
+ interface CanvasFillStrokeStyles {
51
+ fillStyle: string | CanvasGradient | CanvasPattern
52
+ strokeStyle: string | CanvasGradient | CanvasPattern
53
+ createConicGradient(startAngle: number, x: number, y: number): CanvasGradient
54
+ createLinearGradient(x0: number, y0: number, x1: number, y1: number): CanvasGradient
55
+ createPattern(image: CanvasImageSource, repetition: string | null): CanvasPattern | null
56
+ createRadialGradient(x0: number, y0: number, r0: number, x1: number, y1: number, r1: number): CanvasGradient
57
+ }
58
+
59
+ interface CanvasFilters {
60
+ filter: string
61
+ }
62
+
63
+ /** An opaque object describing a gradient. It is returned by the methods CanvasRenderingContext2D.createLinearGradient() or CanvasRenderingContext2D.createRadialGradient(). */
64
+ export interface CanvasGradient {
65
+ /**
66
+ * Adds a color stop with the given color to the gradient at the given offset. 0.0 is the offset at one end of the gradient, 1.0 is the offset at the other end.
67
+ *
68
+ * Throws an 'IndexSizeError' DOMException if the offset is out of range. Throws a 'SyntaxError' DOMException if the color cannot be parsed.
69
+ */
70
+ addColorStop(offset: number, color: string): void
71
+ }
72
+
73
+ declare var CanvasGradient: {
74
+ prototype: CanvasGradient
75
+ new(): CanvasGradient
76
+ }
77
+
78
+ interface CanvasImageData {
79
+ createImageData(sw: number, sh: number, settings?: ImageDataSettings): ImageData
80
+ createImageData(imagedata: ImageData): ImageData
81
+ getImageData(sx: number, sy: number, sw: number, sh: number, settings?: ImageDataSettings): ImageData
82
+ putImageData(imagedata: ImageData, dx: number, dy: number): void
83
+ putImageData(imagedata: ImageData, dx: number, dy: number, dirtyX: number, dirtyY: number, dirtyWidth: number, dirtyHeight: number): void
84
+ }
85
+
86
+ interface CanvasImageSmoothing {
87
+ imageSmoothingEnabled: boolean
88
+ imageSmoothingQuality: ImageSmoothingQuality
89
+ }
90
+
91
+ interface CanvasPath {
92
+ arc(x: number, y: number, radius: number, startAngle: number, endAngle: number, counterclockwise?: boolean): void
93
+ arcTo(x1: number, y1: number, x2: number, y2: number, radius: number): void
94
+ bezierCurveTo(cp1x: number, cp1y: number, cp2x: number, cp2y: number, x: number, y: number): void
95
+ closePath(): void
96
+ ellipse(x: number, y: number, radiusX: number, radiusY: number, rotation: number, startAngle: number, endAngle: number, counterclockwise?: boolean): void
97
+ lineTo(x: number, y: number): void
98
+ moveTo(x: number, y: number): void
99
+ quadraticCurveTo(cpx: number, cpy: number, x: number, y: number): void
100
+ rect(x: number, y: number, w: number, h: number): void
101
+ roundRect(x: number, y: number, width: number, height: number, radius?: number | number[]): void
102
+ }
103
+
104
+ interface CanvasPathDrawingStyles {
105
+ lineCap: CanvasLineCap
106
+ lineDashOffset: number
107
+ lineJoin: CanvasLineJoin
108
+ lineWidth: number
109
+ miterLimit: number
110
+ getLineDash(): number[]
111
+ setLineDash(segments: number[]): void
112
+ }
113
+
114
+ /** An opaque object describing a pattern, based on an image, a canvas, or a video, created by the CanvasRenderingContext2D.createPattern() method. */
115
+ export interface CanvasPattern {
116
+ /** Sets the transformation matrix that will be used when rendering the pattern during a fill or stroke painting operation. */
117
+ setTransform(transform?: DOMMatrix2DInit): void
118
+ }
119
+
120
+ declare var CanvasPattern: {
121
+ prototype: CanvasPattern
122
+ new(): CanvasPattern
123
+ }
124
+
125
+ interface CanvasRect {
126
+ clearRect(x: number, y: number, w: number, h: number): void
127
+ fillRect(x: number, y: number, w: number, h: number): void
128
+ strokeRect(x: number, y: number, w: number, h: number): void
129
+ }
130
+
131
+ type PredefinedColorSpace = 'display-p3' | 'srgb'
132
+ interface CanvasRenderingContext2DSettings {
133
+ alpha?: boolean
134
+ colorSpace?: PredefinedColorSpace
135
+ desynchronized?: boolean
136
+ willReadFrequently?: boolean
137
+ }
138
+
139
+ /** The CanvasRenderingContext2D interface, part of the Canvas API, provides the 2D rendering context for the drawing surface of a <canvas> element. It is used for drawing shapes, text, images, and other objects. */
140
+ export interface CanvasRenderingContext2D extends CanvasCompositing, CanvasDrawImage, CanvasDrawPath, CanvasFillStrokeStyles, CanvasFilters, CanvasImageData, CanvasImageSmoothing, CanvasPath, CanvasPathDrawingStyles, CanvasRect, CanvasShadowStyles, CanvasState, CanvasText, CanvasTextDrawingStyles, CanvasTransform, CanvasUserInterface {
141
+ readonly canvas: HTMLCanvasElement
142
+ getContextAttributes(): CanvasRenderingContext2DSettings
143
+ }
144
+
145
+ declare var CanvasRenderingContext2D: {
146
+ prototype: CanvasRenderingContext2D
147
+ new(): CanvasRenderingContext2D
148
+ }
149
+
150
+ interface CanvasShadowStyles {
151
+ shadowBlur: number
152
+ shadowColor: string
153
+ shadowOffsetX: number
154
+ shadowOffsetY: number
155
+ }
156
+
157
+ interface CanvasState {
158
+ restore(): void
159
+ save(): void
160
+ }
161
+
162
+ interface CanvasUserInterface {
163
+ drawFocusIfNeeded(element: any): void
164
+ drawFocusIfNeeded(path: Path2D, element: any): void
165
+ }
166
+
167
+
168
+ /** The dimensions of a piece of text in the canvas, as created by the CanvasRenderingContext2D.measureText() method. */
169
+ export interface TextMetrics {
170
+ /** Returns the measurement described below. */
171
+ readonly actualBoundingBoxAscent: number
172
+ /** Returns the measurement described below. */
173
+ readonly actualBoundingBoxDescent: number
174
+ /** Returns the measurement described below. */
175
+ readonly actualBoundingBoxLeft: number
176
+ /** Returns the measurement described below. */
177
+ readonly actualBoundingBoxRight: number
178
+ /** Returns the measurement described below. */
179
+ readonly fontBoundingBoxAscent: number
180
+ /** Returns the measurement described below. */
181
+ readonly fontBoundingBoxDescent: number
182
+ /** Returns the measurement described below. */
183
+ readonly width: number
184
+ }
185
+
186
+ declare var TextMetrics: {
187
+ prototype: TextMetrics
188
+ new(): TextMetrics
189
+ }
190
+
191
+ interface CanvasText {
192
+ fillText(text: string, x: number, y: number, maxWidth?: number): void
193
+ measureText(text: string): TextMetrics
194
+ strokeText(text: string, x: number, y: number, maxWidth?: number): void
195
+ }
196
+
197
+ interface CanvasTextDrawingStyles {
198
+ direction: CanvasDirection
199
+ font: string
200
+ textAlign: CanvasTextAlign
201
+ textBaseline: CanvasTextBaseline
202
+ }
203
+
204
+ interface CanvasTransform {
205
+ getTransform(): DOMMatrix
206
+ resetTransform(): void
207
+ rotate(angle: number): void
208
+ scale(x: number, y: number): void
209
+ setTransform(a: number, b: number, c: number, d: number, e: number, f: number): void
210
+ setTransform(transform?: DOMMatrix2DInit): void
211
+ transform(a: number, b: number, c: number, d: number, e: number, f: number): void
212
+ translate(x: number, y: number): void
213
+ }
214
+
215
+
216
+
217
+ interface DOMMatrix2DInit {
218
+ a?: number
219
+ b?: number
220
+ c?: number
221
+ d?: number
222
+ e?: number
223
+ f?: number
224
+ m11?: number
225
+ m12?: number
226
+ m21?: number
227
+ m22?: number
228
+ m41?: number
229
+ m42?: number
230
+ }
231
+
232
+ interface DOMMatrixInit extends DOMMatrix2DInit {
233
+ is2D?: boolean
234
+ m13?: number
235
+ m14?: number
236
+ m23?: number
237
+ m24?: number
238
+ m31?: number
239
+ m32?: number
240
+ m33?: number
241
+ m34?: number
242
+ m43?: number
243
+ m44?: number
244
+ }
245
+
246
+ interface DOMMatrixReadOnly {
247
+ readonly a: number
248
+ readonly b: number
249
+ readonly c: number
250
+ readonly d: number
251
+ readonly e: number
252
+ readonly f: number
253
+ readonly is2D: boolean
254
+ readonly isIdentity: boolean
255
+ readonly m11: number
256
+ readonly m12: number
257
+ readonly m13: number
258
+ readonly m14: number
259
+ readonly m21: number
260
+ readonly m22: number
261
+ readonly m23: number
262
+ readonly m24: number
263
+ readonly m31: number
264
+ readonly m32: number
265
+ readonly m33: number
266
+ readonly m34: number
267
+ readonly m41: number
268
+ readonly m42: number
269
+ readonly m43: number
270
+ readonly m44: number
271
+ flipX(): DOMMatrix
272
+ flipY(): DOMMatrix
273
+ inverse(): DOMMatrix
274
+ multiply(other?: DOMMatrixInit): DOMMatrix
275
+ rotate(rotX?: number, rotY?: number, rotZ?: number): DOMMatrix
276
+ rotateAxisAngle(x?: number, y?: number, z?: number, angle?: number): DOMMatrix
277
+ rotateFromVector(x?: number, y?: number): DOMMatrix
278
+ scale(scaleX?: number, scaleY?: number, scaleZ?: number, originX?: number, originY?: number, originZ?: number): DOMMatrix
279
+ scale3d(scale?: number, originX?: number, originY?: number, originZ?: number): DOMMatrix
280
+ /** @deprecated */
281
+ scaleNonUniform(scaleX?: number, scaleY?: number): DOMMatrix
282
+ skewX(sx?: number): DOMMatrix
283
+ skewY(sy?: number): DOMMatrix
284
+ toFloat32Array(): Float32Array
285
+ toFloat64Array(): Float64Array
286
+ toJSON(): any
287
+ transformPoint(point?: DOMPointInit): DOMPoint
288
+ translate(tx?: number, ty?: number, tz?: number): DOMMatrix
289
+ toString(): string
290
+ }
291
+
292
+ declare var DOMMatrixReadOnly: {
293
+ prototype: DOMMatrixReadOnly
294
+ new(init?: string | number[]): DOMMatrixReadOnly
295
+ fromFloat32Array(array32: Float32Array): DOMMatrixReadOnly
296
+ fromFloat64Array(array64: Float64Array): DOMMatrixReadOnly
297
+ fromMatrix(other?: DOMMatrixInit): DOMMatrixReadOnly
298
+ toString(): string
299
+ }
300
+
301
+ interface DOMMatrix extends DOMMatrixReadOnly {
302
+ a: number
303
+ b: number
304
+ c: number
305
+ d: number
306
+ e: number
307
+ f: number
308
+ m11: number
309
+ m12: number
310
+ m13: number
311
+ m14: number
312
+ m21: number
313
+ m22: number
314
+ m23: number
315
+ m24: number
316
+ m31: number
317
+ m32: number
318
+ m33: number
319
+ m34: number
320
+ m41: number
321
+ m42: number
322
+ m43: number
323
+ m44: number
324
+ invertSelf(): DOMMatrix
325
+ multiplySelf(other?: DOMMatrixInit): DOMMatrix
326
+ preMultiplySelf(other?: DOMMatrixInit): DOMMatrix
327
+ rotateAxisAngleSelf(x?: number, y?: number, z?: number, angle?: number): DOMMatrix
328
+ rotateFromVectorSelf(x?: number, y?: number): DOMMatrix
329
+ rotateSelf(rotX?: number, rotY?: number, rotZ?: number): DOMMatrix
330
+ scale3dSelf(scale?: number, originX?: number, originY?: number, originZ?: number): DOMMatrix
331
+ scaleSelf(scaleX?: number, scaleY?: number, scaleZ?: number, originX?: number, originY?: number, originZ?: number): DOMMatrix
332
+ setMatrixValue(transformList: string): DOMMatrix
333
+ skewXSelf(sx?: number): DOMMatrix
334
+ skewYSelf(sy?: number): DOMMatrix
335
+ translateSelf(tx?: number, ty?: number, tz?: number): DOMMatrix
336
+ }
337
+
338
+ declare var DOMMatrix: {
339
+ prototype: DOMMatrix
340
+ new(init?: string | number[]): DOMMatrix
341
+ fromFloat32Array(array32: Float32Array): DOMMatrix
342
+ fromFloat64Array(array64: Float64Array): DOMMatrix
343
+ fromMatrix(other?: DOMMatrixInit): DOMMatrix
344
+ }
@@ -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
+ destory(): void
10
+ }
@@ -0,0 +1,16 @@
1
+ export interface ICanvasDrawPath {
2
+ beginPath?(): void
3
+
4
+ moveTo(x: number, y: number): void
5
+ lineTo(x: number, y: number): void
6
+ bezierCurveTo(cp1x: number, cp1y: number, cp2x: number, cp2y: number, x: number, y: number): void
7
+ quadraticCurveTo(cpx: number, cpy: number, x: number, y: number): void
8
+ closePath(): void
9
+
10
+ arc(x: number, y: number, radius: number, startAngle: number, endAngle: number, counterclockwise?: boolean): void
11
+ arcTo(x1: number, y1: number, x2: number, y2: number, radius: number): void
12
+ ellipse(x: number, y: number, radiusX: number, radiusY: number, rotation: number, startAngle: number, endAngle: number, counterclockwise?: boolean): void
13
+
14
+ rect(x: number, y: number, width: number, height: number): void
15
+ roundRect?(x: number, y: number, width: number, height: number, radius?: number | number[]): void
16
+ }
@@ -0,0 +1,10 @@
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
+ destory(): void
10
+ }
@@ -0,0 +1,163 @@
1
+ import { IObject } from '../data/IData'
2
+ import { IBounds, IMatrixData, IBoundsData, IAutoBoundsData, IAutoBounds, IScreenSizeData, IMatrixWithBoundsData, IPointData } from '../math/IMath'
3
+ import { CanvasRenderingContext2D, CanvasFillRule, Path2D, TextMetrics, CanvasGradient, CanvasPattern } from './ICanvas'
4
+ import { IResizeEventListener } from '../event/IEvent'
5
+ import { ICanvasDrawPath } from './ICanvasPathDrawer'
6
+ import { InnerId } from '../event/IEventer'
7
+ import { ICanvasManager } from './ICanvasManager'
8
+
9
+ export interface ILeaferCanvasContext extends CanvasRenderingContext2D {
10
+
11
+ }
12
+
13
+ export interface ILeaferCanvasConfig extends IAutoBoundsData {
14
+ view?: string | IObject
15
+ fill?: string
16
+ pixelRatio?: number
17
+ webgl?: boolean
18
+ }
19
+
20
+ export type IHitCanvasConfig = ILeaferCanvasConfig
21
+
22
+ export interface ICanvasStrokeOptions {
23
+ strokeWidth?: number
24
+ strokeAlign?: string
25
+
26
+ strokeCap?: string // lineCap
27
+ strokeJoin?: string // lineJoin
28
+ dashPattern?: number[] // lineDash
29
+ dashOffset?: number // lineDashOffset
30
+ miterLimit?: number
31
+ }
32
+
33
+ export interface ICanvasAttr extends ICanvasStrokeOptions {
34
+
35
+ smooth: boolean // imageSmoothingEnabled: boolean
36
+ smoothLevel: string // imageSmoothingQuality: string
37
+ opacity: number // globalAlpha: number
38
+ blendMode: string // globalCompositeOperation: string
39
+
40
+ fillStyle: string | object
41
+
42
+ strokeStyle: string | object
43
+ strokeWidth: number // lineWidth
44
+
45
+ shadowBlur: number
46
+ shadowColor: string
47
+ shadowOffsetX: number
48
+ shadowOffsetY: number
49
+
50
+ filter: string
51
+
52
+ font: string
53
+ fontKerning: string
54
+ fontStretch: string
55
+ fontVariantCaps: string
56
+
57
+ textAlign: string
58
+ textBaseline: string
59
+ textRendering: string
60
+ wordSpacing: string
61
+ letterSpacing: string
62
+
63
+ direction: string
64
+ }
65
+
66
+ interface ICanvasMethod {
67
+ save(): void
68
+ restore(): void
69
+
70
+ fill(path?: Path2D | CanvasFillRule, rule?: CanvasFillRule): void
71
+ stroke(path?: Path2D): void
72
+ clip(path?: Path2D | CanvasFillRule, rule?: CanvasFillRule): void
73
+
74
+ fillRect(x: number, y: number, width: number, height: number): void
75
+ strokeRect(x: number, y: number, width: number, height: number): void
76
+ clearRect(x: number, y: number, width: number, height: number): void
77
+
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): TextMetrics
99
+ strokeText(text: string, x: number, y: number, maxWidth?: number): void
100
+
101
+ // custom
102
+
103
+ setStroke(strokeStyle: string | object, strokeWidth: number, options?: ICanvasStrokeOptions): void
104
+ setShadow(x: number, y: number, blur: number, color?: string): void
105
+ setBlur(blur: number): void
106
+
107
+
108
+ setWorld(matrix: IMatrixData, parentMatrix?: IMatrixData): void
109
+
110
+
111
+ hitPath(point: IPointData, fillRule?: string): boolean
112
+ hitStroke(point: IPointData): boolean
113
+
114
+ replaceBy(canvas: ILeaferCanvas, fromBounds?: IBoundsData, toBounds?: IBoundsData): void
115
+ copy(canvas: ILeaferCanvas, fromBounds?: IBoundsData, toBounds?: IBoundsData, blendMode?: string): void
116
+ copyWorldToLocal(canvas: ILeaferCanvas, fromWorld: IMatrixWithBoundsData, toLocalBounds: IBoundsData, blendMode?: string): void
117
+ fillBounds(bounds: IBoundsData, color: string | object, blendMode?: string): void
118
+ strokeBounds(bounds: IBoundsData, color: string | object, blendMode?: string): void
119
+ clipBounds(bounds: IBoundsData): void
120
+ clearBounds(bounds: IBoundsData): void
121
+ clear(): void
122
+ }
123
+
124
+ export interface ILeaferCanvas extends ICanvasAttr, ICanvasMethod, ICanvasDrawPath {
125
+
126
+ manager: ICanvasManager
127
+
128
+ readonly innerId: InnerId
129
+
130
+ width: number
131
+ height: number
132
+
133
+ pixelRatio: number
134
+ readonly pixelWidth: number
135
+ readonly pixelHeight: number
136
+
137
+ bounds: IBounds
138
+
139
+ view: unknown
140
+ context: ILeaferCanvasContext
141
+
142
+ recycled?: boolean
143
+
144
+ debug(): void
145
+
146
+ autoLayout(autoBounds: IAutoBounds, listener: IResizeEventListener): void
147
+ stopAutoLayout(): void
148
+
149
+ resize(size: IScreenSizeData): void
150
+ pixel(num: number): number
151
+
152
+ // other
153
+ isSameSize(options: ILeaferCanvasConfig): boolean
154
+ getSameCanvas(useSameTransform?: boolean): ILeaferCanvas
155
+ getBiggerCanvas(addWidth: number, addHeight: number): ILeaferCanvas
156
+ useSameTransform(canvas: ILeaferCanvas): void
157
+ recycle(): void
158
+
159
+ destroy(): void
160
+ }
161
+
162
+
163
+ export type IHitCanvas = ILeaferCanvas