@leafer-draw/worker 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.
package/dist/worker.js CHANGED
@@ -199,56 +199,6 @@ var LeaferUI = function(exports) {
199
199
  this.__input = this.__middle = null;
200
200
  }
201
201
  }
202
- const {floor: floor$2, max: max$4} = Math;
203
- const Platform = {
204
- toURL(text, fileType) {
205
- let url = encodeURIComponent(text);
206
- if (fileType === "text") url = "data:text/plain;charset=utf-8," + url; else if (fileType === "svg") url = "data:image/svg+xml," + url;
207
- return url;
208
- },
209
- image: {
210
- hitCanvasSize: 100,
211
- maxCacheSize: 2560 * 1600,
212
- maxPatternSize: 4096 * 2160,
213
- crossOrigin: "anonymous",
214
- isLarge(size, scaleX, scaleY, largeSize) {
215
- return size.width * size.height * (scaleX ? scaleX * scaleY : 1) > (largeSize || image$1.maxCacheSize);
216
- },
217
- isSuperLarge(size, scaleX, scaleY) {
218
- return image$1.isLarge(size, scaleX, scaleY, image$1.maxPatternSize);
219
- },
220
- getRealURL(url) {
221
- const {prefix: prefix, suffix: suffix} = Platform.image;
222
- if (suffix && !url.startsWith("data:") && !url.startsWith("blob:")) url += (url.includes("?") ? "&" : "?") + suffix;
223
- if (prefix && url[0] === "/") url = prefix + url;
224
- return url;
225
- },
226
- resize(image, width, height, xGap, yGap, clip, smooth, opacity, _filters) {
227
- const canvas = Platform.origin.createCanvas(max$4(floor$2(width + (xGap || 0)), 1), max$4(floor$2(height + (yGap || 0)), 1));
228
- const ctx = canvas.getContext("2d");
229
- if (opacity) ctx.globalAlpha = opacity;
230
- ctx.imageSmoothingEnabled = smooth === false ? false : true;
231
- if (image) {
232
- if (clip) {
233
- const scaleX = width / clip.width, scaleY = height / clip.height;
234
- ctx.setTransform(scaleX, 0, 0, scaleY, -clip.x * scaleX, -clip.y * scaleY);
235
- ctx.drawImage(image, 0, 0, image.width, image.height);
236
- } else ctx.drawImage(image, 0, 0, width, height);
237
- }
238
- return canvas;
239
- },
240
- setPatternTransform(pattern, transform, paint) {
241
- try {
242
- if (transform && pattern.setTransform) {
243
- pattern.setTransform(transform);
244
- transform = undefined;
245
- }
246
- } catch (_a) {}
247
- if (paint) DataHelper.stintSet(paint, "transform", transform);
248
- }
249
- }
250
- };
251
- const {image: image$1} = Platform;
252
202
  const IncrementId = {
253
203
  RUNTIME: "runtime",
254
204
  LEAF: "leaf",
@@ -268,7 +218,7 @@ var LeaferUI = function(exports) {
268
218
  };
269
219
  const I$1 = IncrementId;
270
220
  let tempA, tempB, tempTo;
271
- const {max: max$3} = Math, tempFour = [ 0, 0, 0, 0 ];
221
+ const {max: max$4} = Math, tempFour = [ 0, 0, 0, 0 ];
272
222
  const FourNumberHelper = {
273
223
  zero: [ ...tempFour ],
274
224
  tempFour: tempFour,
@@ -319,9 +269,9 @@ var LeaferUI = function(exports) {
319
269
  return data;
320
270
  },
321
271
  max(t, other, change) {
322
- if (isNumber(t) && isNumber(other)) return max$3(t, other);
272
+ if (isNumber(t) && isNumber(other)) return max$4(t, other);
323
273
  toTempAB(t, other, change);
324
- 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]));
274
+ 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]));
325
275
  },
326
276
  add(t, other, change) {
327
277
  if (isNumber(t) && isNumber(other)) return t + other;
@@ -336,7 +286,7 @@ var LeaferUI = function(exports) {
336
286
  }
337
287
  };
338
288
  const {set: set$2, get: get$5, setTemp: setTemp, toTempAB: toTempAB} = FourNumberHelper;
339
- const {round: round$3, pow: pow$1, max: max$2, floor: floor$1, PI: PI$3} = Math;
289
+ const {round: round$3, pow: pow$1, max: max$3, floor: floor$2, PI: PI$3} = Math;
340
290
  const MathHelper = {
341
291
  within(value, min, max) {
342
292
  if (isObject(min)) max = min.max, min = min.min;
@@ -389,7 +339,7 @@ var LeaferUI = function(exports) {
389
339
  }
390
340
  },
391
341
  getFloorScale(num, min = 1) {
392
- return max$2(floor$1(num), min) / num;
342
+ return max$3(floor$2(num), min) / num;
393
343
  },
394
344
  randInt: randInt,
395
345
  randColor(opacity) {
@@ -1195,7 +1145,7 @@ var LeaferUI = function(exports) {
1195
1145
  const {tempPointBounds: tempPointBounds$1, setPoint: setPoint$2, addPoint: addPoint$2, toBounds: toBounds$2} = TwoPointBoundsHelper;
1196
1146
  const {toOuterPoint: toOuterPoint$2} = MatrixHelper;
1197
1147
  const {float: float, fourNumber: fourNumber} = MathHelper;
1198
- const {floor: floor, ceil: ceil$1} = Math;
1148
+ const {floor: floor$1, ceil: ceil$1} = Math;
1199
1149
  let right$1, bottom$1, boundsRight, boundsBottom;
1200
1150
  const point = {};
1201
1151
  const toPoint$4 = {};
@@ -1347,8 +1297,8 @@ var LeaferUI = function(exports) {
1347
1297
  },
1348
1298
  ceil(t) {
1349
1299
  const {x: x, y: y} = t;
1350
- t.x = floor(t.x);
1351
- t.y = floor(t.y);
1300
+ t.x = floor$1(t.x);
1301
+ t.y = floor$1(t.y);
1352
1302
  t.width = x > t.x ? ceil$1(t.width + x - t.x) : ceil$1(t.width);
1353
1303
  t.height = y > t.y ? ceil$1(t.height + y - t.y) : ceil$1(t.height);
1354
1304
  },
@@ -1480,6 +1430,9 @@ var LeaferUI = function(exports) {
1480
1430
  isEmpty(t) {
1481
1431
  return t.x === 0 && t.y === 0 && t.width === 0 && t.height === 0;
1482
1432
  },
1433
+ hasSize(t) {
1434
+ return t.width && t.height;
1435
+ },
1483
1436
  reset(t) {
1484
1437
  B.set(t);
1485
1438
  }
@@ -1650,6 +1603,11 @@ var LeaferUI = function(exports) {
1650
1603
  return new Bounds(left, top, width ? width : parent.width - left - right, height ? height : parent.height - top - bottom);
1651
1604
  }
1652
1605
  }
1606
+ const UnitConvertHelper = {
1607
+ number(value, percentRefer) {
1608
+ return isObject(value) ? value.type === "percent" ? value.value * percentRefer : value.value : value;
1609
+ }
1610
+ };
1653
1611
  const StringNumberMap = {
1654
1612
  0: 1,
1655
1613
  1: 1,
@@ -1665,6 +1623,66 @@ var LeaferUI = function(exports) {
1665
1623
  e: 1,
1666
1624
  E: 1
1667
1625
  };
1626
+ const {floor: floor, max: max$2} = Math;
1627
+ const Platform = {
1628
+ toURL(text, fileType) {
1629
+ let url = encodeURIComponent(text);
1630
+ if (fileType === "text") url = "data:text/plain;charset=utf-8," + url; else if (fileType === "svg") url = "data:image/svg+xml," + url;
1631
+ return url;
1632
+ },
1633
+ image: {
1634
+ hitCanvasSize: 100,
1635
+ maxCacheSize: 2560 * 1600,
1636
+ maxPatternSize: 4096 * 2160,
1637
+ crossOrigin: "anonymous",
1638
+ isLarge(size, scaleX, scaleY, largeSize) {
1639
+ return size.width * size.height * (scaleX ? scaleX * scaleY : 1) > (largeSize || image$1.maxCacheSize);
1640
+ },
1641
+ isSuperLarge(size, scaleX, scaleY) {
1642
+ return image$1.isLarge(size, scaleX, scaleY, image$1.maxPatternSize);
1643
+ },
1644
+ getRealURL(url) {
1645
+ const {prefix: prefix, suffix: suffix} = image$1;
1646
+ if (suffix && !url.startsWith("data:") && !url.startsWith("blob:")) url += (url.includes("?") ? "&" : "?") + suffix;
1647
+ if (prefix && url[0] === "/") url = prefix + url;
1648
+ return url;
1649
+ },
1650
+ resize(view, width, height, xGap, yGap, clip, smooth, opacity, _filters, interlace) {
1651
+ const realWidth = max$2(floor(width + (xGap || 0)), 1), realHeight = max$2(floor(height + (yGap || 0)), 1);
1652
+ let interlaceX, interlaceY, interlaceOffset;
1653
+ if (interlace && (interlaceOffset = UnitConvertHelper.number(interlace.offset, interlace.type === "x" ? width : height))) interlace.type === "x" ? interlaceX = true : interlaceY = true;
1654
+ const canvas = Platform.origin.createCanvas(interlaceY ? realWidth * 2 : realWidth, interlaceX ? realHeight * 2 : realHeight);
1655
+ const ctx = canvas.getContext("2d");
1656
+ if (opacity) ctx.globalAlpha = opacity;
1657
+ ctx.imageSmoothingEnabled = smooth === false ? false : true;
1658
+ if (image$1.canUse(view)) {
1659
+ if (clip) {
1660
+ const scaleX = width / clip.width, scaleY = height / clip.height;
1661
+ ctx.setTransform(scaleX, 0, 0, scaleY, -clip.x * scaleX, -clip.y * scaleY);
1662
+ ctx.drawImage(view, 0, 0, view.width, view.height);
1663
+ } else ctx.drawImage(view, 0, 0, width, height);
1664
+ if (interlaceOffset) {
1665
+ ctx.drawImage(canvas, 0, 0, realWidth, realHeight, interlaceX ? interlaceOffset - realWidth : realWidth, interlaceX ? realHeight : interlaceOffset - realHeight, realWidth, realHeight);
1666
+ ctx.drawImage(canvas, 0, 0, realWidth, realHeight, interlaceX ? interlaceOffset : realWidth, interlaceX ? realHeight : interlaceOffset, realWidth, realHeight);
1667
+ }
1668
+ }
1669
+ return canvas;
1670
+ },
1671
+ canUse(view) {
1672
+ return view && view.width && !view.__closed;
1673
+ },
1674
+ setPatternTransform(pattern, transform, paint) {
1675
+ try {
1676
+ if (transform && pattern.setTransform) {
1677
+ pattern.setTransform(transform);
1678
+ transform = undefined;
1679
+ }
1680
+ } catch (_a) {}
1681
+ if (paint) DataHelper.stintSet(paint, "transform", transform);
1682
+ }
1683
+ }
1684
+ };
1685
+ const {image: image$1} = Platform;
1668
1686
  const {randColor: randColor} = MathHelper;
1669
1687
  class Debug {
1670
1688
  constructor(name) {
@@ -3096,10 +3114,10 @@ var LeaferUI = function(exports) {
3096
3114
  data.push(O$2, x, y, radius, startAngle, endAngle, anticlockwise ? 1 : 0);
3097
3115
  }
3098
3116
  },
3099
- arcTo(data, x1, y1, x2, y2, radius, lastX, lastY) {
3117
+ arcTo(data, x1, y1, x2, y2, radius, lastX, lastY, fullRadius) {
3100
3118
  if (!isUndefined(lastX)) {
3101
- const d = getMinDistanceFrom(lastX, lastY, x1, y1, x2, y2);
3102
- radius = min(radius, min(d / 2, d / 2 * abs$2(tan(getRadianFrom(lastX, lastY, x1, y1, x2, y2) / 2))));
3119
+ const r = getMinDistanceFrom(lastX, lastY, x1, y1, x2, y2) / (fullRadius ? 1 : 2);
3120
+ radius = min(radius, min(r, r * abs$2(tan(getRadianFrom(lastX, lastY, x1, y1, x2, y2) / 2))));
3103
3121
  }
3104
3122
  data.push(U$2, x1, y1, x2, y2, radius);
3105
3123
  },
@@ -3424,7 +3442,7 @@ var LeaferUI = function(exports) {
3424
3442
  let command, lastCommand, commandLen;
3425
3443
  let i = 0, x = 0, y = 0, startX = 0, startY = 0, secondX = 0, secondY = 0, lastX = 0, lastY = 0;
3426
3444
  if (isArray(cornerRadius)) cornerRadius = cornerRadius[0] || 0;
3427
- const len = data.length;
3445
+ const len = data.length, three = len === 9;
3428
3446
  const smooth = [];
3429
3447
  while (i < len) {
3430
3448
  command = data[i];
@@ -3436,7 +3454,7 @@ var LeaferUI = function(exports) {
3436
3454
  if (data[i] === L$1) {
3437
3455
  secondX = data[i + 1];
3438
3456
  secondY = data[i + 2];
3439
- smooth.push(M, getCenterX(startX, secondX), getCenterY(startY, secondY));
3457
+ three ? smooth.push(M, startX, startY) : smooth.push(M, getCenterX(startX, secondX), getCenterY(startY, secondY));
3440
3458
  } else {
3441
3459
  smooth.push(M, startX, startY);
3442
3460
  }
@@ -3448,11 +3466,11 @@ var LeaferUI = function(exports) {
3448
3466
  i += 3;
3449
3467
  switch (data[i]) {
3450
3468
  case L$1:
3451
- arcTo(smooth, x, y, data[i + 1], data[i + 2], cornerRadius, lastX, lastY);
3469
+ arcTo(smooth, x, y, data[i + 1], data[i + 2], cornerRadius, lastX, lastY, three);
3452
3470
  break;
3453
3471
 
3454
3472
  case Z:
3455
- arcTo(smooth, x, y, startX, startY, cornerRadius, lastX, lastY);
3473
+ arcTo(smooth, x, y, startX, startY, cornerRadius, lastX, lastY, three);
3456
3474
  break;
3457
3475
 
3458
3476
  default:
@@ -3464,7 +3482,7 @@ var LeaferUI = function(exports) {
3464
3482
 
3465
3483
  case Z:
3466
3484
  if (lastCommand !== Z) {
3467
- arcTo(smooth, startX, startY, secondX, secondY, cornerRadius, lastX, lastY);
3485
+ arcTo(smooth, startX, startY, secondX, secondY, cornerRadius, lastX, lastY, three);
3468
3486
  smooth.push(Z);
3469
3487
  }
3470
3488
  i += 1;
@@ -3551,9 +3569,10 @@ var LeaferUI = function(exports) {
3551
3569
  run() {
3552
3570
  return __awaiter(this, void 0, void 0, function*() {
3553
3571
  try {
3554
- if (this.isComplete) return;
3572
+ if (this.isComplete || this.runing) return;
3573
+ this.runing = true;
3555
3574
  if (this.canUse && !this.canUse()) return this.cancel();
3556
- if (this.task && this.parent.running) yield this.task();
3575
+ if (this.task) yield this.task();
3557
3576
  } catch (error) {
3558
3577
  debug$8.error(error);
3559
3578
  }
@@ -3668,7 +3687,7 @@ var LeaferUI = function(exports) {
3668
3687
  stop() {
3669
3688
  this.isComplete = true;
3670
3689
  this.list.forEach(task => {
3671
- if (!task.isComplete) task.cancel();
3690
+ if (!task.isComplete) task.run();
3672
3691
  });
3673
3692
  this.pause();
3674
3693
  this.empty();
@@ -3951,7 +3970,7 @@ var LeaferUI = function(exports) {
3951
3970
  getFull(_filters) {
3952
3971
  return this.view;
3953
3972
  }
3954
- getCanvas(width, height, opacity, filters, xGap, yGap, smooth) {
3973
+ getCanvas(width, height, opacity, filters, xGap, yGap, smooth, interlace) {
3955
3974
  width || (width = this.width);
3956
3975
  height || (height = this.height);
3957
3976
  if (this.cache) {
@@ -3964,7 +3983,7 @@ var LeaferUI = function(exports) {
3964
3983
  }
3965
3984
  if (data) return data;
3966
3985
  }
3967
- const canvas = Platform.image.resize(this.view, width, height, xGap, yGap, undefined, smooth, opacity, filters);
3986
+ const canvas = Platform.image.resize(this.view, width, height, xGap, yGap, undefined, smooth, opacity, filters, interlace);
3968
3987
  this.cache = this.use > 1 ? {
3969
3988
  data: canvas,
3970
3989
  params: arguments
@@ -5706,7 +5725,7 @@ var LeaferUI = function(exports) {
5706
5725
  if (this.__layout.opacityChanged) this.__layout.opacityChanged = false;
5707
5726
  }
5708
5727
  };
5709
- const {excludeRenderBounds: excludeRenderBounds$1} = LeafBoundsHelper;
5728
+ const {excludeRenderBounds: excludeRenderBounds$1} = LeafBoundsHelper, {hasSize: hasSize} = BoundsHelper;
5710
5729
  const BranchRender = {
5711
5730
  __updateChange() {
5712
5731
  const {__layout: layout} = this;
@@ -5717,8 +5736,8 @@ var LeaferUI = function(exports) {
5717
5736
  this.__.__checkSingle();
5718
5737
  },
5719
5738
  __render(canvas, options) {
5720
- this.__nowWorld = this.__getNowWorld(options);
5721
- if (this.__worldOpacity) {
5739
+ const nowWorld = this.__nowWorld = this.__getNowWorld(options);
5740
+ if (this.__worldOpacity && hasSize(nowWorld)) {
5722
5741
  const data = this.__;
5723
5742
  if (data.__useDim) {
5724
5743
  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);
@@ -5727,7 +5746,6 @@ var LeaferUI = function(exports) {
5727
5746
  if (data.eraser === "path") return this.__renderEraser(canvas, options);
5728
5747
  const tempCanvas = canvas.getSameCanvas(false, true);
5729
5748
  this.__renderBranch(tempCanvas, options);
5730
- const nowWorld = this.__nowWorld;
5731
5749
  canvas.opacity = options.dimOpacity ? data.opacity * options.dimOpacity : data.opacity;
5732
5750
  canvas.copyWorldByReset(tempCanvas, nowWorld, nowWorld, data.__blendMode, true);
5733
5751
  tempCanvas.recycle(nowWorld);
@@ -6549,7 +6567,7 @@ var LeaferUI = function(exports) {
6549
6567
  this.levelMap = null;
6550
6568
  }
6551
6569
  }
6552
- const version = "1.12.4";
6570
+ const version = "2.0.1";
6553
6571
  class LeaferCanvas extends LeaferCanvasBase {
6554
6572
  get allowBackgroundColor() {
6555
6573
  return true;
@@ -6949,6 +6967,7 @@ var LeaferUI = function(exports) {
6949
6967
  this.times = 0;
6950
6968
  this.config = {
6951
6969
  usePartRender: true,
6970
+ ceilPartPixel: true,
6952
6971
  maxFPS: 120
6953
6972
  };
6954
6973
  this.frames = [];
@@ -7057,8 +7076,9 @@ var LeaferUI = function(exports) {
7057
7076
  const {canvas: canvas} = this, bounds = block.getIntersect(canvas.bounds), realBounds = new Bounds(bounds);
7058
7077
  canvas.save();
7059
7078
  bounds.spread(Renderer.clipSpread).ceil();
7060
- canvas.clearWorld(bounds);
7061
- canvas.clipWorld(bounds);
7079
+ const {ceilPartPixel: ceilPartPixel} = this.config;
7080
+ canvas.clipWorld(bounds, ceilPartPixel);
7081
+ canvas.clearWorld(bounds, ceilPartPixel);
7062
7082
  this.__render(bounds, realBounds);
7063
7083
  canvas.restore();
7064
7084
  Run.end(t);
@@ -7245,11 +7265,7 @@ var LeaferUI = function(exports) {
7245
7265
  const ColorConvert = {
7246
7266
  hasTransparent: hasTransparent$3
7247
7267
  };
7248
- const UnitConvert = {
7249
- number(value, percentRefer) {
7250
- return isObject(value) ? value.type === "percent" ? value.value * percentRefer : value.value : value;
7251
- }
7252
- };
7268
+ const UnitConvert = UnitConvertHelper;
7253
7269
  const PathArrow = {};
7254
7270
  const Paint = {};
7255
7271
  const PaintImage = {};
@@ -7312,16 +7328,16 @@ var LeaferUI = function(exports) {
7312
7328
  return t.fill || t.stroke;
7313
7329
  }
7314
7330
  get __autoWidth() {
7315
- return !this._width;
7331
+ return this._width == null;
7316
7332
  }
7317
7333
  get __autoHeight() {
7318
- return !this._height;
7334
+ return this._height == null;
7319
7335
  }
7320
7336
  get __autoSide() {
7321
- return !this._width || !this._height;
7337
+ return this._width == null || this._height == null;
7322
7338
  }
7323
7339
  get __autoSize() {
7324
- return !this._width && !this._height;
7340
+ return this._width == null && this._height == null;
7325
7341
  }
7326
7342
  setVisible(value) {
7327
7343
  this._visible = value;
@@ -8467,9 +8483,10 @@ var LeaferUI = function(exports) {
8467
8483
  const {width: width, height: height, innerRadius: innerRadius, startAngle: startAngle, endAngle: endAngle} = this.__;
8468
8484
  const rx = width / 2, ry = height / 2;
8469
8485
  const path = this.__.path = [];
8486
+ let open;
8470
8487
  if (innerRadius) {
8471
8488
  if (startAngle || endAngle) {
8472
- if (innerRadius < 1) ellipse(path, rx, ry, rx * innerRadius, ry * innerRadius, 0, startAngle, endAngle, false);
8489
+ if (innerRadius < 1) ellipse(path, rx, ry, rx * innerRadius, ry * innerRadius, 0, startAngle, endAngle, false); else open = true;
8473
8490
  ellipse(path, rx, ry, rx, ry, 0, endAngle, startAngle, true);
8474
8491
  } else {
8475
8492
  if (innerRadius < 1) {
@@ -8486,7 +8503,7 @@ var LeaferUI = function(exports) {
8486
8503
  ellipse(path, rx, ry, rx, ry);
8487
8504
  }
8488
8505
  }
8489
- closePath$2(path);
8506
+ if (!open) closePath$2(path);
8490
8507
  if (Platform.ellipseToCurve) this.__.path = this.getPath(true);
8491
8508
  }
8492
8509
  };
@@ -9298,7 +9315,7 @@ var LeaferUI = function(exports) {
9298
9315
  if (paint.padding) box = tempBox.set(box).shrink(paint.padding);
9299
9316
  if (paint.mode === "strench") paint.mode = "stretch";
9300
9317
  const {width: width, height: height} = image;
9301
- 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;
9318
+ 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;
9302
9319
  const sameBox = box.width === width && box.height === height;
9303
9320
  const data = {
9304
9321
  mode: mode
@@ -9364,6 +9381,10 @@ var LeaferUI = function(exports) {
9364
9381
  if (opacity && opacity < 1) data.opacity = opacity;
9365
9382
  if (filters) data.filters = filters;
9366
9383
  if (repeat) data.repeat = isString(repeat) ? repeat === "x" ? "repeat-x" : "repeat-y" : "repeat";
9384
+ if (interlace) data.interlace = isNumber(interlace) || interlace.type === "percent" ? {
9385
+ type: "x",
9386
+ offset: interlace
9387
+ } : interlace;
9367
9388
  return data;
9368
9389
  }
9369
9390
  function getGapData(gap, repeat, width, height, box) {
@@ -9484,7 +9505,7 @@ var LeaferUI = function(exports) {
9484
9505
  if (transform) copy$1(imageMatrix, transform);
9485
9506
  scale(imageMatrix, 1 / scaleX, 1 / scaleY);
9486
9507
  }
9487
- const imageCanvas = image.getCanvas(width, height, data.opacity, data.filters, xGap, yGap, ui.leafer && ui.leafer.config.smooth);
9508
+ const imageCanvas = image.getCanvas(width, height, data.opacity, data.filters, xGap, yGap, ui.leafer && ui.leafer.config.smooth, data.interlace);
9488
9509
  const pattern = image.getPattern(imageCanvas, data.repeat || (Platform.origin.noRepeat || "no-repeat"), imageMatrix, paint);
9489
9510
  paint.style = pattern;
9490
9511
  paint.patternId = id;
@@ -9504,8 +9525,8 @@ var LeaferUI = function(exports) {
9504
9525
  }
9505
9526
  function checkImage(paint, drawImage, ui, canvas, renderOptions) {
9506
9527
  const {scaleX: scaleX, scaleY: scaleY} = PaintImage.getImageRenderScaleData(paint, ui, canvas, renderOptions);
9507
- const {image: image, data: data, originPaint: originPaint} = paint, {exporting: exporting} = renderOptions;
9508
- if (!data || paint.patternId === scaleX + "-" + scaleY && !exporting) {
9528
+ const {image: image, data: data, originPaint: originPaint} = paint, {exporting: exporting, snapshot: snapshot} = renderOptions;
9529
+ if (!data || paint.patternId === scaleX + "-" + scaleY && !exporting || snapshot) {
9509
9530
  return false;
9510
9531
  } else {
9511
9532
  if (drawImage) {
@@ -10098,7 +10119,7 @@ var LeaferUI = function(exports) {
10098
10119
  const TextMode = 2;
10099
10120
  function layoutChar(drawData, style, width, _height) {
10100
10121
  const {rows: rows} = drawData;
10101
- const {textAlign: textAlign, paraIndent: paraIndent, letterSpacing: letterSpacing} = style;
10122
+ const {textAlign: textAlign, paraIndent: paraIndent, __letterSpacing: __letterSpacing} = style;
10102
10123
  const justifyLast = width && textAlign.includes("both");
10103
10124
  const justify = justifyLast || width && textAlign.includes("justify");
10104
10125
  const justifyLetter = justify && textAlign.includes("letter");
@@ -10111,8 +10132,8 @@ var LeaferUI = function(exports) {
10111
10132
  remainingWidth = width - row.width - indentWidth;
10112
10133
  if (justifyLetter) addLetterWidth = remainingWidth / (row.words.reduce((total, item) => total + item.data.length, 0) - 1); else addWordWidth = wordsLength > 1 ? remainingWidth / (wordsLength - 1) : 0;
10113
10134
  }
10114
- mode = letterSpacing || row.isOverflow || justifyLetter ? CharMode : addWordWidth ? WordMode : TextMode;
10115
- if (row.isOverflow && !letterSpacing) row.textMode = true;
10135
+ mode = __letterSpacing || row.isOverflow || justifyLetter ? CharMode : addWordWidth ? WordMode : TextMode;
10136
+ if (row.isOverflow && !__letterSpacing) row.textMode = true;
10116
10137
  if (mode === TextMode) {
10117
10138
  row.x += indentWidth;
10118
10139
  toTextChar$1(row);
@@ -10177,7 +10198,7 @@ var LeaferUI = function(exports) {
10177
10198
  let {x: x, y: y, width: width, height: height} = bounds, realHeight = __lineHeight * countRows + (paraSpacing ? paraSpacing * (drawData.paraNumber - 1) : 0);
10178
10199
  let starY = __baseLine;
10179
10200
  if (__clipText && realHeight > height) {
10180
- realHeight = Math.max(height, __lineHeight);
10201
+ realHeight = Math.max(style.__autoHeight ? realHeight : height, __lineHeight);
10181
10202
  if (countRows > 1) drawData.overflow = countRows;
10182
10203
  } else if (height || autoSizeAlign) {
10183
10204
  switch (verticalAlign) {
@@ -10233,10 +10254,10 @@ var LeaferUI = function(exports) {
10233
10254
  bounds.height = realHeight;
10234
10255
  }
10235
10256
  function clipText(drawData, style, x, width) {
10236
- if (!width) return;
10237
10257
  const {rows: rows, overflow: overflow} = drawData;
10238
10258
  let {textOverflow: textOverflow} = style;
10239
- rows.splice(overflow);
10259
+ if (overflow) rows.splice(overflow);
10260
+ if (!width) return;
10240
10261
  if (textOverflow && textOverflow !== "show") {
10241
10262
  if (textOverflow === "hide") textOverflow = ""; else if (textOverflow === "ellipsis") textOverflow = "...";
10242
10263
  let char, charRight;
@@ -10483,6 +10504,7 @@ var LeaferUI = function(exports) {
10483
10504
  exports.UIData = UIData;
10484
10505
  exports.UIRender = UIRender;
10485
10506
  exports.UnitConvert = UnitConvert;
10507
+ exports.UnitConvertHelper = UnitConvertHelper;
10486
10508
  exports.WaitHelper = WaitHelper;
10487
10509
  exports.WatchEvent = WatchEvent;
10488
10510
  exports.Watcher = Watcher;