leafer-draw 1.12.3 → 2.0.0
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/dist/web.cjs +16 -10
- package/dist/web.esm.js +17 -11
- package/dist/web.esm.min.js +1 -1
- package/dist/web.esm.min.js.map +1 -1
- package/dist/web.js +109 -85
- package/dist/web.min.cjs +1 -1
- package/dist/web.min.cjs.map +1 -1
- package/dist/web.min.js +1 -1
- package/dist/web.min.js.map +1 -1
- package/dist/web.module.js +113 -89
- package/dist/web.module.min.js +1 -1
- package/dist/web.module.min.js.map +1 -1
- package/package.json +3 -3
package/dist/web.module.js
CHANGED
|
@@ -216,57 +216,6 @@ class LeafData {
|
|
|
216
216
|
}
|
|
217
217
|
}
|
|
218
218
|
|
|
219
|
-
const {floor: floor$2, max: max$4} = Math;
|
|
220
|
-
|
|
221
|
-
const Platform = {
|
|
222
|
-
toURL(text, fileType) {
|
|
223
|
-
let url = encodeURIComponent(text);
|
|
224
|
-
if (fileType === "text") url = "data:text/plain;charset=utf-8," + url; else if (fileType === "svg") url = "data:image/svg+xml," + url;
|
|
225
|
-
return url;
|
|
226
|
-
},
|
|
227
|
-
image: {
|
|
228
|
-
hitCanvasSize: 100,
|
|
229
|
-
maxCacheSize: 2560 * 1600,
|
|
230
|
-
maxPatternSize: 4096 * 2160,
|
|
231
|
-
crossOrigin: "anonymous",
|
|
232
|
-
isLarge(size, scaleX, scaleY, largeSize) {
|
|
233
|
-
return size.width * size.height * (scaleX ? scaleX * scaleY : 1) > (largeSize || image$1.maxCacheSize);
|
|
234
|
-
},
|
|
235
|
-
isSuperLarge(size, scaleX, scaleY) {
|
|
236
|
-
return image$1.isLarge(size, scaleX, scaleY, image$1.maxPatternSize);
|
|
237
|
-
},
|
|
238
|
-
getRealURL(url) {
|
|
239
|
-
const {prefix: prefix, suffix: suffix} = Platform.image;
|
|
240
|
-
if (suffix && !url.startsWith("data:") && !url.startsWith("blob:")) url += (url.includes("?") ? "&" : "?") + suffix;
|
|
241
|
-
if (prefix && url[0] === "/") url = prefix + url;
|
|
242
|
-
return url;
|
|
243
|
-
},
|
|
244
|
-
resize(image, width, height, xGap, yGap, clip, smooth, opacity, _filters) {
|
|
245
|
-
const canvas = Platform.origin.createCanvas(max$4(floor$2(width + (xGap || 0)), 1), max$4(floor$2(height + (yGap || 0)), 1));
|
|
246
|
-
const ctx = canvas.getContext("2d");
|
|
247
|
-
if (opacity) ctx.globalAlpha = opacity;
|
|
248
|
-
ctx.imageSmoothingEnabled = smooth === false ? false : true;
|
|
249
|
-
if (clip) {
|
|
250
|
-
const scaleX = width / clip.width, scaleY = height / clip.height;
|
|
251
|
-
ctx.setTransform(scaleX, 0, 0, scaleY, -clip.x * scaleX, -clip.y * scaleY);
|
|
252
|
-
ctx.drawImage(image, 0, 0, image.width, image.height);
|
|
253
|
-
} else ctx.drawImage(image, 0, 0, width, height);
|
|
254
|
-
return canvas;
|
|
255
|
-
},
|
|
256
|
-
setPatternTransform(pattern, transform, paint) {
|
|
257
|
-
try {
|
|
258
|
-
if (transform && pattern.setTransform) {
|
|
259
|
-
pattern.setTransform(transform);
|
|
260
|
-
transform = undefined;
|
|
261
|
-
}
|
|
262
|
-
} catch (_a) {}
|
|
263
|
-
if (paint) DataHelper.stintSet(paint, "transform", transform);
|
|
264
|
-
}
|
|
265
|
-
}
|
|
266
|
-
};
|
|
267
|
-
|
|
268
|
-
const {image: image$1} = Platform;
|
|
269
|
-
|
|
270
219
|
const IncrementId = {
|
|
271
220
|
RUNTIME: "runtime",
|
|
272
221
|
LEAF: "leaf",
|
|
@@ -289,7 +238,7 @@ const I$1 = IncrementId;
|
|
|
289
238
|
|
|
290
239
|
let tempA, tempB, tempTo;
|
|
291
240
|
|
|
292
|
-
const {max: max$
|
|
241
|
+
const {max: max$4} = Math, tempFour = [ 0, 0, 0, 0 ];
|
|
293
242
|
|
|
294
243
|
const FourNumberHelper = {
|
|
295
244
|
zero: [ ...tempFour ],
|
|
@@ -341,9 +290,9 @@ const FourNumberHelper = {
|
|
|
341
290
|
return data;
|
|
342
291
|
},
|
|
343
292
|
max(t, other, change) {
|
|
344
|
-
if (isNumber(t) && isNumber(other)) return max$
|
|
293
|
+
if (isNumber(t) && isNumber(other)) return max$4(t, other);
|
|
345
294
|
toTempAB(t, other, change);
|
|
346
|
-
return set$2(tempTo, max$
|
|
295
|
+
return set$2(tempTo, max$4(tempA[0], tempB[0]), max$4(tempA[1], tempB[1]), max$4(tempA[2], tempB[2]), max$4(tempA[3], tempB[3]));
|
|
347
296
|
},
|
|
348
297
|
add(t, other, change) {
|
|
349
298
|
if (isNumber(t) && isNumber(other)) return t + other;
|
|
@@ -360,7 +309,7 @@ const FourNumberHelper = {
|
|
|
360
309
|
|
|
361
310
|
const {set: set$2, get: get$5, setTemp: setTemp, toTempAB: toTempAB} = FourNumberHelper;
|
|
362
311
|
|
|
363
|
-
const {round: round$3, pow: pow$1, max: max$
|
|
312
|
+
const {round: round$3, pow: pow$1, max: max$3, floor: floor$2, PI: PI$3} = Math;
|
|
364
313
|
|
|
365
314
|
const MathHelper = {
|
|
366
315
|
within(value, min, max) {
|
|
@@ -414,7 +363,7 @@ const MathHelper = {
|
|
|
414
363
|
}
|
|
415
364
|
},
|
|
416
365
|
getFloorScale(num, min = 1) {
|
|
417
|
-
return max$
|
|
366
|
+
return max$3(floor$2(num), min) / num;
|
|
418
367
|
},
|
|
419
368
|
randInt: randInt,
|
|
420
369
|
randColor(opacity) {
|
|
@@ -1259,7 +1208,7 @@ const {toOuterPoint: toOuterPoint$2} = MatrixHelper;
|
|
|
1259
1208
|
|
|
1260
1209
|
const {float: float, fourNumber: fourNumber} = MathHelper;
|
|
1261
1210
|
|
|
1262
|
-
const {floor: floor, ceil: ceil$1} = Math;
|
|
1211
|
+
const {floor: floor$1, ceil: ceil$1} = Math;
|
|
1263
1212
|
|
|
1264
1213
|
let right$1, bottom$1, boundsRight, boundsBottom;
|
|
1265
1214
|
|
|
@@ -1416,8 +1365,8 @@ const BoundsHelper = {
|
|
|
1416
1365
|
},
|
|
1417
1366
|
ceil(t) {
|
|
1418
1367
|
const {x: x, y: y} = t;
|
|
1419
|
-
t.x = floor(t.x);
|
|
1420
|
-
t.y = floor(t.y);
|
|
1368
|
+
t.x = floor$1(t.x);
|
|
1369
|
+
t.y = floor$1(t.y);
|
|
1421
1370
|
t.width = x > t.x ? ceil$1(t.width + x - t.x) : ceil$1(t.width);
|
|
1422
1371
|
t.height = y > t.y ? ceil$1(t.height + y - t.y) : ceil$1(t.height);
|
|
1423
1372
|
},
|
|
@@ -1549,6 +1498,9 @@ const BoundsHelper = {
|
|
|
1549
1498
|
isEmpty(t) {
|
|
1550
1499
|
return t.x === 0 && t.y === 0 && t.width === 0 && t.height === 0;
|
|
1551
1500
|
},
|
|
1501
|
+
hasSize(t) {
|
|
1502
|
+
return t.width && t.height;
|
|
1503
|
+
},
|
|
1552
1504
|
reset(t) {
|
|
1553
1505
|
B.set(t);
|
|
1554
1506
|
}
|
|
@@ -1725,6 +1677,12 @@ class AutoBounds {
|
|
|
1725
1677
|
}
|
|
1726
1678
|
}
|
|
1727
1679
|
|
|
1680
|
+
const UnitConvertHelper = {
|
|
1681
|
+
number(value, percentRefer) {
|
|
1682
|
+
return isObject(value) ? value.type === "percent" ? value.value * percentRefer : value.value : value;
|
|
1683
|
+
}
|
|
1684
|
+
};
|
|
1685
|
+
|
|
1728
1686
|
const StringNumberMap = {
|
|
1729
1687
|
0: 1,
|
|
1730
1688
|
1: 1,
|
|
@@ -1741,6 +1699,69 @@ const StringNumberMap = {
|
|
|
1741
1699
|
E: 1
|
|
1742
1700
|
};
|
|
1743
1701
|
|
|
1702
|
+
const {floor: floor, max: max$2} = Math;
|
|
1703
|
+
|
|
1704
|
+
const Platform = {
|
|
1705
|
+
toURL(text, fileType) {
|
|
1706
|
+
let url = encodeURIComponent(text);
|
|
1707
|
+
if (fileType === "text") url = "data:text/plain;charset=utf-8," + url; else if (fileType === "svg") url = "data:image/svg+xml," + url;
|
|
1708
|
+
return url;
|
|
1709
|
+
},
|
|
1710
|
+
image: {
|
|
1711
|
+
hitCanvasSize: 100,
|
|
1712
|
+
maxCacheSize: 2560 * 1600,
|
|
1713
|
+
maxPatternSize: 4096 * 2160,
|
|
1714
|
+
crossOrigin: "anonymous",
|
|
1715
|
+
isLarge(size, scaleX, scaleY, largeSize) {
|
|
1716
|
+
return size.width * size.height * (scaleX ? scaleX * scaleY : 1) > (largeSize || image$1.maxCacheSize);
|
|
1717
|
+
},
|
|
1718
|
+
isSuperLarge(size, scaleX, scaleY) {
|
|
1719
|
+
return image$1.isLarge(size, scaleX, scaleY, image$1.maxPatternSize);
|
|
1720
|
+
},
|
|
1721
|
+
getRealURL(url) {
|
|
1722
|
+
const {prefix: prefix, suffix: suffix} = image$1;
|
|
1723
|
+
if (suffix && !url.startsWith("data:") && !url.startsWith("blob:")) url += (url.includes("?") ? "&" : "?") + suffix;
|
|
1724
|
+
if (prefix && url[0] === "/") url = prefix + url;
|
|
1725
|
+
return url;
|
|
1726
|
+
},
|
|
1727
|
+
resize(view, width, height, xGap, yGap, clip, smooth, opacity, _filters, interlace) {
|
|
1728
|
+
const realWidth = max$2(floor(width + (xGap || 0)), 1), realHeight = max$2(floor(height + (yGap || 0)), 1);
|
|
1729
|
+
let interlaceX, interlaceY, interlaceOffset;
|
|
1730
|
+
if (interlace && (interlaceOffset = UnitConvertHelper.number(interlace.offset, (interlaceX = interlace.type === "x") ? width : height))) interlaceX || (interlaceY = true);
|
|
1731
|
+
const canvas = Platform.origin.createCanvas(interlaceY ? realWidth * 2 : realWidth, interlaceX ? realHeight * 2 : realHeight);
|
|
1732
|
+
const ctx = canvas.getContext("2d");
|
|
1733
|
+
if (opacity) ctx.globalAlpha = opacity;
|
|
1734
|
+
ctx.imageSmoothingEnabled = smooth === false ? false : true;
|
|
1735
|
+
if (image$1.canUse(view)) {
|
|
1736
|
+
if (clip) {
|
|
1737
|
+
const scaleX = width / clip.width, scaleY = height / clip.height;
|
|
1738
|
+
ctx.setTransform(scaleX, 0, 0, scaleY, -clip.x * scaleX, -clip.y * scaleY);
|
|
1739
|
+
ctx.drawImage(view, 0, 0, view.width, view.height);
|
|
1740
|
+
} else ctx.drawImage(view, 0, 0, width, height);
|
|
1741
|
+
if (interlaceOffset) {
|
|
1742
|
+
ctx.drawImage(canvas, 0, 0, realWidth, realHeight, interlaceX ? interlaceOffset - realWidth : realWidth, interlaceX ? realHeight : interlaceOffset - realHeight, realWidth, realHeight);
|
|
1743
|
+
ctx.drawImage(canvas, 0, 0, realWidth, realHeight, interlaceX ? interlaceOffset : realWidth, interlaceX ? realHeight : interlaceOffset, realWidth, realHeight);
|
|
1744
|
+
}
|
|
1745
|
+
}
|
|
1746
|
+
return canvas;
|
|
1747
|
+
},
|
|
1748
|
+
canUse(view) {
|
|
1749
|
+
return view && view.width && !view.__closed;
|
|
1750
|
+
},
|
|
1751
|
+
setPatternTransform(pattern, transform, paint) {
|
|
1752
|
+
try {
|
|
1753
|
+
if (transform && pattern.setTransform) {
|
|
1754
|
+
pattern.setTransform(transform);
|
|
1755
|
+
transform = undefined;
|
|
1756
|
+
}
|
|
1757
|
+
} catch (_a) {}
|
|
1758
|
+
if (paint) DataHelper.stintSet(paint, "transform", transform);
|
|
1759
|
+
}
|
|
1760
|
+
}
|
|
1761
|
+
};
|
|
1762
|
+
|
|
1763
|
+
const {image: image$1} = Platform;
|
|
1764
|
+
|
|
1744
1765
|
const {randColor: randColor} = MathHelper;
|
|
1745
1766
|
|
|
1746
1767
|
class Debug {
|
|
@@ -3783,9 +3804,10 @@ class TaskItem {
|
|
|
3783
3804
|
run() {
|
|
3784
3805
|
return __awaiter(this, void 0, void 0, function*() {
|
|
3785
3806
|
try {
|
|
3786
|
-
if (this.isComplete) return;
|
|
3807
|
+
if (this.isComplete || this.runing) return;
|
|
3808
|
+
this.runing = true;
|
|
3787
3809
|
if (this.canUse && !this.canUse()) return this.cancel();
|
|
3788
|
-
if (this.task
|
|
3810
|
+
if (this.task) yield this.task();
|
|
3789
3811
|
} catch (error) {
|
|
3790
3812
|
debug$9.error(error);
|
|
3791
3813
|
}
|
|
@@ -3901,7 +3923,7 @@ class TaskProcessor {
|
|
|
3901
3923
|
stop() {
|
|
3902
3924
|
this.isComplete = true;
|
|
3903
3925
|
this.list.forEach(task => {
|
|
3904
|
-
if (!task.isComplete) task.
|
|
3926
|
+
if (!task.isComplete) task.run();
|
|
3905
3927
|
});
|
|
3906
3928
|
this.pause();
|
|
3907
3929
|
this.empty();
|
|
@@ -4191,7 +4213,7 @@ class LeaferImage {
|
|
|
4191
4213
|
getFull(_filters) {
|
|
4192
4214
|
return this.view;
|
|
4193
4215
|
}
|
|
4194
|
-
getCanvas(width, height, opacity, filters, xGap, yGap, smooth) {
|
|
4216
|
+
getCanvas(width, height, opacity, filters, xGap, yGap, smooth, interlace) {
|
|
4195
4217
|
width || (width = this.width);
|
|
4196
4218
|
height || (height = this.height);
|
|
4197
4219
|
if (this.cache) {
|
|
@@ -4204,7 +4226,7 @@ class LeaferImage {
|
|
|
4204
4226
|
}
|
|
4205
4227
|
if (data) return data;
|
|
4206
4228
|
}
|
|
4207
|
-
const canvas = Platform.image.resize(this.view, width, height, xGap, yGap, undefined, smooth, opacity, filters);
|
|
4229
|
+
const canvas = Platform.image.resize(this.view, width, height, xGap, yGap, undefined, smooth, opacity, filters, interlace);
|
|
4208
4230
|
this.cache = this.use > 1 ? {
|
|
4209
4231
|
data: canvas,
|
|
4210
4232
|
params: arguments
|
|
@@ -4220,13 +4242,13 @@ class LeaferImage {
|
|
|
4220
4242
|
return this.url;
|
|
4221
4243
|
}
|
|
4222
4244
|
setThumbView(_view) {}
|
|
4223
|
-
getThumbSize() {
|
|
4245
|
+
getThumbSize(_lod) {
|
|
4224
4246
|
return undefined;
|
|
4225
4247
|
}
|
|
4226
4248
|
getMinLevel() {
|
|
4227
4249
|
return undefined;
|
|
4228
4250
|
}
|
|
4229
|
-
getLevelData(_level) {
|
|
4251
|
+
getLevelData(_level, _width, _height) {
|
|
4230
4252
|
return undefined;
|
|
4231
4253
|
}
|
|
4232
4254
|
clearLevels(_checkUse) {}
|
|
@@ -6096,7 +6118,7 @@ const LeafRender = {
|
|
|
6096
6118
|
}
|
|
6097
6119
|
};
|
|
6098
6120
|
|
|
6099
|
-
const {excludeRenderBounds: excludeRenderBounds$1} = LeafBoundsHelper;
|
|
6121
|
+
const {excludeRenderBounds: excludeRenderBounds$1} = LeafBoundsHelper, {hasSize: hasSize} = BoundsHelper;
|
|
6100
6122
|
|
|
6101
6123
|
const BranchRender = {
|
|
6102
6124
|
__updateChange() {
|
|
@@ -6108,8 +6130,8 @@ const BranchRender = {
|
|
|
6108
6130
|
this.__.__checkSingle();
|
|
6109
6131
|
},
|
|
6110
6132
|
__render(canvas, options) {
|
|
6111
|
-
this.__nowWorld = this.__getNowWorld(options);
|
|
6112
|
-
if (this.__worldOpacity) {
|
|
6133
|
+
const nowWorld = this.__nowWorld = this.__getNowWorld(options);
|
|
6134
|
+
if (this.__worldOpacity && hasSize(nowWorld)) {
|
|
6113
6135
|
const data = this.__;
|
|
6114
6136
|
if (data.__useDim) {
|
|
6115
6137
|
if (data.dim) options.dimOpacity = data.dim === true ? .2 : data.dim; else if (data.bright && !options.topRendering) return options.topList.add(this); else if (data.dimskip) options.dimOpacity && (options.dimOpacity = 0);
|
|
@@ -6118,7 +6140,6 @@ const BranchRender = {
|
|
|
6118
6140
|
if (data.eraser === "path") return this.__renderEraser(canvas, options);
|
|
6119
6141
|
const tempCanvas = canvas.getSameCanvas(false, true);
|
|
6120
6142
|
this.__renderBranch(tempCanvas, options);
|
|
6121
|
-
const nowWorld = this.__nowWorld;
|
|
6122
6143
|
canvas.opacity = options.dimOpacity ? data.opacity * options.dimOpacity : data.opacity;
|
|
6123
6144
|
canvas.copyWorldByReset(tempCanvas, nowWorld, nowWorld, data.__blendMode, true);
|
|
6124
6145
|
tempCanvas.recycle(nowWorld);
|
|
@@ -6958,7 +6979,7 @@ class LeafLevelList {
|
|
|
6958
6979
|
}
|
|
6959
6980
|
}
|
|
6960
6981
|
|
|
6961
|
-
const version = "
|
|
6982
|
+
const version = "2.0.0";
|
|
6962
6983
|
|
|
6963
6984
|
const debug$4 = Debug.get("LeaferCanvas");
|
|
6964
6985
|
|
|
@@ -7582,6 +7603,7 @@ class Renderer {
|
|
|
7582
7603
|
this.times = 0;
|
|
7583
7604
|
this.config = {
|
|
7584
7605
|
usePartRender: true,
|
|
7606
|
+
ceilPartPixel: true,
|
|
7585
7607
|
maxFPS: 120
|
|
7586
7608
|
};
|
|
7587
7609
|
this.frames = [];
|
|
@@ -7690,8 +7712,9 @@ class Renderer {
|
|
|
7690
7712
|
const {canvas: canvas} = this, bounds = block.getIntersect(canvas.bounds), realBounds = new Bounds(bounds);
|
|
7691
7713
|
canvas.save();
|
|
7692
7714
|
bounds.spread(Renderer.clipSpread).ceil();
|
|
7693
|
-
|
|
7694
|
-
canvas.clipWorld(bounds);
|
|
7715
|
+
const {ceilPartPixel: ceilPartPixel} = this.config;
|
|
7716
|
+
canvas.clipWorld(bounds, ceilPartPixel);
|
|
7717
|
+
canvas.clearWorld(bounds, ceilPartPixel);
|
|
7695
7718
|
this.__render(bounds, realBounds);
|
|
7696
7719
|
canvas.restore();
|
|
7697
7720
|
Run.end(t);
|
|
@@ -7890,11 +7913,7 @@ const ColorConvert = {
|
|
|
7890
7913
|
hasTransparent: hasTransparent$3
|
|
7891
7914
|
};
|
|
7892
7915
|
|
|
7893
|
-
const UnitConvert =
|
|
7894
|
-
number(value, percentRefer) {
|
|
7895
|
-
return isObject(value) ? value.type === "percent" ? value.value * percentRefer : value.value : value;
|
|
7896
|
-
}
|
|
7897
|
-
};
|
|
7916
|
+
const UnitConvert = UnitConvertHelper;
|
|
7898
7917
|
|
|
7899
7918
|
const PathArrow = {};
|
|
7900
7919
|
|
|
@@ -9264,9 +9283,10 @@ let Ellipse = class Ellipse extends UI {
|
|
|
9264
9283
|
const {width: width, height: height, innerRadius: innerRadius, startAngle: startAngle, endAngle: endAngle} = this.__;
|
|
9265
9284
|
const rx = width / 2, ry = height / 2;
|
|
9266
9285
|
const path = this.__.path = [];
|
|
9286
|
+
let open;
|
|
9267
9287
|
if (innerRadius) {
|
|
9268
9288
|
if (startAngle || endAngle) {
|
|
9269
|
-
if (innerRadius < 1) ellipse(path, rx, ry, rx * innerRadius, ry * innerRadius, 0, startAngle, endAngle, false);
|
|
9289
|
+
if (innerRadius < 1) ellipse(path, rx, ry, rx * innerRadius, ry * innerRadius, 0, startAngle, endAngle, false); else open = true;
|
|
9270
9290
|
ellipse(path, rx, ry, rx, ry, 0, endAngle, startAngle, true);
|
|
9271
9291
|
} else {
|
|
9272
9292
|
if (innerRadius < 1) {
|
|
@@ -9283,7 +9303,7 @@ let Ellipse = class Ellipse extends UI {
|
|
|
9283
9303
|
ellipse(path, rx, ry, rx, ry);
|
|
9284
9304
|
}
|
|
9285
9305
|
}
|
|
9286
|
-
closePath$2(path);
|
|
9306
|
+
if (!open) closePath$2(path);
|
|
9287
9307
|
if (Platform.ellipseToCurve) this.__.path = this.getPath(true);
|
|
9288
9308
|
}
|
|
9289
9309
|
};
|
|
@@ -10145,7 +10165,7 @@ function image(ui, attrName, paint, boxBounds, firstUse) {
|
|
|
10145
10165
|
ignoreRender(ui, false);
|
|
10146
10166
|
onLoadError(ui, event, error);
|
|
10147
10167
|
leafPaint.loadId = undefined;
|
|
10148
|
-
}, paint.lod && image.getThumbSize());
|
|
10168
|
+
}, paint.lod && image.getThumbSize(paint.lod));
|
|
10149
10169
|
if (ui.placeholderColor) {
|
|
10150
10170
|
if (!ui.placeholderDelay) image.isPlacehold = true; else setTimeout(() => {
|
|
10151
10171
|
if (!image.ready) {
|
|
@@ -10215,7 +10235,7 @@ function getPatternData(paint, box, image) {
|
|
|
10215
10235
|
if (paint.padding) box = tempBox.set(box).shrink(paint.padding);
|
|
10216
10236
|
if (paint.mode === "strench") paint.mode = "stretch";
|
|
10217
10237
|
const {width: width, height: height} = image;
|
|
10218
|
-
const {opacity: opacity, mode: mode, align: align, offset: offset, scale: scale, size: size, rotation: rotation, skew: skew, clipSize: clipSize, repeat: repeat, gap: gap, filters: filters} = paint;
|
|
10238
|
+
const {opacity: opacity, mode: mode, align: align, offset: offset, scale: scale, size: size, rotation: rotation, skew: skew, clipSize: clipSize, repeat: repeat, gap: gap, filters: filters, interlace: interlace} = paint;
|
|
10219
10239
|
const sameBox = box.width === width && box.height === height;
|
|
10220
10240
|
const data = {
|
|
10221
10241
|
mode: mode
|
|
@@ -10281,6 +10301,10 @@ function getPatternData(paint, box, image) {
|
|
|
10281
10301
|
if (opacity && opacity < 1) data.opacity = opacity;
|
|
10282
10302
|
if (filters) data.filters = filters;
|
|
10283
10303
|
if (repeat) data.repeat = isString(repeat) ? repeat === "x" ? "repeat-x" : "repeat-y" : "repeat";
|
|
10304
|
+
if (interlace) data.interlace = isNumber(interlace) || interlace.type === "percent" ? {
|
|
10305
|
+
type: "x",
|
|
10306
|
+
offset: interlace
|
|
10307
|
+
} : interlace;
|
|
10284
10308
|
return data;
|
|
10285
10309
|
}
|
|
10286
10310
|
|
|
@@ -10414,7 +10438,7 @@ function createPattern(paint, ui, canvas, renderOptions) {
|
|
|
10414
10438
|
if (transform) copy$1(imageMatrix, transform);
|
|
10415
10439
|
scale(imageMatrix, 1 / scaleX, 1 / scaleY);
|
|
10416
10440
|
}
|
|
10417
|
-
const imageCanvas = image.getCanvas(width, height, data.opacity, data.filters, xGap, yGap, ui.leafer && ui.leafer.config.smooth);
|
|
10441
|
+
const imageCanvas = image.getCanvas(width, height, data.opacity, data.filters, xGap, yGap, ui.leafer && ui.leafer.config.smooth, data.interlace);
|
|
10418
10442
|
const pattern = image.getPattern(imageCanvas, data.repeat || (Platform.origin.noRepeat || "no-repeat"), imageMatrix, paint);
|
|
10419
10443
|
paint.style = pattern;
|
|
10420
10444
|
paint.patternId = id;
|
|
@@ -10436,8 +10460,8 @@ function getPatternFixScale(paint, imageScaleX, imageScaleY) {
|
|
|
10436
10460
|
|
|
10437
10461
|
function checkImage(paint, drawImage, ui, canvas, renderOptions) {
|
|
10438
10462
|
const {scaleX: scaleX, scaleY: scaleY} = PaintImage.getImageRenderScaleData(paint, ui, canvas, renderOptions);
|
|
10439
|
-
const {image: image, data: data, originPaint: originPaint} = paint, {exporting: exporting} = renderOptions;
|
|
10440
|
-
if (!data || paint.patternId === scaleX + "-" + scaleY && !exporting) {
|
|
10463
|
+
const {image: image, data: data, originPaint: originPaint} = paint, {exporting: exporting, snapshot: snapshot} = renderOptions;
|
|
10464
|
+
if (!data || paint.patternId === scaleX + "-" + scaleY && !exporting || snapshot) {
|
|
10441
10465
|
return false;
|
|
10442
10466
|
} else {
|
|
10443
10467
|
if (drawImage) {
|
|
@@ -11111,7 +11135,7 @@ const TextMode = 2;
|
|
|
11111
11135
|
|
|
11112
11136
|
function layoutChar(drawData, style, width, _height) {
|
|
11113
11137
|
const {rows: rows} = drawData;
|
|
11114
|
-
const {textAlign: textAlign, paraIndent: paraIndent,
|
|
11138
|
+
const {textAlign: textAlign, paraIndent: paraIndent, __letterSpacing: __letterSpacing} = style;
|
|
11115
11139
|
const justifyLast = width && textAlign.includes("both");
|
|
11116
11140
|
const justify = justifyLast || width && textAlign.includes("justify");
|
|
11117
11141
|
const justifyLetter = justify && textAlign.includes("letter");
|
|
@@ -11124,8 +11148,8 @@ function layoutChar(drawData, style, width, _height) {
|
|
|
11124
11148
|
remainingWidth = width - row.width - indentWidth;
|
|
11125
11149
|
if (justifyLetter) addLetterWidth = remainingWidth / (row.words.reduce((total, item) => total + item.data.length, 0) - 1); else addWordWidth = wordsLength > 1 ? remainingWidth / (wordsLength - 1) : 0;
|
|
11126
11150
|
}
|
|
11127
|
-
mode =
|
|
11128
|
-
if (row.isOverflow && !
|
|
11151
|
+
mode = __letterSpacing || row.isOverflow || justifyLetter ? CharMode : addWordWidth ? WordMode : TextMode;
|
|
11152
|
+
if (row.isOverflow && !__letterSpacing) row.textMode = true;
|
|
11129
11153
|
if (mode === TextMode) {
|
|
11130
11154
|
row.x += indentWidth;
|
|
11131
11155
|
toTextChar$1(row);
|
|
@@ -11413,4 +11437,4 @@ Object.assign(Effect, EffectModule);
|
|
|
11413
11437
|
|
|
11414
11438
|
useCanvas();
|
|
11415
11439
|
|
|
11416
|
-
export { AlignHelper, Answer, AroundHelper, AutoBounds, BezierHelper, Bounds, BoundsEvent, BoundsHelper, Box, BoxData, Branch, BranchHelper, BranchRender, Canvas, CanvasData, CanvasManager, ChildEvent, ColorConvert, Creator, DataHelper, Debug, Direction4, Direction9, Effect, Ellipse, EllipseData, EllipseHelper, Event, EventCreator, Eventer, Export, FileHelper, Filter, FourNumberHelper, Frame, FrameData, Group, GroupData, Image$1 as Image, ImageData, ImageEvent, ImageManager, IncrementId, LayoutEvent, Layouter, Leaf, LeafBounds, LeafBoundsHelper, LeafData, LeafDataProxy, LeafEventer, LeafHelper, LeafLayout, LeafLevelList, LeafList, LeafMatrix, LeafRender, Leafer, LeaferCanvas, LeaferCanvasBase, LeaferData, LeaferEvent, LeaferImage, Line, LineData, MathHelper, Matrix, MatrixHelper, MyImage, NeedConvertToCanvasCommandMap, OneRadian, PI2, PI_2, Paint, PaintGradient, PaintImage, Path, PathArrow, PathBounds, PathCommandDataHelper, PathCommandMap, PathCommandNodeHelper, PathConvert, PathCorner, PathCreator, PathData, PathDrawer, PathHelper, PathNodeHandleType, PathNumberCommandLengthMap, PathNumberCommandMap, Pen, PenData, Platform, Plugin, Point, PointHelper, Polygon, PolygonData, PropertyEvent, Rect, RectData, RectHelper, RectRender, RenderEvent, Renderer, ResizeEvent, Resource, Run, Star, StarData, State, StringNumberMap, TaskItem, TaskProcessor, Text, TextConvert, TextData, Transition, TwoPointBoundsHelper, UI, UIBounds, UICreator, UIData, UIRender, UnitConvert, WaitHelper, WatchEvent, Watcher, affectRenderBoundsType, affectStrokeBoundsType, attr, autoLayoutType, boundsType, canvasPatch, canvasSizeAttrs, createAttr, createDescriptor, cursorType, dataProcessor, dataType, decorateLeafAttr, defineDataProcessor, defineKey, defineLeafAttr, dimType, doBoundsType, doStrokeType, effectType, emptyData, eraserType, extraPropertyEventMap, getBoundsData, getDescriptor, getMatrixData, getPointData, hitType, isArray, isData, isEmptyData, isFinite, isNull, isNumber, isObject, isString, isUndefined, layoutProcessor, leaferTransformAttrMap, maskType, naturalBoundsType, opacityType, path, pathInputType, pathType, pen, positionType, registerUI, registerUIEvent, resizeType, rewrite, rewriteAble, rotationType, scaleType, scrollType, sortType, strokeType, surfaceType, tempBounds$2 as tempBounds, tempMatrix$2 as tempMatrix, tempPoint$2 as tempPoint, tryToNumber, useCanvas, useModule, version, visibleType, zoomLayerType };
|
|
11440
|
+
export { AlignHelper, Answer, AroundHelper, AutoBounds, BezierHelper, Bounds, BoundsEvent, BoundsHelper, Box, BoxData, Branch, BranchHelper, BranchRender, Canvas, CanvasData, CanvasManager, ChildEvent, ColorConvert, Creator, DataHelper, Debug, Direction4, Direction9, Effect, Ellipse, EllipseData, EllipseHelper, Event, EventCreator, Eventer, Export, FileHelper, Filter, FourNumberHelper, Frame, FrameData, Group, GroupData, Image$1 as Image, ImageData, ImageEvent, ImageManager, IncrementId, LayoutEvent, Layouter, Leaf, LeafBounds, LeafBoundsHelper, LeafData, LeafDataProxy, LeafEventer, LeafHelper, LeafLayout, LeafLevelList, LeafList, LeafMatrix, LeafRender, Leafer, LeaferCanvas, LeaferCanvasBase, LeaferData, LeaferEvent, LeaferImage, Line, LineData, MathHelper, Matrix, MatrixHelper, MyImage, NeedConvertToCanvasCommandMap, OneRadian, PI2, PI_2, Paint, PaintGradient, PaintImage, Path, PathArrow, PathBounds, PathCommandDataHelper, PathCommandMap, PathCommandNodeHelper, PathConvert, PathCorner, PathCreator, PathData, PathDrawer, PathHelper, PathNodeHandleType, PathNumberCommandLengthMap, PathNumberCommandMap, Pen, PenData, Platform, Plugin, Point, PointHelper, Polygon, PolygonData, PropertyEvent, Rect, RectData, RectHelper, RectRender, RenderEvent, Renderer, ResizeEvent, Resource, Run, Star, StarData, State, StringNumberMap, TaskItem, TaskProcessor, Text, TextConvert, TextData, Transition, TwoPointBoundsHelper, UI, UIBounds, UICreator, UIData, UIRender, UnitConvert, UnitConvertHelper, WaitHelper, WatchEvent, Watcher, affectRenderBoundsType, affectStrokeBoundsType, attr, autoLayoutType, boundsType, canvasPatch, canvasSizeAttrs, createAttr, createDescriptor, cursorType, dataProcessor, dataType, decorateLeafAttr, defineDataProcessor, defineKey, defineLeafAttr, dimType, doBoundsType, doStrokeType, effectType, emptyData, eraserType, extraPropertyEventMap, getBoundsData, getDescriptor, getMatrixData, getPointData, hitType, isArray, isData, isEmptyData, isFinite, isNull, isNumber, isObject, isString, isUndefined, layoutProcessor, leaferTransformAttrMap, maskType, naturalBoundsType, opacityType, path, pathInputType, pathType, pen, positionType, registerUI, registerUIEvent, resizeType, rewrite, rewriteAble, rotationType, scaleType, scrollType, sortType, strokeType, surfaceType, tempBounds$2 as tempBounds, tempMatrix$2 as tempMatrix, tempPoint$2 as tempPoint, tryToNumber, useCanvas, useModule, version, visibleType, zoomLayerType };
|