@leafer-ui/paint 1.0.0-beta.10 → 1.0.0-beta.11

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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@leafer-ui/paint",
3
- "version": "1.0.0-beta.10",
3
+ "version": "1.0.0-beta.11",
4
4
  "description": "@leafer-ui/paint",
5
5
  "author": "Chao (Leafer) Wan",
6
6
  "license": "MIT",
@@ -19,11 +19,11 @@
19
19
  "leaferjs"
20
20
  ],
21
21
  "dependencies": {
22
- "@leafer/core": "1.0.0-beta.10",
23
- "@leafer-ui/color": "1.0.0-beta.10"
22
+ "@leafer/core": "1.0.0-beta.11",
23
+ "@leafer-ui/color": "1.0.0-beta.11"
24
24
  },
25
25
  "devDependencies": {
26
- "@leafer/interface": "1.0.0-beta.10",
27
- "@leafer-ui/interface": "1.0.0-beta.10"
26
+ "@leafer/interface": "1.0.0-beta.11",
27
+ "@leafer-ui/interface": "1.0.0-beta.11"
28
28
  }
29
29
  }
@@ -8,16 +8,17 @@ import { createPattern } from './pattern'
8
8
 
9
9
 
10
10
  export function checkImage(ui: IUI, canvas: ILeaferCanvas, paint: ILeafPaint, allowPaint?: boolean): boolean {
11
- let { width, height } = ui.__world
11
+ const { scaleX, scaleY } = ui.__world
12
12
 
13
- if (!paint.data || paint.patternId === width + height) {
13
+ if (!paint.data || paint.patternId === scaleX + scaleY) {
14
14
  return false
15
15
  } else {
16
16
 
17
17
  if (allowPaint) {
18
18
  if (paint.image.isSVG && paint.data.mode !== 'repeat') {
19
- width *= canvas.pixelRatio
20
- height *= canvas.pixelRatio
19
+ let { width, height } = paint.data
20
+ width *= scaleX * canvas.pixelRatio
21
+ height *= scaleY * canvas.pixelRatio
21
22
  allowPaint = width > 4096 || height > 4096
22
23
  } else {
23
24
  allowPaint = false
@@ -35,12 +36,13 @@ export function checkImage(ui: IUI, canvas: ILeaferCanvas, paint: ILeafPaint, al
35
36
  canvas.restore()
36
37
  return true
37
38
  } else {
38
- ImageManager.patternTasker.addParallel(() => {
39
- if (canvas.bounds.hit(ui.__world)) {
40
- createPattern(ui, paint, canvas.pixelRatio)
41
- ui.forceUpdate('surface')
42
- }
43
- }, null, true)
39
+ if (!paint.style) {
40
+ createPattern(ui, paint, canvas.pixelRatio)
41
+ } else {
42
+ ImageManager.patternTasker.add(async () => {
43
+ if (canvas.bounds.hit(ui.__world) && createPattern(ui, paint, canvas.pixelRatio)) ui.forceUpdate('surface')
44
+ }, 300)
45
+ }
44
46
  return false
45
47
  }
46
48
  }
@@ -5,64 +5,77 @@ import { IUI, ILeafPaint, IMatrixData } from '@leafer-ui/interface'
5
5
 
6
6
  const { get, scale: scaleHelper, copy } = MatrixHelper
7
7
 
8
- export function createPattern(ui: IUI, paint: ILeafPaint, pixelRatio: number): void {
9
- const id = ui.__world.width + ui.__world.height
8
+ export function createPattern(ui: IUI, paint: ILeafPaint, pixelRatio: number): boolean {
9
+
10
+ let { scaleX, scaleY } = ui.__world
11
+
12
+ const id = scaleX + scaleY
10
13
 
11
14
  if (paint.patternId !== id) {
12
15
 
13
16
  paint.patternId = id
14
17
 
15
- let scale: number, matrix: IMatrixData, { a, d } = ui.__world, { width, height, scaleX, scaleY, opacity, transform, mode } = paint.data
18
+ const { image, data } = paint
19
+ const maxWidth = image.isSVG ? 4096 : Math.min(image.width, 4096)
20
+ const maxHeight = image.isSVG ? 4096 : Math.min(image.height, 4096)
21
+ let scale: number, matrix: IMatrixData, { width, height, scaleX: sx, scaleY: sy, opacity, transform, mode } = data
16
22
 
17
- if (scaleX) {
23
+ if (sx) {
18
24
  matrix = get()
19
25
  copy(matrix, transform)
20
- scaleHelper(matrix, 1 / scaleX, 1 / scaleY)
21
- a *= scaleX
22
- d *= scaleY
26
+ scaleHelper(matrix, 1 / sx, 1 / sy)
27
+ scaleX *= sx
28
+ scaleY *= sy
23
29
  }
24
30
 
25
- a *= pixelRatio
26
- d *= pixelRatio
27
- width *= a
28
- height *= d
29
-
30
- const { image } = paint
31
- const maxWidth = image.isSVG ? 4096 : Math.min(image.width, 4096)
32
- const maxHeight = image.isSVG ? 4096 : Math.min(image.height, 4096)
31
+ scaleX *= pixelRatio
32
+ scaleY *= pixelRatio
33
+ width *= scaleX
34
+ height *= scaleY
33
35
 
34
36
  if (width > maxWidth || height > maxHeight) {
35
37
  scale = Math.max(width / maxWidth, height / maxHeight)
38
+ } else if (width < 32 || height < 32) {
39
+ scale = Math.min(width / 32, height / 32)
40
+ }
36
41
 
37
- a /= scale
38
- d /= scale
42
+ if (scale) {
43
+ scaleX /= scale
44
+ scaleY /= scale
39
45
  width /= scale
40
46
  height /= scale
41
47
  }
42
48
 
43
- if (scaleX) {
44
- a /= scaleX
45
- d /= scaleY
49
+ if (sx) {
50
+ scaleX /= sx
51
+ scaleY /= sy
46
52
  }
47
53
 
48
- if (transform || a !== 1 || d !== 1) {
54
+ if (transform || scaleX !== 1 || scaleY !== 1) {
49
55
  if (!matrix) {
50
56
  matrix = get()
51
57
  if (transform) copy(matrix, transform)
52
58
  }
53
- scaleHelper(matrix, 1 / a, 1 / d)
59
+ scaleHelper(matrix, 1 / scaleX, 1 / scaleY)
54
60
  }
55
61
 
56
- const style = Platform.canvas.createPattern(paint.image.getCanvas(width, height, opacity) as any, mode === 'repeat' ? 'repeat' : (Platform.origin.noRepeat || 'no-repeat'))
57
-
58
- paint.transform = null
62
+ const style = Platform.canvas.createPattern(image.getCanvas(width, height, opacity) as any, mode === 'repeat' ? 'repeat' : (Platform.origin.noRepeat || 'no-repeat'))
59
63
 
60
64
  try {
65
+ paint.transform = null
61
66
  if (matrix) style.setTransform ? style.setTransform(matrix) : paint.transform = matrix
62
67
  } catch (e) {
63
68
  paint.transform = matrix
64
69
  }
65
70
 
66
71
  paint.style = style
72
+
73
+ return true
74
+
75
+ } else {
76
+
77
+ return false
78
+
67
79
  }
80
+
68
81
  }