@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.
- package/LICENSE +21 -0
- package/README.md +1 -0
- package/package.json +19 -0
- package/src/app/ILeafer.ts +74 -0
- package/src/app/ISupperLeafer.ts +5 -0
- package/src/canvas/ICanvas.ts +344 -0
- package/src/canvas/ICanvasManager.ts +10 -0
- package/src/canvas/ICanvasPathDrawer.ts +16 -0
- package/src/canvas/IHitCanvasManager.ts +10 -0
- package/src/canvas/ILeaferCanvas.ts +163 -0
- package/src/data/IData.ts +27 -0
- package/src/data/ILeafData.ts +17 -0
- package/src/data/IList.ts +45 -0
- package/src/display/IBranch.ts +9 -0
- package/src/display/ILeaf.ts +191 -0
- package/src/display/IView.ts +9 -0
- package/src/display/module/ILeafBounds.ts +21 -0
- package/src/display/module/ILeafDataProxy.ts +11 -0
- package/src/display/module/ILeafEventer.ts +18 -0
- package/src/display/module/ILeafHit.ts +10 -0
- package/src/display/module/ILeafMatrix.ts +8 -0
- package/src/display/module/ILeafRender.ts +17 -0
- package/src/event/IEvent.ts +89 -0
- package/src/event/IEventer.ts +43 -0
- package/src/event/IUIEvent.ts +69 -0
- package/src/function/IFunction.ts +13 -0
- package/src/image/IImageManager.ts +3 -0
- package/src/image/ILeaferImage.ts +8 -0
- package/src/index.ts +48 -0
- package/src/interaction/IInteraction.ts +53 -0
- package/src/layout/ILeafLayout.ts +87 -0
- package/src/layouter/ILayouter.ts +52 -0
- package/src/math/IMath.ts +141 -0
- package/src/path/IPathCommand.ts +50 -0
- package/src/platform/IPlatform.ts +7 -0
- package/src/plugin/IPlugin.ts +11 -0
- package/src/renderer/IRenderer.ts +37 -0
- package/src/selector/ISelector.ts +28 -0
- 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,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
|