@leafer-ui/display 1.0.0 → 1.0.2
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/package.json +8 -8
- package/src/Box.ts +15 -7
- package/src/Canvas.ts +17 -4
- package/src/Image.ts +3 -1
- package/src/Leafer.ts +20 -5
- package/src/Pen.ts +2 -4
- package/src/Text.ts +2 -2
- package/src/index.ts +1 -1
- package/types/index.d.ts +10 -3
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@leafer-ui/display",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.2",
|
|
4
4
|
"description": "@leafer-ui/display",
|
|
5
5
|
"author": "Chao (Leafer) Wan",
|
|
6
6
|
"license": "MIT",
|
|
@@ -22,14 +22,14 @@
|
|
|
22
22
|
"leaferjs"
|
|
23
23
|
],
|
|
24
24
|
"dependencies": {
|
|
25
|
-
"@leafer/core": "1.0.
|
|
26
|
-
"@leafer-ui/data": "1.0.
|
|
27
|
-
"@leafer-ui/display-module": "1.0.
|
|
28
|
-
"@leafer-ui/decorator": "1.0.
|
|
29
|
-
"@leafer-ui/external": "1.0.
|
|
25
|
+
"@leafer/core": "1.0.2",
|
|
26
|
+
"@leafer-ui/data": "1.0.2",
|
|
27
|
+
"@leafer-ui/display-module": "1.0.2",
|
|
28
|
+
"@leafer-ui/decorator": "1.0.2",
|
|
29
|
+
"@leafer-ui/external": "1.0.2"
|
|
30
30
|
},
|
|
31
31
|
"devDependencies": {
|
|
32
|
-
"@leafer/interface": "1.0.
|
|
33
|
-
"@leafer-ui/interface": "1.0.
|
|
32
|
+
"@leafer/interface": "1.0.2",
|
|
33
|
+
"@leafer-ui/interface": "1.0.2"
|
|
34
34
|
}
|
|
35
35
|
}
|
package/src/Box.ts
CHANGED
|
@@ -10,7 +10,7 @@ import { Rect } from './Rect'
|
|
|
10
10
|
const rect = Rect.prototype
|
|
11
11
|
const group = Group.prototype
|
|
12
12
|
const childrenRenderBounds = {} as IBoundsData
|
|
13
|
-
const { copy, add, includes } = BoundsHelper
|
|
13
|
+
const { copy, add, includes, copyAndSpread } = BoundsHelper
|
|
14
14
|
|
|
15
15
|
@rewriteAble()
|
|
16
16
|
@registerUI()
|
|
@@ -50,18 +50,26 @@ export class Box extends Group implements IBox {
|
|
|
50
50
|
@rewrite(rect.__updateBoxBounds)
|
|
51
51
|
public __updateRectBoxBounds(): void { }
|
|
52
52
|
|
|
53
|
-
public __updateBoxBounds(): void {
|
|
53
|
+
public __updateBoxBounds(secondLayout?: boolean): void {
|
|
54
54
|
const data = this.__
|
|
55
55
|
|
|
56
56
|
if (this.children.length) {
|
|
57
57
|
if (data.__autoSide) {
|
|
58
|
+
|
|
58
59
|
if (this.leafer && this.leafer.ready) this.leafer.layouter.addExtra(this)
|
|
59
60
|
super.__updateBoxBounds()
|
|
61
|
+
|
|
62
|
+
const { boxBounds } = this.__layout
|
|
63
|
+
|
|
60
64
|
if (!data.__autoSize) {
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
if (!data.__autoHeight) b.width += b.x, b.height = data.height, b.y = b.x = 0
|
|
65
|
+
if (data.__autoWidth) boxBounds.width += boxBounds.x, boxBounds.height = data.height, boxBounds.y = boxBounds.x = 0
|
|
66
|
+
else boxBounds.height += boxBounds.y, boxBounds.width = data.width, boxBounds.x = boxBounds.y = 0
|
|
64
67
|
}
|
|
68
|
+
|
|
69
|
+
if (secondLayout && data.flow && data.padding) copyAndSpread(boxBounds, boxBounds, data.padding, false, data.__autoSize ? null : (data.__autoWidth ? 'width' : 'height'))
|
|
70
|
+
|
|
71
|
+
this.__updateNaturalSize()
|
|
72
|
+
|
|
65
73
|
} else {
|
|
66
74
|
this.__updateRectBoxBounds()
|
|
67
75
|
}
|
|
@@ -85,13 +93,13 @@ export class Box extends Group implements IBox {
|
|
|
85
93
|
copy(childrenRenderBounds, renderBounds)
|
|
86
94
|
this.__updateRectRenderBounds()
|
|
87
95
|
|
|
88
|
-
isOverflow = !includes(renderBounds, childrenRenderBounds) ||
|
|
96
|
+
isOverflow = !includes(renderBounds, childrenRenderBounds) || !this.pathInputed || !this.__.cornerRadius // 路径与圆角直接当溢出处理
|
|
89
97
|
} else {
|
|
90
98
|
this.__updateRectRenderBounds()
|
|
91
99
|
}
|
|
92
100
|
|
|
93
101
|
this.isOverflow !== isOverflow && (this.isOverflow = isOverflow)
|
|
94
|
-
if (
|
|
102
|
+
if (!(this.__.__drawAfterFill = this.__.overflow === 'hide') && isOverflow) add(renderBounds, childrenRenderBounds)
|
|
95
103
|
}
|
|
96
104
|
|
|
97
105
|
@rewrite(rect.__updateRenderBounds)
|
package/src/Canvas.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ILeaferCanvas, ILeaferCanvasConfig, INumber, IRenderOptions, IPointData, ICanvasContext2D, ICanvasContext2DSettings, IScreenSizeData, ISizeData } from '@leafer/interface'
|
|
2
|
-
import { Creator,
|
|
2
|
+
import { Creator, ImageEvent, LeaferImage, Matrix, dataProcessor, registerUI } from '@leafer/core'
|
|
3
3
|
|
|
4
4
|
import { ICanvas, ICanvasData, ICanvasInputData, IUI } from '@leafer-ui/interface'
|
|
5
5
|
import { CanvasData } from '@leafer-ui/data'
|
|
@@ -22,7 +22,7 @@ export class Canvas extends Rect implements ICanvas {
|
|
|
22
22
|
@resizeType(100)
|
|
23
23
|
declare public height?: INumber
|
|
24
24
|
|
|
25
|
-
@resizeType(
|
|
25
|
+
@resizeType(1)
|
|
26
26
|
declare public pixelRatio?: INumber
|
|
27
27
|
|
|
28
28
|
@resizeType(true)
|
|
@@ -35,11 +35,25 @@ export class Canvas extends Rect implements ICanvas {
|
|
|
35
35
|
|
|
36
36
|
public context?: ICanvasContext2D
|
|
37
37
|
|
|
38
|
+
public get ready(): boolean { return !this.url }
|
|
39
|
+
|
|
40
|
+
protected url?: string // 用于临时加载canvas的base64数据,完成后会置空
|
|
41
|
+
|
|
38
42
|
constructor(data?: ICanvasInputData) {
|
|
39
43
|
super(data)
|
|
40
44
|
this.canvas = Creator.canvas(this.__ as ILeaferCanvasConfig)
|
|
41
45
|
this.context = this.canvas.context
|
|
42
46
|
this.__.__isCanvas = this.__.__drawAfterFill = true
|
|
47
|
+
if (data && data.url) this.drawImage(data.url)
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
public drawImage(url: string): void {
|
|
51
|
+
new LeaferImage({ url }).load((image: LeaferImage) => {
|
|
52
|
+
this.context.drawImage(image.view, 0, 0)
|
|
53
|
+
this.url = undefined
|
|
54
|
+
this.paint()
|
|
55
|
+
this.emitEvent(new ImageEvent(ImageEvent.LOADED, { image }))
|
|
56
|
+
})
|
|
43
57
|
}
|
|
44
58
|
|
|
45
59
|
public draw(ui: IUI, offset?: IPointData, scale?: number | IPointData, rotation?: number): void {
|
|
@@ -86,8 +100,7 @@ export class Canvas extends Rect implements ICanvas {
|
|
|
86
100
|
public destroy(): void {
|
|
87
101
|
if (this.canvas) {
|
|
88
102
|
this.canvas.destroy()
|
|
89
|
-
this.canvas = null
|
|
90
|
-
this.context = null
|
|
103
|
+
this.canvas = this.context = null
|
|
91
104
|
}
|
|
92
105
|
super.destroy()
|
|
93
106
|
}
|
package/src/Image.ts
CHANGED
package/src/Leafer.ts
CHANGED
|
@@ -120,7 +120,7 @@ export class Leafer extends Group implements ILeafer {
|
|
|
120
120
|
)
|
|
121
121
|
|
|
122
122
|
if (this.isApp) this.__setApp()
|
|
123
|
-
this.__checkAutoLayout(config)
|
|
123
|
+
this.__checkAutoLayout(config, parentApp)
|
|
124
124
|
this.view = canvas.view
|
|
125
125
|
|
|
126
126
|
// interaction / manager
|
|
@@ -241,9 +241,9 @@ export class Leafer extends Group implements ILeafer {
|
|
|
241
241
|
this.__level = 1
|
|
242
242
|
}
|
|
243
243
|
|
|
244
|
-
protected __checkAutoLayout(config: ILeaferConfig): void {
|
|
245
|
-
if (!
|
|
246
|
-
this.autoLayout = new AutoBounds(config)
|
|
244
|
+
protected __checkAutoLayout(config: ILeaferConfig, parentApp?: IApp): void {
|
|
245
|
+
if (!parentApp) {
|
|
246
|
+
if (!config.width || !config.height) this.autoLayout = new AutoBounds(config)
|
|
247
247
|
this.canvas.startAutoLayout(this.autoLayout, this.__onResize.bind(this))
|
|
248
248
|
}
|
|
249
249
|
}
|
|
@@ -371,7 +371,10 @@ export class Leafer extends Group implements ILeafer {
|
|
|
371
371
|
}
|
|
372
372
|
|
|
373
373
|
// need view plugin
|
|
374
|
-
public zoom(_zoomType: IZoomType, _padding?: IFourNumber, _fixedScale?: boolean): IBoundsData {
|
|
374
|
+
public zoom(_zoomType: IZoomType, _padding?: IFourNumber, _fixedScale?: boolean): IBoundsData {
|
|
375
|
+
return debug.error('need @leafer-in/view') as undefined
|
|
376
|
+
}
|
|
377
|
+
|
|
375
378
|
|
|
376
379
|
// interaction window rewrite
|
|
377
380
|
public getValidMove(moveX: number, moveY: number): IPointData { return { x: moveX, y: moveY } }
|
|
@@ -382,6 +385,18 @@ export class Leafer extends Group implements ILeafer {
|
|
|
382
385
|
return this.interaction && this.interaction.getLocal(clientPoint, updateClient)
|
|
383
386
|
}
|
|
384
387
|
|
|
388
|
+
public getPagePointByClient(clientPoint: IClientPointData, updateClient?: boolean): IPointData {
|
|
389
|
+
return this.getPagePoint(this.getWorldPointByClient(clientPoint, updateClient))
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
public updateClientBounds(): void {
|
|
393
|
+
this.canvas && this.canvas.updateClientBounds()
|
|
394
|
+
}
|
|
395
|
+
|
|
396
|
+
// miniapp rewrite
|
|
397
|
+
public receiveEvent(_event: any): void { }
|
|
398
|
+
|
|
399
|
+
|
|
385
400
|
protected __checkUpdateLayout(): void {
|
|
386
401
|
this.__layout.update()
|
|
387
402
|
}
|
package/src/Pen.ts
CHANGED
|
@@ -6,8 +6,7 @@ import { PenData } from '@leafer-ui/data'
|
|
|
6
6
|
import { Group } from './Group'
|
|
7
7
|
import { Path } from './Path'
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
@useModule(PathCreator, ['set', 'beginPath', 'path'])
|
|
9
|
+
@useModule(PathCreator, ['set', 'beginPath', 'path', 'paint'])
|
|
11
10
|
@registerUI()
|
|
12
11
|
export class Pen extends Group implements IPen {
|
|
13
12
|
|
|
@@ -79,10 +78,9 @@ export class Pen extends Group implements IPen {
|
|
|
79
78
|
public clearPath(): Pen { return this }
|
|
80
79
|
|
|
81
80
|
public paint(): void {
|
|
82
|
-
this.pathElement.forceUpdate('path')
|
|
81
|
+
if (!this.pathElement.__layout.boxChanged) this.pathElement.forceUpdate('path')
|
|
83
82
|
}
|
|
84
83
|
|
|
85
|
-
|
|
86
84
|
}
|
|
87
85
|
|
|
88
86
|
function penPathType() {
|
package/src/Text.ts
CHANGED
|
@@ -96,14 +96,14 @@ export class Text extends UI implements IText {
|
|
|
96
96
|
}
|
|
97
97
|
|
|
98
98
|
public __drawHitPath(canvas: ILeaferCanvas): void {
|
|
99
|
-
const { __lineHeight, __baseLine, __textDrawData: data } = this.__
|
|
99
|
+
const { __lineHeight, fontSize, __baseLine, __textDrawData: data } = this.__
|
|
100
100
|
|
|
101
101
|
canvas.beginPath()
|
|
102
102
|
|
|
103
103
|
if (this.__.__letterSpacing < 0) {
|
|
104
104
|
this.__drawPathByData(canvas)
|
|
105
105
|
} else {
|
|
106
|
-
data.rows.forEach(row => canvas.rect(row.x, row.y - __baseLine, row.width, __lineHeight))
|
|
106
|
+
data.rows.forEach(row => canvas.rect(row.x, row.y - __baseLine, row.width, __lineHeight < fontSize ? fontSize : __lineHeight))
|
|
107
107
|
}
|
|
108
108
|
}
|
|
109
109
|
|
package/src/index.ts
CHANGED
package/types/index.d.ts
CHANGED
|
@@ -211,7 +211,7 @@ declare class Leafer extends Group implements ILeafer {
|
|
|
211
211
|
protected __setApp(): void;
|
|
212
212
|
protected __bindApp(app: IApp): void;
|
|
213
213
|
__setLeafer(leafer: ILeafer): void;
|
|
214
|
-
protected __checkAutoLayout(config: ILeaferConfig): void;
|
|
214
|
+
protected __checkAutoLayout(config: ILeaferConfig, parentApp?: IApp): void;
|
|
215
215
|
__setAttr(attrName: string, newValue: IValue): boolean;
|
|
216
216
|
__getAttr(attrName: string): IValue;
|
|
217
217
|
protected __changeCanvasSize(attrName: string, newValue: number): void;
|
|
@@ -231,6 +231,9 @@ declare class Leafer extends Group implements ILeafer {
|
|
|
231
231
|
getValidMove(moveX: number, moveY: number): IPointData;
|
|
232
232
|
getValidScale(changeScale: number): number;
|
|
233
233
|
getWorldPointByClient(clientPoint: IClientPointData, updateClient?: boolean): IPointData;
|
|
234
|
+
getPagePointByClient(clientPoint: IClientPointData, updateClient?: boolean): IPointData;
|
|
235
|
+
updateClientBounds(): void;
|
|
236
|
+
receiveEvent(_event: any): void;
|
|
234
237
|
protected __checkUpdateLayout(): void;
|
|
235
238
|
protected emitLeafer(type: string): void;
|
|
236
239
|
protected __listenEvents(): void;
|
|
@@ -250,7 +253,7 @@ declare class Box extends Group implements IBox {
|
|
|
250
253
|
__updateRectRenderSpread(): number;
|
|
251
254
|
__updateRenderSpread(): number;
|
|
252
255
|
__updateRectBoxBounds(): void;
|
|
253
|
-
__updateBoxBounds(): void;
|
|
256
|
+
__updateBoxBounds(secondLayout?: boolean): void;
|
|
254
257
|
__updateStrokeBounds(): void;
|
|
255
258
|
__updateRenderBounds(): void;
|
|
256
259
|
__updateRectRenderBounds(): void;
|
|
@@ -333,6 +336,7 @@ declare class Image extends Rect implements IImage {
|
|
|
333
336
|
constructor(data?: IImageInputData);
|
|
334
337
|
destroy(): void;
|
|
335
338
|
}
|
|
339
|
+
declare const MyImage: typeof Image;
|
|
336
340
|
|
|
337
341
|
declare class Canvas extends Rect implements ICanvas {
|
|
338
342
|
get __tag(): string;
|
|
@@ -344,7 +348,10 @@ declare class Canvas extends Rect implements ICanvas {
|
|
|
344
348
|
contextSettings?: ICanvasContext2DSettings;
|
|
345
349
|
canvas?: ILeaferCanvas;
|
|
346
350
|
context?: ICanvasContext2D;
|
|
351
|
+
get ready(): boolean;
|
|
352
|
+
protected url?: string;
|
|
347
353
|
constructor(data?: ICanvasInputData);
|
|
354
|
+
drawImage(url: string): void;
|
|
348
355
|
draw(ui: IUI, offset?: IPointData, scale?: number | IPointData, rotation?: number): void;
|
|
349
356
|
paint(): void;
|
|
350
357
|
__drawAfterFill(canvas: ILeaferCanvas, _options: IRenderOptions): void;
|
|
@@ -422,4 +429,4 @@ declare class Pen extends Group implements IPen {
|
|
|
422
429
|
paint(): void;
|
|
423
430
|
}
|
|
424
431
|
|
|
425
|
-
export { Box, Canvas, Ellipse, Frame, Group, Image, Leafer, Line, Path, Pen, Polygon, Rect, Star, Text, UI };
|
|
432
|
+
export { Box, Canvas, Ellipse, Frame, Group, Image, Leafer, Line, MyImage, Path, Pen, Polygon, Rect, Star, Text, UI };
|