@leafer-draw/miniapp 1.12.4 → 2.0.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.
@@ -216,59 +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 (image) {
250
- if (clip) {
251
- const scaleX = width / clip.width, scaleY = height / clip.height;
252
- ctx.setTransform(scaleX, 0, 0, scaleY, -clip.x * scaleX, -clip.y * scaleY);
253
- ctx.drawImage(image, 0, 0, image.width, image.height);
254
- } else ctx.drawImage(image, 0, 0, width, height);
255
- }
256
- return canvas;
257
- },
258
- setPatternTransform(pattern, transform, paint) {
259
- try {
260
- if (transform && pattern.setTransform) {
261
- pattern.setTransform(transform);
262
- transform = undefined;
263
- }
264
- } catch (_a) {}
265
- if (paint) DataHelper.stintSet(paint, "transform", transform);
266
- }
267
- }
268
- };
269
-
270
- const {image: image$1} = Platform;
271
-
272
219
  const IncrementId = {
273
220
  RUNTIME: "runtime",
274
221
  LEAF: "leaf",
@@ -291,7 +238,7 @@ const I$1 = IncrementId;
291
238
 
292
239
  let tempA, tempB, tempTo;
293
240
 
294
- const {max: max$3} = Math, tempFour = [ 0, 0, 0, 0 ];
241
+ const {max: max$4} = Math, tempFour = [ 0, 0, 0, 0 ];
295
242
 
296
243
  const FourNumberHelper = {
297
244
  zero: [ ...tempFour ],
@@ -343,9 +290,9 @@ const FourNumberHelper = {
343
290
  return data;
344
291
  },
345
292
  max(t, other, change) {
346
- if (isNumber(t) && isNumber(other)) return max$3(t, other);
293
+ if (isNumber(t) && isNumber(other)) return max$4(t, other);
347
294
  toTempAB(t, other, change);
348
- return set$2(tempTo, max$3(tempA[0], tempB[0]), max$3(tempA[1], tempB[1]), max$3(tempA[2], tempB[2]), max$3(tempA[3], tempB[3]));
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]));
349
296
  },
350
297
  add(t, other, change) {
351
298
  if (isNumber(t) && isNumber(other)) return t + other;
@@ -362,7 +309,7 @@ const FourNumberHelper = {
362
309
 
363
310
  const {set: set$2, get: get$5, setTemp: setTemp, toTempAB: toTempAB} = FourNumberHelper;
364
311
 
365
- const {round: round$3, pow: pow$1, max: max$2, floor: floor$1, PI: PI$3} = Math;
312
+ const {round: round$3, pow: pow$1, max: max$3, floor: floor$2, PI: PI$3} = Math;
366
313
 
367
314
  const MathHelper = {
368
315
  within(value, min, max) {
@@ -416,7 +363,7 @@ const MathHelper = {
416
363
  }
417
364
  },
418
365
  getFloorScale(num, min = 1) {
419
- return max$2(floor$1(num), min) / num;
366
+ return max$3(floor$2(num), min) / num;
420
367
  },
421
368
  randInt: randInt,
422
369
  randColor(opacity) {
@@ -1261,7 +1208,7 @@ const {toOuterPoint: toOuterPoint$2} = MatrixHelper;
1261
1208
 
1262
1209
  const {float: float, fourNumber: fourNumber} = MathHelper;
1263
1210
 
1264
- const {floor: floor, ceil: ceil$1} = Math;
1211
+ const {floor: floor$1, ceil: ceil$1} = Math;
1265
1212
 
1266
1213
  let right$1, bottom$1, boundsRight, boundsBottom;
1267
1214
 
@@ -1418,8 +1365,8 @@ const BoundsHelper = {
1418
1365
  },
1419
1366
  ceil(t) {
1420
1367
  const {x: x, y: y} = t;
1421
- t.x = floor(t.x);
1422
- t.y = floor(t.y);
1368
+ t.x = floor$1(t.x);
1369
+ t.y = floor$1(t.y);
1423
1370
  t.width = x > t.x ? ceil$1(t.width + x - t.x) : ceil$1(t.width);
1424
1371
  t.height = y > t.y ? ceil$1(t.height + y - t.y) : ceil$1(t.height);
1425
1372
  },
@@ -1551,6 +1498,9 @@ const BoundsHelper = {
1551
1498
  isEmpty(t) {
1552
1499
  return t.x === 0 && t.y === 0 && t.width === 0 && t.height === 0;
1553
1500
  },
1501
+ hasSize(t) {
1502
+ return t.width && t.height;
1503
+ },
1554
1504
  reset(t) {
1555
1505
  B.set(t);
1556
1506
  }
@@ -1727,6 +1677,12 @@ class AutoBounds {
1727
1677
  }
1728
1678
  }
1729
1679
 
1680
+ const UnitConvertHelper = {
1681
+ number(value, percentRefer) {
1682
+ return isObject(value) ? value.type === "percent" ? value.value * percentRefer : value.value : value;
1683
+ }
1684
+ };
1685
+
1730
1686
  const StringNumberMap = {
1731
1687
  0: 1,
1732
1688
  1: 1,
@@ -1743,6 +1699,69 @@ const StringNumberMap = {
1743
1699
  E: 1
1744
1700
  };
1745
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, interlace.type === "x" ? width : height))) interlace.type === "x" ? interlaceX = true : 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
+
1746
1765
  const {randColor: randColor} = MathHelper;
1747
1766
 
1748
1767
  class Debug {
@@ -3298,10 +3317,10 @@ const PathCommandDataHelper = {
3298
3317
  data.push(O$2, x, y, radius, startAngle, endAngle, anticlockwise ? 1 : 0);
3299
3318
  }
3300
3319
  },
3301
- arcTo(data, x1, y1, x2, y2, radius, lastX, lastY) {
3320
+ arcTo(data, x1, y1, x2, y2, radius, lastX, lastY, fullRadius) {
3302
3321
  if (!isUndefined(lastX)) {
3303
- const d = getMinDistanceFrom(lastX, lastY, x1, y1, x2, y2);
3304
- radius = min(radius, min(d / 2, d / 2 * abs$2(tan(getRadianFrom(lastX, lastY, x1, y1, x2, y2) / 2))));
3322
+ const r = getMinDistanceFrom(lastX, lastY, x1, y1, x2, y2) / (fullRadius ? 1 : 2);
3323
+ radius = min(radius, min(r, r * abs$2(tan(getRadianFrom(lastX, lastY, x1, y1, x2, y2) / 2))));
3305
3324
  }
3306
3325
  data.push(U$2, x1, y1, x2, y2, radius);
3307
3326
  },
@@ -3645,7 +3664,7 @@ const PathCorner = {
3645
3664
  let command, lastCommand, commandLen;
3646
3665
  let i = 0, x = 0, y = 0, startX = 0, startY = 0, secondX = 0, secondY = 0, lastX = 0, lastY = 0;
3647
3666
  if (isArray(cornerRadius)) cornerRadius = cornerRadius[0] || 0;
3648
- const len = data.length;
3667
+ const len = data.length, three = len === 9;
3649
3668
  const smooth = [];
3650
3669
  while (i < len) {
3651
3670
  command = data[i];
@@ -3657,7 +3676,7 @@ const PathCorner = {
3657
3676
  if (data[i] === L$1) {
3658
3677
  secondX = data[i + 1];
3659
3678
  secondY = data[i + 2];
3660
- smooth.push(M, getCenterX(startX, secondX), getCenterY(startY, secondY));
3679
+ three ? smooth.push(M, startX, startY) : smooth.push(M, getCenterX(startX, secondX), getCenterY(startY, secondY));
3661
3680
  } else {
3662
3681
  smooth.push(M, startX, startY);
3663
3682
  }
@@ -3669,11 +3688,11 @@ const PathCorner = {
3669
3688
  i += 3;
3670
3689
  switch (data[i]) {
3671
3690
  case L$1:
3672
- arcTo(smooth, x, y, data[i + 1], data[i + 2], cornerRadius, lastX, lastY);
3691
+ arcTo(smooth, x, y, data[i + 1], data[i + 2], cornerRadius, lastX, lastY, three);
3673
3692
  break;
3674
3693
 
3675
3694
  case Z:
3676
- arcTo(smooth, x, y, startX, startY, cornerRadius, lastX, lastY);
3695
+ arcTo(smooth, x, y, startX, startY, cornerRadius, lastX, lastY, three);
3677
3696
  break;
3678
3697
 
3679
3698
  default:
@@ -3685,7 +3704,7 @@ const PathCorner = {
3685
3704
 
3686
3705
  case Z:
3687
3706
  if (lastCommand !== Z) {
3688
- arcTo(smooth, startX, startY, secondX, secondY, cornerRadius, lastX, lastY);
3707
+ arcTo(smooth, startX, startY, secondX, secondY, cornerRadius, lastX, lastY, three);
3689
3708
  smooth.push(Z);
3690
3709
  }
3691
3710
  i += 1;
@@ -3785,9 +3804,10 @@ class TaskItem {
3785
3804
  run() {
3786
3805
  return __awaiter(this, void 0, void 0, function*() {
3787
3806
  try {
3788
- if (this.isComplete) return;
3807
+ if (this.isComplete || this.runing) return;
3808
+ this.runing = true;
3789
3809
  if (this.canUse && !this.canUse()) return this.cancel();
3790
- if (this.task && this.parent.running) yield this.task();
3810
+ if (this.task) yield this.task();
3791
3811
  } catch (error) {
3792
3812
  debug$8.error(error);
3793
3813
  }
@@ -3903,7 +3923,7 @@ class TaskProcessor {
3903
3923
  stop() {
3904
3924
  this.isComplete = true;
3905
3925
  this.list.forEach(task => {
3906
- if (!task.isComplete) task.cancel();
3926
+ if (!task.isComplete) task.run();
3907
3927
  });
3908
3928
  this.pause();
3909
3929
  this.empty();
@@ -4193,7 +4213,7 @@ class LeaferImage {
4193
4213
  getFull(_filters) {
4194
4214
  return this.view;
4195
4215
  }
4196
- getCanvas(width, height, opacity, filters, xGap, yGap, smooth) {
4216
+ getCanvas(width, height, opacity, filters, xGap, yGap, smooth, interlace) {
4197
4217
  width || (width = this.width);
4198
4218
  height || (height = this.height);
4199
4219
  if (this.cache) {
@@ -4206,7 +4226,7 @@ class LeaferImage {
4206
4226
  }
4207
4227
  if (data) return data;
4208
4228
  }
4209
- 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);
4210
4230
  this.cache = this.use > 1 ? {
4211
4231
  data: canvas,
4212
4232
  params: arguments
@@ -6098,7 +6118,7 @@ const LeafRender = {
6098
6118
  }
6099
6119
  };
6100
6120
 
6101
- const {excludeRenderBounds: excludeRenderBounds$1} = LeafBoundsHelper;
6121
+ const {excludeRenderBounds: excludeRenderBounds$1} = LeafBoundsHelper, {hasSize: hasSize} = BoundsHelper;
6102
6122
 
6103
6123
  const BranchRender = {
6104
6124
  __updateChange() {
@@ -6110,8 +6130,8 @@ const BranchRender = {
6110
6130
  this.__.__checkSingle();
6111
6131
  },
6112
6132
  __render(canvas, options) {
6113
- this.__nowWorld = this.__getNowWorld(options);
6114
- if (this.__worldOpacity) {
6133
+ const nowWorld = this.__nowWorld = this.__getNowWorld(options);
6134
+ if (this.__worldOpacity && hasSize(nowWorld)) {
6115
6135
  const data = this.__;
6116
6136
  if (data.__useDim) {
6117
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);
@@ -6120,7 +6140,6 @@ const BranchRender = {
6120
6140
  if (data.eraser === "path") return this.__renderEraser(canvas, options);
6121
6141
  const tempCanvas = canvas.getSameCanvas(false, true);
6122
6142
  this.__renderBranch(tempCanvas, options);
6123
- const nowWorld = this.__nowWorld;
6124
6143
  canvas.opacity = options.dimOpacity ? data.opacity * options.dimOpacity : data.opacity;
6125
6144
  canvas.copyWorldByReset(tempCanvas, nowWorld, nowWorld, data.__blendMode, true);
6126
6145
  tempCanvas.recycle(nowWorld);
@@ -6960,7 +6979,7 @@ class LeafLevelList {
6960
6979
  }
6961
6980
  }
6962
6981
 
6963
- const version = "1.12.4";
6982
+ const version = "2.0.1";
6964
6983
 
6965
6984
  class LeaferCanvas extends LeaferCanvasBase {
6966
6985
  get allowBackgroundColor() {
@@ -7540,6 +7559,7 @@ class Renderer {
7540
7559
  this.times = 0;
7541
7560
  this.config = {
7542
7561
  usePartRender: true,
7562
+ ceilPartPixel: true,
7543
7563
  maxFPS: 120
7544
7564
  };
7545
7565
  this.frames = [];
@@ -7648,8 +7668,9 @@ class Renderer {
7648
7668
  const {canvas: canvas} = this, bounds = block.getIntersect(canvas.bounds), realBounds = new Bounds(bounds);
7649
7669
  canvas.save();
7650
7670
  bounds.spread(Renderer.clipSpread).ceil();
7651
- canvas.clearWorld(bounds);
7652
- canvas.clipWorld(bounds);
7671
+ const {ceilPartPixel: ceilPartPixel} = this.config;
7672
+ canvas.clipWorld(bounds, ceilPartPixel);
7673
+ canvas.clearWorld(bounds, ceilPartPixel);
7653
7674
  this.__render(bounds, realBounds);
7654
7675
  canvas.restore();
7655
7676
  Run.end(t);
@@ -7848,11 +7869,7 @@ const ColorConvert = {
7848
7869
  hasTransparent: hasTransparent$3
7849
7870
  };
7850
7871
 
7851
- const UnitConvert = {
7852
- number(value, percentRefer) {
7853
- return isObject(value) ? value.type === "percent" ? value.value * percentRefer : value.value : value;
7854
- }
7855
- };
7872
+ const UnitConvert = UnitConvertHelper;
7856
7873
 
7857
7874
  const PathArrow = {};
7858
7875
 
@@ -7929,16 +7946,16 @@ class UIData extends LeafData {
7929
7946
  return t.fill || t.stroke;
7930
7947
  }
7931
7948
  get __autoWidth() {
7932
- return !this._width;
7949
+ return this._width == null;
7933
7950
  }
7934
7951
  get __autoHeight() {
7935
- return !this._height;
7952
+ return this._height == null;
7936
7953
  }
7937
7954
  get __autoSide() {
7938
- return !this._width || !this._height;
7955
+ return this._width == null || this._height == null;
7939
7956
  }
7940
7957
  get __autoSize() {
7941
- return !this._width && !this._height;
7958
+ return this._width == null && this._height == null;
7942
7959
  }
7943
7960
  setVisible(value) {
7944
7961
  this._visible = value;
@@ -9222,9 +9239,10 @@ let Ellipse = class Ellipse extends UI {
9222
9239
  const {width: width, height: height, innerRadius: innerRadius, startAngle: startAngle, endAngle: endAngle} = this.__;
9223
9240
  const rx = width / 2, ry = height / 2;
9224
9241
  const path = this.__.path = [];
9242
+ let open;
9225
9243
  if (innerRadius) {
9226
9244
  if (startAngle || endAngle) {
9227
- if (innerRadius < 1) ellipse(path, rx, ry, rx * innerRadius, ry * innerRadius, 0, startAngle, endAngle, false);
9245
+ if (innerRadius < 1) ellipse(path, rx, ry, rx * innerRadius, ry * innerRadius, 0, startAngle, endAngle, false); else open = true;
9228
9246
  ellipse(path, rx, ry, rx, ry, 0, endAngle, startAngle, true);
9229
9247
  } else {
9230
9248
  if (innerRadius < 1) {
@@ -9241,7 +9259,7 @@ let Ellipse = class Ellipse extends UI {
9241
9259
  ellipse(path, rx, ry, rx, ry);
9242
9260
  }
9243
9261
  }
9244
- closePath$2(path);
9262
+ if (!open) closePath$2(path);
9245
9263
  if (Platform.ellipseToCurve) this.__.path = this.getPath(true);
9246
9264
  }
9247
9265
  };
@@ -10173,7 +10191,7 @@ function getPatternData(paint, box, image) {
10173
10191
  if (paint.padding) box = tempBox.set(box).shrink(paint.padding);
10174
10192
  if (paint.mode === "strench") paint.mode = "stretch";
10175
10193
  const {width: width, height: height} = image;
10176
- 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;
10194
+ 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;
10177
10195
  const sameBox = box.width === width && box.height === height;
10178
10196
  const data = {
10179
10197
  mode: mode
@@ -10239,6 +10257,10 @@ function getPatternData(paint, box, image) {
10239
10257
  if (opacity && opacity < 1) data.opacity = opacity;
10240
10258
  if (filters) data.filters = filters;
10241
10259
  if (repeat) data.repeat = isString(repeat) ? repeat === "x" ? "repeat-x" : "repeat-y" : "repeat";
10260
+ if (interlace) data.interlace = isNumber(interlace) || interlace.type === "percent" ? {
10261
+ type: "x",
10262
+ offset: interlace
10263
+ } : interlace;
10242
10264
  return data;
10243
10265
  }
10244
10266
 
@@ -10372,7 +10394,7 @@ function createPattern(paint, ui, canvas, renderOptions) {
10372
10394
  if (transform) copy$1(imageMatrix, transform);
10373
10395
  scale(imageMatrix, 1 / scaleX, 1 / scaleY);
10374
10396
  }
10375
- const imageCanvas = image.getCanvas(width, height, data.opacity, data.filters, xGap, yGap, ui.leafer && ui.leafer.config.smooth);
10397
+ const imageCanvas = image.getCanvas(width, height, data.opacity, data.filters, xGap, yGap, ui.leafer && ui.leafer.config.smooth, data.interlace);
10376
10398
  const pattern = image.getPattern(imageCanvas, data.repeat || (Platform.origin.noRepeat || "no-repeat"), imageMatrix, paint);
10377
10399
  paint.style = pattern;
10378
10400
  paint.patternId = id;
@@ -10394,8 +10416,8 @@ function getPatternFixScale(paint, imageScaleX, imageScaleY) {
10394
10416
 
10395
10417
  function checkImage(paint, drawImage, ui, canvas, renderOptions) {
10396
10418
  const {scaleX: scaleX, scaleY: scaleY} = PaintImage.getImageRenderScaleData(paint, ui, canvas, renderOptions);
10397
- const {image: image, data: data, originPaint: originPaint} = paint, {exporting: exporting} = renderOptions;
10398
- if (!data || paint.patternId === scaleX + "-" + scaleY && !exporting) {
10419
+ const {image: image, data: data, originPaint: originPaint} = paint, {exporting: exporting, snapshot: snapshot} = renderOptions;
10420
+ if (!data || paint.patternId === scaleX + "-" + scaleY && !exporting || snapshot) {
10399
10421
  return false;
10400
10422
  } else {
10401
10423
  if (drawImage) {
@@ -11069,7 +11091,7 @@ const TextMode = 2;
11069
11091
 
11070
11092
  function layoutChar(drawData, style, width, _height) {
11071
11093
  const {rows: rows} = drawData;
11072
- const {textAlign: textAlign, paraIndent: paraIndent, letterSpacing: letterSpacing} = style;
11094
+ const {textAlign: textAlign, paraIndent: paraIndent, __letterSpacing: __letterSpacing} = style;
11073
11095
  const justifyLast = width && textAlign.includes("both");
11074
11096
  const justify = justifyLast || width && textAlign.includes("justify");
11075
11097
  const justifyLetter = justify && textAlign.includes("letter");
@@ -11082,8 +11104,8 @@ function layoutChar(drawData, style, width, _height) {
11082
11104
  remainingWidth = width - row.width - indentWidth;
11083
11105
  if (justifyLetter) addLetterWidth = remainingWidth / (row.words.reduce((total, item) => total + item.data.length, 0) - 1); else addWordWidth = wordsLength > 1 ? remainingWidth / (wordsLength - 1) : 0;
11084
11106
  }
11085
- mode = letterSpacing || row.isOverflow || justifyLetter ? CharMode : addWordWidth ? WordMode : TextMode;
11086
- if (row.isOverflow && !letterSpacing) row.textMode = true;
11107
+ mode = __letterSpacing || row.isOverflow || justifyLetter ? CharMode : addWordWidth ? WordMode : TextMode;
11108
+ if (row.isOverflow && !__letterSpacing) row.textMode = true;
11087
11109
  if (mode === TextMode) {
11088
11110
  row.x += indentWidth;
11089
11111
  toTextChar$1(row);
@@ -11152,7 +11174,7 @@ function layoutText(drawData, style) {
11152
11174
  let {x: x, y: y, width: width, height: height} = bounds, realHeight = __lineHeight * countRows + (paraSpacing ? paraSpacing * (drawData.paraNumber - 1) : 0);
11153
11175
  let starY = __baseLine;
11154
11176
  if (__clipText && realHeight > height) {
11155
- realHeight = Math.max(height, __lineHeight);
11177
+ realHeight = Math.max(style.__autoHeight ? realHeight : height, __lineHeight);
11156
11178
  if (countRows > 1) drawData.overflow = countRows;
11157
11179
  } else if (height || autoSizeAlign) {
11158
11180
  switch (verticalAlign) {
@@ -11209,10 +11231,10 @@ function layoutText(drawData, style) {
11209
11231
  }
11210
11232
 
11211
11233
  function clipText(drawData, style, x, width) {
11212
- if (!width) return;
11213
11234
  const {rows: rows, overflow: overflow} = drawData;
11214
11235
  let {textOverflow: textOverflow} = style;
11215
- rows.splice(overflow);
11236
+ if (overflow) rows.splice(overflow);
11237
+ if (!width) return;
11216
11238
  if (textOverflow && textOverflow !== "show") {
11217
11239
  if (textOverflow === "hide") textOverflow = ""; else if (textOverflow === "ellipsis") textOverflow = "...";
11218
11240
  let char, charRight;
@@ -11373,4 +11395,4 @@ try {
11373
11395
  if (wx) useCanvas("miniapp", wx);
11374
11396
  } catch (_a) {}
11375
11397
 
11376
- 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, 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 };
11398
+ 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, 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 };