@leafer-draw/miniapp 1.7.0 → 1.8.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.
@@ -436,7 +436,7 @@ const MatrixHelper = {
436
436
  const M$6 = MatrixHelper;
437
437
 
438
438
  const { toInnerPoint: toInnerPoint$2, toOuterPoint: toOuterPoint$3 } = MatrixHelper;
439
- const { sin: sin$4, cos: cos$4, abs: abs$4, sqrt: sqrt$2, atan2: atan2$2, min: min$1, round: round$2 } = Math;
439
+ const { sin: sin$4, cos: cos$4, abs: abs$3, sqrt: sqrt$2, atan2: atan2$2, min: min$1, round: round$2 } = Math;
440
440
  const PointHelper = {
441
441
  defaultPoint: getPointData(),
442
442
  tempPoint: {},
@@ -531,8 +531,8 @@ const PointHelper = {
531
531
  return getDistanceFrom(t.x, t.y, point.x, point.y);
532
532
  },
533
533
  getDistanceFrom(x1, y1, x2, y2) {
534
- const x = abs$4(x2 - x1);
535
- const y = abs$4(y2 - y1);
534
+ const x = abs$3(x2 - x1);
535
+ const y = abs$3(y2 - y1);
536
536
  return sqrt$2(x * x + y * y);
537
537
  },
538
538
  getMinDistanceFrom(x1, y1, x2, y2, x3, y3) {
@@ -763,7 +763,7 @@ class Matrix {
763
763
  MatrixHelper.reset(this);
764
764
  }
765
765
  }
766
- const tempMatrix = new Matrix();
766
+ const tempMatrix$1 = new Matrix();
767
767
 
768
768
  const TwoPointBoundsHelper = {
769
769
  tempPointBounds: {},
@@ -860,6 +860,12 @@ const AroundHelper = {
860
860
  }
861
861
  if (!onlyBoxSize)
862
862
  to.x += box.x, to.y += box.y;
863
+ },
864
+ getPoint(around, box, to) {
865
+ if (!to)
866
+ to = {};
867
+ AroundHelper.toPoint(around, box, to, true);
868
+ return to;
863
869
  }
864
870
  };
865
871
  function get$4(around) {
@@ -1788,10 +1794,13 @@ function contextAttr(realName) {
1788
1794
  return (target, key) => {
1789
1795
  if (!realName)
1790
1796
  realName = key;
1791
- Object.defineProperty(target, key, {
1797
+ const property = {
1792
1798
  get() { return this.context[realName]; },
1793
1799
  set(value) { this.context[realName] = value; }
1794
- });
1800
+ };
1801
+ if (key === 'strokeCap')
1802
+ property.set = function (value) { this.context[realName] = value === 'none' ? 'butt' : value; };
1803
+ Object.defineProperty(target, key, property);
1795
1804
  };
1796
1805
  }
1797
1806
  const contextMethodNameList = [];
@@ -2067,15 +2076,15 @@ __decorate([
2067
2076
  contextMethod()
2068
2077
  ], Canvas$1.prototype, "strokeText", null);
2069
2078
 
2070
- const { copy: copy$8, multiplyParent: multiplyParent$3 } = MatrixHelper, { round: round$1 } = Math;
2079
+ const { copy: copy$8, multiplyParent: multiplyParent$4 } = MatrixHelper, { round: round$1 } = Math;
2071
2080
  const minSize = { width: 1, height: 1, pixelRatio: 1 };
2072
2081
  const canvasSizeAttrs = ['width', 'height', 'pixelRatio'];
2073
2082
  class LeaferCanvasBase extends Canvas$1 {
2074
2083
  get width() { return this.size.width; }
2075
2084
  get height() { return this.size.height; }
2076
2085
  get pixelRatio() { return this.size.pixelRatio; }
2077
- get pixelWidth() { return this.width * this.pixelRatio; }
2078
- get pixelHeight() { return this.height * this.pixelRatio; }
2086
+ get pixelWidth() { return this.width * this.pixelRatio || 0; }
2087
+ get pixelHeight() { return this.height * this.pixelRatio || 0; }
2079
2088
  get pixelSnap() { return this.config.pixelSnap; }
2080
2089
  set pixelSnap(value) { this.config.pixelSnap = value; }
2081
2090
  get allowBackgroundColor() { return this.view && this.parentView; }
@@ -2140,7 +2149,7 @@ class LeaferCanvasBase extends Canvas$1 {
2140
2149
  setWorld(matrix, parentMatrix) {
2141
2150
  const { pixelRatio, pixelSnap } = this, w = this.worldTransform;
2142
2151
  if (parentMatrix)
2143
- multiplyParent$3(matrix, parentMatrix, w);
2152
+ multiplyParent$4(matrix, parentMatrix, w);
2144
2153
  w.a = matrix.a * pixelRatio;
2145
2154
  w.b = matrix.b * pixelRatio;
2146
2155
  w.c = matrix.c * pixelRatio;
@@ -2162,20 +2171,33 @@ class LeaferCanvasBase extends Canvas$1 {
2162
2171
  if (w)
2163
2172
  this.setTransform(w.a, w.b, w.c, w.d, w.e, w.f);
2164
2173
  }
2165
- setStroke(color, strokeWidth, options) {
2174
+ setStroke(color, strokeWidth, options, childOptions) {
2166
2175
  if (strokeWidth)
2167
2176
  this.strokeWidth = strokeWidth;
2168
2177
  if (color)
2169
2178
  this.strokeStyle = color;
2170
2179
  if (options)
2171
- this.setStrokeOptions(options);
2172
- }
2173
- setStrokeOptions(options) {
2174
- this.strokeCap = options.strokeCap === 'none' ? 'butt' : options.strokeCap;
2175
- this.strokeJoin = options.strokeJoin;
2176
- this.dashPattern = options.dashPattern;
2177
- this.dashOffset = options.dashOffset;
2178
- this.miterLimit = options.miterLimit;
2180
+ this.setStrokeOptions(options, childOptions);
2181
+ }
2182
+ setStrokeOptions(options, childOptions) {
2183
+ let { strokeCap, strokeJoin, dashPattern, dashOffset, miterLimit } = options;
2184
+ if (childOptions) {
2185
+ if (childOptions.strokeCap)
2186
+ strokeCap = childOptions.strokeCap;
2187
+ if (childOptions.strokeJoin)
2188
+ strokeJoin = childOptions.strokeJoin;
2189
+ if (childOptions.dashPattern !== undefined)
2190
+ dashPattern = childOptions.dashPattern;
2191
+ if (childOptions.dashOffset !== undefined)
2192
+ dashOffset = childOptions.dashOffset;
2193
+ if (childOptions.miterLimit)
2194
+ miterLimit = childOptions.miterLimit;
2195
+ }
2196
+ this.strokeCap = strokeCap;
2197
+ this.strokeJoin = strokeJoin;
2198
+ this.dashPattern = dashPattern;
2199
+ this.dashOffset = dashOffset;
2200
+ this.miterLimit = miterLimit;
2179
2201
  }
2180
2202
  saveBlendMode(blendMode) {
2181
2203
  this.savedBlendMode = this.blendMode;
@@ -2409,7 +2431,7 @@ const RectHelper = {
2409
2431
  }
2410
2432
  };
2411
2433
 
2412
- const { sin: sin$3, cos: cos$3, atan2: atan2$1, ceil: ceil$1, abs: abs$3, PI: PI$2, sqrt: sqrt$1, pow } = Math;
2434
+ const { sin: sin$3, cos: cos$3, atan2: atan2$1, ceil: ceil$1, abs: abs$2, PI: PI$2, sqrt: sqrt$1, pow } = Math;
2413
2435
  const { setPoint: setPoint$1, addPoint: addPoint$1 } = TwoPointBoundsHelper;
2414
2436
  const { set, toNumberPoints } = PointHelper;
2415
2437
  const { M: M$5, L: L$6, C: C$4, Q: Q$4, Z: Z$5 } = PathCommandMap;
@@ -2484,7 +2506,7 @@ const BezierHelper = {
2484
2506
  let totalRadian = endRadian - startRadian;
2485
2507
  if (totalRadian < 0)
2486
2508
  totalRadian += PI2;
2487
- if (totalRadian === PI$2 || (abs$3(BAx + BAy) < 1.e-12) || (abs$3(CBx + CBy) < 1.e-12)) {
2509
+ if (totalRadian === PI$2 || (abs$2(BAx + BAy) < 1.e-12) || (abs$2(CBx + CBy) < 1.e-12)) {
2488
2510
  if (data)
2489
2511
  data.push(L$6, x1, y1);
2490
2512
  if (setPointBounds) {
@@ -2526,7 +2548,7 @@ const BezierHelper = {
2526
2548
  totalRadian -= PI2;
2527
2549
  if (anticlockwise)
2528
2550
  totalRadian -= PI2;
2529
- const parts = ceil$1(abs$3(totalRadian / PI_2));
2551
+ const parts = ceil$1(abs$2(totalRadian / PI_2));
2530
2552
  const partRadian = totalRadian / parts;
2531
2553
  const partRadian4Sin = sin$3(partRadian / 4);
2532
2554
  const control = 8 / 3 * partRadian4Sin * partRadian4Sin / sin$3(partRadian / 2);
@@ -2971,7 +2993,7 @@ const { current, pushData, copyData } = PathConvert;
2971
2993
 
2972
2994
  const { M: M$3, L: L$4, C: C$2, Q: Q$2, Z: Z$3, N: N$2, D: D$2, X: X$2, G: G$2, F: F$3, O: O$2, P: P$2, U: U$2 } = PathCommandMap;
2973
2995
  const { getMinDistanceFrom, getRadianFrom } = PointHelper;
2974
- const { tan, min, abs: abs$2 } = Math;
2996
+ const { tan, min, abs: abs$1 } = Math;
2975
2997
  const startPoint = {};
2976
2998
  const PathCommandDataHelper = {
2977
2999
  beginPath(data) {
@@ -3034,7 +3056,7 @@ const PathCommandDataHelper = {
3034
3056
  arcTo(data, x1, y1, x2, y2, radius, lastX, lastY) {
3035
3057
  if (lastX !== undefined) {
3036
3058
  const d = getMinDistanceFrom(lastX, lastY, x1, y1, x2, y2);
3037
- radius = min(radius, min(d / 2, d / 2 * abs$2(tan(getRadianFrom(lastX, lastY, x1, y1, x2, y2) / 2))));
3059
+ radius = min(radius, min(d / 2, d / 2 * abs$1(tan(getRadianFrom(lastX, lastY, x1, y1, x2, y2) / 2))));
3038
3060
  }
3039
3061
  data.push(U$2, x1, y1, x2, y2, radius);
3040
3062
  },
@@ -3910,6 +3932,13 @@ function defineKey(target, key, descriptor, noConfigurable) {
3910
3932
  function getDescriptor(object, name) {
3911
3933
  return Object.getOwnPropertyDescriptor(object, name);
3912
3934
  }
3935
+ function createDescriptor(key, defaultValue) {
3936
+ const privateKey = '_' + key;
3937
+ return {
3938
+ get() { const v = this[privateKey]; return v === undefined ? defaultValue : v; },
3939
+ set(value) { this[privateKey] = value; }
3940
+ };
3941
+ }
3913
3942
  function getNames(object) {
3914
3943
  return Object.getOwnPropertyNames(object);
3915
3944
  }
@@ -4142,15 +4171,7 @@ function defineDataProcessor(target, key, defaultValue) {
4142
4171
  const data = target.__DataProcessor.prototype;
4143
4172
  const computedKey = '_' + key;
4144
4173
  const setMethodName = getSetMethodName(key);
4145
- const property = {
4146
- get() {
4147
- const v = this[computedKey];
4148
- return v === undefined ? defaultValue : v;
4149
- },
4150
- set(value) {
4151
- this[computedKey] = value;
4152
- }
4153
- };
4174
+ const property = createDescriptor(key, defaultValue);
4154
4175
  if (defaultValue === undefined) {
4155
4176
  property.get = function () { return this[computedKey]; };
4156
4177
  }
@@ -4265,7 +4286,7 @@ function registerUIEvent() {
4265
4286
  };
4266
4287
  }
4267
4288
 
4268
- const { copy: copy$6, toInnerPoint: toInnerPoint$1, toOuterPoint: toOuterPoint$1, scaleOfOuter: scaleOfOuter$2, rotateOfOuter: rotateOfOuter$2, skewOfOuter, multiplyParent: multiplyParent$2, divideParent, getLayout } = MatrixHelper;
4289
+ const { copy: copy$6, toInnerPoint: toInnerPoint$1, toOuterPoint: toOuterPoint$1, scaleOfOuter: scaleOfOuter$2, rotateOfOuter: rotateOfOuter$2, skewOfOuter, multiplyParent: multiplyParent$3, divideParent, getLayout } = MatrixHelper;
4269
4290
  const matrix = {}, { round } = Math;
4270
4291
  const LeafHelper = {
4271
4292
  updateAllMatrix(leaf, checkAutoLayout, waitAutoLayout) {
@@ -4337,6 +4358,14 @@ const LeafHelper = {
4337
4358
  }
4338
4359
  return true;
4339
4360
  },
4361
+ copyCanvasByWorld(leaf, currentCanvas, fromCanvas, fromWorld, blendMode, onlyResetTransform) {
4362
+ if (!fromWorld)
4363
+ fromWorld = leaf.__nowWorld;
4364
+ if (leaf.__worldFlipped || Platform.fullImageShadow)
4365
+ currentCanvas.copyWorldByReset(fromCanvas, fromWorld, leaf.__nowWorld, blendMode, onlyResetTransform);
4366
+ else
4367
+ currentCanvas.copyWorldToInner(fromCanvas, fromWorld, leaf.__layout.renderBounds, blendMode);
4368
+ },
4340
4369
  moveWorld(t, x, y = 0, isInnerPoint, transition) {
4341
4370
  const local = typeof x === 'object' ? Object.assign({}, x) : { x, y };
4342
4371
  isInnerPoint ? toOuterPoint$1(t.localTransform, local, local, true) : (t.parent && toInnerPoint$1(t.parent.worldTransform, local, local, true));
@@ -4396,14 +4425,14 @@ const LeafHelper = {
4396
4425
  },
4397
4426
  transformWorld(t, transform, resize, transition) {
4398
4427
  copy$6(matrix, t.worldTransform);
4399
- multiplyParent$2(matrix, transform);
4428
+ multiplyParent$3(matrix, transform);
4400
4429
  if (t.parent)
4401
4430
  divideParent(matrix, t.parent.worldTransform);
4402
4431
  L.setTransform(t, matrix, resize, transition);
4403
4432
  },
4404
4433
  transform(t, transform, resize, transition) {
4405
4434
  copy$6(matrix, t.localTransform);
4406
- multiplyParent$2(matrix, transform);
4435
+ multiplyParent$3(matrix, transform);
4407
4436
  L.setTransform(t, matrix, resize, transition);
4408
4437
  },
4409
4438
  setTransform(t, transform, resize, transition) {
@@ -5265,17 +5294,18 @@ const LeafDataProxy = {
5265
5294
  }
5266
5295
  };
5267
5296
 
5268
- const { setLayout, multiplyParent: multiplyParent$1, translateInner, defaultWorld } = MatrixHelper;
5297
+ const { setLayout, multiplyParent: multiplyParent$2, translateInner, defaultWorld } = MatrixHelper;
5269
5298
  const { toPoint: toPoint$3, tempPoint } = AroundHelper;
5270
5299
  const LeafMatrix = {
5271
5300
  __updateWorldMatrix() {
5272
- multiplyParent$1(this.__local || this.__layout, this.parent ? this.parent.__world : defaultWorld, this.__world, !!this.__layout.affectScaleOrRotation, this.__, this.parent && this.parent.__);
5301
+ const { parent, __layout } = this;
5302
+ multiplyParent$2(this.__local || __layout, parent ? parent.__world : defaultWorld, this.__world, !!__layout.affectScaleOrRotation, this.__, parent && (parent.scrollY || parent.scrollX) && parent.__);
5273
5303
  },
5274
5304
  __updateLocalMatrix() {
5275
5305
  if (this.__local) {
5276
5306
  const layout = this.__layout, local = this.__local, data = this.__;
5277
5307
  if (layout.affectScaleOrRotation) {
5278
- if ((layout.scaleChanged && (layout.resized = 'scale')) || layout.rotationChanged) {
5308
+ if ((layout.scaleChanged && (layout.resized || (layout.resized = 'scale'))) || layout.rotationChanged) {
5279
5309
  setLayout(local, data, null, null, layout.affectRotation);
5280
5310
  layout.scaleChanged = layout.rotationChanged = undefined;
5281
5311
  }
@@ -5441,10 +5471,7 @@ const LeafRender = {
5441
5471
  return this.__renderEraser(canvas, options);
5442
5472
  const tempCanvas = canvas.getSameCanvas(true, true);
5443
5473
  this.__draw(tempCanvas, options, canvas);
5444
- if (this.__worldFlipped)
5445
- canvas.copyWorldByReset(tempCanvas, this.__nowWorld, null, data.__blendMode, true);
5446
- else
5447
- canvas.copyWorldToInner(tempCanvas, this.__nowWorld, this.__layout.renderBounds, data.__blendMode);
5474
+ LeafHelper.copyCanvasByWorld(this, canvas, tempCanvas, this.__nowWorld, data.__blendMode, true);
5448
5475
  tempCanvas.recycle(this.__nowWorld);
5449
5476
  }
5450
5477
  else {
@@ -5492,7 +5519,7 @@ const BranchRender = {
5492
5519
  options.dimOpacity = data.dim === true ? 0.2 : data.dim;
5493
5520
  else if (data.dimskip)
5494
5521
  options.dimOpacity && (options.dimOpacity = 0);
5495
- if (data.__single) {
5522
+ if (data.__single && !this.isBranchLeaf) {
5496
5523
  if (data.eraser === 'path')
5497
5524
  return this.__renderEraser(canvas, options);
5498
5525
  const tempCanvas = canvas.getSameCanvas(false, true);
@@ -5514,9 +5541,7 @@ const BranchRender = {
5514
5541
  else {
5515
5542
  const { children } = this;
5516
5543
  for (let i = 0, len = children.length; i < len; i++) {
5517
- if (excludeRenderBounds$1(children[i], options))
5518
- continue;
5519
- children[i].__render(canvas, options);
5544
+ excludeRenderBounds$1(children[i], options) || children[i].__render(canvas, options);
5520
5545
  }
5521
5546
  }
5522
5547
  },
@@ -5524,16 +5549,15 @@ const BranchRender = {
5524
5549
  if (this.__worldOpacity) {
5525
5550
  const { children } = this;
5526
5551
  for (let i = 0, len = children.length; i < len; i++) {
5527
- if (excludeRenderBounds$1(children[i], options))
5528
- continue;
5529
- children[i].__clip(canvas, options);
5552
+ excludeRenderBounds$1(children[i], options) || children[i].__clip(canvas, options);
5530
5553
  }
5531
5554
  }
5532
5555
  }
5533
5556
  };
5534
5557
 
5558
+ const tempScaleData$1 = {};
5535
5559
  const { LEAF, create } = IncrementId;
5536
- const { toInnerPoint, toOuterPoint, multiplyParent } = MatrixHelper;
5560
+ const { toInnerPoint, toOuterPoint, multiplyParent: multiplyParent$1 } = MatrixHelper;
5537
5561
  const { toOuterOf } = BoundsHelper;
5538
5562
  const { copy: copy$3, move } = PointHelper;
5539
5563
  const { moveLocal, zoomOfLocal, rotateOfLocal, skewOfLocal, moveWorld, zoomOfWorld, rotateOfWorld, skewOfWorld, transform, transformWorld, setTransform, getFlipTransform, getLocalOrigin, getRelativeWorld, drop } = LeafHelper;
@@ -5715,7 +5739,7 @@ let Leaf = class Leaf {
5715
5739
  if (!this.__cameraWorld)
5716
5740
  this.__cameraWorld = {};
5717
5741
  const cameraWorld = this.__cameraWorld, world = this.__world;
5718
- multiplyParent(world, options.matrix, cameraWorld, undefined, world);
5742
+ multiplyParent$1(world, options.matrix, cameraWorld, undefined, world);
5719
5743
  toOuterOf(this.__layout.renderBounds, cameraWorld, cameraWorld);
5720
5744
  cameraWorld.half !== world.half && (cameraWorld.half = world.half);
5721
5745
  return cameraWorld;
@@ -5724,6 +5748,22 @@ let Leaf = class Leaf {
5724
5748
  return this.__world;
5725
5749
  }
5726
5750
  }
5751
+ getClampRenderScale() {
5752
+ let { scaleX } = this.__nowWorld || this.__world;
5753
+ if (scaleX < 0)
5754
+ scaleX = -scaleX;
5755
+ return scaleX > 1 ? scaleX : 1;
5756
+ }
5757
+ getRenderScaleData(abs, scaleFixed) {
5758
+ const { scaleX, scaleY } = ImageManager.patternLocked ? this.__world : this.__nowWorld;
5759
+ if (scaleFixed)
5760
+ tempScaleData$1.scaleX = tempScaleData$1.scaleY = 1;
5761
+ else if (abs)
5762
+ tempScaleData$1.scaleX = scaleX < 0 ? -scaleX : scaleX, tempScaleData$1.scaleY = scaleY < 0 ? -scaleY : scaleY;
5763
+ else
5764
+ tempScaleData$1.scaleX = scaleX, tempScaleData$1.scaleY = scaleY;
5765
+ return tempScaleData$1;
5766
+ }
5727
5767
  getTransform(relative) {
5728
5768
  return this.__layout.getTransform(relative || 'local');
5729
5769
  }
@@ -6248,7 +6288,7 @@ class LeafLevelList {
6248
6288
  }
6249
6289
  }
6250
6290
 
6251
- const version = "1.7.0";
6291
+ const version = "1.8.0";
6252
6292
 
6253
6293
  class LeaferCanvas extends LeaferCanvasBase {
6254
6294
  get allowBackgroundColor() { return false; }
@@ -7078,6 +7118,11 @@ function zoomLayerType() {
7078
7118
  });
7079
7119
  };
7080
7120
  }
7121
+ function createAttr(defaultValue) {
7122
+ return (target, key) => {
7123
+ defineKey(target, key, createDescriptor(key, defaultValue));
7124
+ };
7125
+ }
7081
7126
 
7082
7127
  function hasTransparent$3(color) {
7083
7128
  if (!color || color.length === 7 || color.length === 4)
@@ -7135,22 +7180,9 @@ const emptyPaint = {};
7135
7180
  const debug$1 = Debug.get('UIData');
7136
7181
  class UIData extends LeafData {
7137
7182
  get scale() { const { scaleX, scaleY } = this; return scaleX !== scaleY ? { x: scaleX, y: scaleY } : scaleX; }
7138
- get __strokeWidth() {
7139
- const { strokeWidth, strokeWidthFixed } = this;
7140
- if (strokeWidthFixed) {
7141
- const ui = this.__leaf;
7142
- let { scaleX } = ui.__nowWorld || ui.__world;
7143
- if (scaleX < 0)
7144
- scaleX = -scaleX;
7145
- return scaleX > 1 ? strokeWidth / scaleX : strokeWidth;
7146
- }
7147
- else
7148
- return strokeWidth;
7149
- }
7150
- get __hasMultiPaint() {
7151
- const t = this;
7152
- return (t.fill && this.__useStroke) || (t.__isFills && t.fill.length > 1) || (t.__isStrokes && t.stroke.length > 1) || t.__useEffect;
7153
- }
7183
+ get __strokeWidth() { return this.__getRealStrokeWidth(); }
7184
+ get __maxStrokeWidth() { const t = this; return t.__hasMultiStrokeStyle ? Math.max(t.__hasMultiStrokeStyle, t.strokeWidth) : t.strokeWidth; }
7185
+ get __hasMultiPaint() { const t = this; return (t.fill && this.__useStroke) || (t.__isFills && t.fill.length > 1) || (t.__isStrokes && t.stroke.length > 1) || t.__useEffect; }
7154
7186
  get __clipAfterFill() { const t = this; return (t.cornerRadius || t.innerShadow || t.__pathInputed); }
7155
7187
  get __hasSurface() { const t = this; return (t.fill || t.stroke); }
7156
7188
  get __autoWidth() { return !this._width; }
@@ -7232,6 +7264,21 @@ class UIData extends LeafData {
7232
7264
  Paint.compute('stroke', this.__leaf);
7233
7265
  this.__needComputePaint = undefined;
7234
7266
  }
7267
+ __getRealStrokeWidth(childStyle) {
7268
+ let { strokeWidth, strokeWidthFixed } = this;
7269
+ if (childStyle) {
7270
+ if (childStyle.strokeWidth)
7271
+ strokeWidth = childStyle.strokeWidth;
7272
+ if (childStyle.strokeWidthFixed !== undefined)
7273
+ strokeWidthFixed = childStyle.strokeWidthFixed;
7274
+ }
7275
+ if (strokeWidthFixed) {
7276
+ const scale = this.__leaf.getClampRenderScale();
7277
+ return scale > 1 ? strokeWidth / scale : strokeWidth;
7278
+ }
7279
+ else
7280
+ return strokeWidth;
7281
+ }
7235
7282
  __setPaint(attrName, value) {
7236
7283
  this.__setInput(attrName, value);
7237
7284
  const layout = this.__leaf.__layout;
@@ -7256,6 +7303,7 @@ class UIData extends LeafData {
7256
7303
  }
7257
7304
  else {
7258
7305
  stintSet$2(this, '__isAlphaPixelStroke', undefined);
7306
+ stintSet$2(this, '__hasMultiStrokeStyle', undefined);
7259
7307
  this._stroke = this.__isStrokes = undefined;
7260
7308
  }
7261
7309
  }
@@ -7277,8 +7325,8 @@ class GroupData extends UIData {
7277
7325
 
7278
7326
  class BoxData extends GroupData {
7279
7327
  get __boxStroke() { return !this.__pathInputed; }
7280
- get __drawAfterFill() { const t = this; return (t.overflow === 'hide' && (t.__clipAfterFill || t.innerShadow) && t.__leaf.children.length); }
7281
- get __clipAfterFill() { return this.__leaf.isOverflow || super.__clipAfterFill; }
7328
+ get __drawAfterFill() { const t = this; return t.__single || t.__clipAfterFill; }
7329
+ get __clipAfterFill() { const t = this; return t.overflow === 'hide' && t.__leaf.children.length && (t.__leaf.isOverflow || super.__clipAfterFill); }
7282
7330
  }
7283
7331
 
7284
7332
  class LeaferData extends GroupData {
@@ -7398,7 +7446,7 @@ class CanvasData extends RectData {
7398
7446
  const UIBounds = {
7399
7447
  __updateStrokeSpread() {
7400
7448
  let width = 0, boxWidth = 0;
7401
- const data = this.__, { strokeAlign, strokeWidth } = data, box = this.__box;
7449
+ const data = this.__, { strokeAlign, __maxStrokeWidth: strokeWidth } = data, box = this.__box;
7402
7450
  if ((data.stroke || data.hitStroke === 'all') && strokeWidth && strokeAlign !== 'inside') {
7403
7451
  boxWidth = width = strokeAlign === 'center' ? strokeWidth / 2 : strokeWidth;
7404
7452
  if (!data.__boxStroke) {
@@ -7418,13 +7466,15 @@ const UIBounds = {
7418
7466
  },
7419
7467
  __updateRenderSpread() {
7420
7468
  let width = 0;
7421
- const { shadow, innerShadow, blur, backgroundBlur, filter } = this.__;
7469
+ const { shadow, innerShadow, blur, backgroundBlur, filter, renderSpread } = this.__;
7422
7470
  if (shadow)
7423
7471
  shadow.forEach(item => width = Math.max(width, Math.max(Math.abs(item.y), Math.abs(item.x)) + (item.spread > 0 ? item.spread : 0) + item.blur * 1.5));
7424
7472
  if (blur)
7425
7473
  width = Math.max(width, blur);
7426
7474
  if (filter)
7427
7475
  width += Filter.getSpread(filter);
7476
+ if (renderSpread)
7477
+ width += renderSpread;
7428
7478
  let shapeWidth = width = Math.ceil(width);
7429
7479
  if (innerShadow)
7430
7480
  innerShadow.forEach(item => shapeWidth = Math.max(shapeWidth, Math.max(Math.abs(item.y), Math.abs(item.x)) + (item.spread < 0 ? -item.spread : 0) + item.blur * 1.5));
@@ -7447,7 +7497,7 @@ const UIRender = {
7447
7497
  }
7448
7498
  if (data.__useEffect) {
7449
7499
  const { shadow, fill, stroke } = data, otherEffect = data.innerShadow || data.blur || data.backgroundBlur || data.filter;
7450
- stintSet$1(data, '__isFastShadow', shadow && !otherEffect && shadow.length < 2 && !shadow[0].spread && !(shadow[0].box && data.__isTransparentFill) && fill && !(fill instanceof Array && fill.length > 1) && (this.useFastShadow || !stroke || (stroke && data.strokeAlign === 'inside')));
7500
+ stintSet$1(data, '__isFastShadow', shadow && !otherEffect && shadow.length < 2 && !shadow[0].spread && fill && !data.__isTransparentFill && !(fill instanceof Array && fill.length > 1) && (this.useFastShadow || !stroke || (stroke && data.strokeAlign === 'inside')));
7451
7501
  data.__useEffect = !!(shadow || otherEffect);
7452
7502
  }
7453
7503
  data.__checkSingle();
@@ -7554,17 +7604,17 @@ const RectRender = {
7554
7604
  if (__drawAfterFill)
7555
7605
  this.__drawAfterFill(canvas, options);
7556
7606
  if (stroke) {
7557
- const { strokeAlign, __strokeWidth } = this.__;
7558
- if (!__strokeWidth)
7607
+ const { strokeAlign, __strokeWidth: strokeWidth } = this.__;
7608
+ if (!strokeWidth)
7559
7609
  return;
7560
- canvas.setStroke(stroke, __strokeWidth, this.__);
7561
- const half = __strokeWidth / 2;
7610
+ canvas.setStroke(stroke, strokeWidth, this.__);
7611
+ const half = strokeWidth / 2;
7562
7612
  switch (strokeAlign) {
7563
7613
  case 'center':
7564
7614
  canvas.strokeRect(0, 0, width, height);
7565
7615
  break;
7566
7616
  case 'inside':
7567
- width -= __strokeWidth, height -= __strokeWidth;
7617
+ width -= strokeWidth, height -= strokeWidth;
7568
7618
  if (width < 0 || height < 0) {
7569
7619
  canvas.save();
7570
7620
  this.__clip(canvas, options);
@@ -7575,7 +7625,7 @@ const RectRender = {
7575
7625
  canvas.strokeRect(x + half, y + half, width, height);
7576
7626
  break;
7577
7627
  case 'outside':
7578
- canvas.strokeRect(x - half, y - half, width + __strokeWidth, height + __strokeWidth);
7628
+ canvas.strokeRect(x - half, y - half, width + strokeWidth, height + strokeWidth);
7579
7629
  break;
7580
7630
  }
7581
7631
  }
@@ -7588,6 +7638,8 @@ let UI = UI_1 = class UI extends Leaf {
7588
7638
  get isFrame() { return false; }
7589
7639
  set scale(value) { MathHelper.assignScale(this, value); }
7590
7640
  get scale() { return this.__.scale; }
7641
+ get isAutoWidth() { const t = this.__; return t.__autoWidth || t.autoWidth; }
7642
+ get isAutoHeight() { const t = this.__; return t.__autoHeight || t.autoHeight; }
7591
7643
  get pen() {
7592
7644
  const { path } = this.__;
7593
7645
  pen.set(this.path = path || []);
@@ -7802,6 +7854,9 @@ __decorate([
7802
7854
  __decorate([
7803
7855
  naturalBoundsType(1)
7804
7856
  ], UI.prototype, "pixelRatio", void 0);
7857
+ __decorate([
7858
+ affectRenderBoundsType(0)
7859
+ ], UI.prototype, "renderSpread", void 0);
7805
7860
  __decorate([
7806
7861
  pathInputType()
7807
7862
  ], UI.prototype, "path", void 0);
@@ -7958,7 +8013,8 @@ let Group = class Group extends UI {
7958
8013
  }
7959
8014
  toJSON(options) {
7960
8015
  const data = super.toJSON(options);
7961
- data.children = this.children.map(child => child.toJSON(options));
8016
+ if (!this.childlessJSON)
8017
+ data.children = this.children.map(child => child.toJSON(options));
7962
8018
  return data;
7963
8019
  }
7964
8020
  pick(_hitPoint, _options) { return undefined; }
@@ -8405,8 +8461,8 @@ let Box = class Box extends Group {
8405
8461
  __updateRenderSpread() { return this.__updateRectRenderSpread() || -1; }
8406
8462
  __updateRectBoxBounds() { }
8407
8463
  __updateBoxBounds(_secondLayout) {
8408
- const data = this.__;
8409
8464
  if (this.children.length && !this.pathInputed) {
8465
+ const data = this.__;
8410
8466
  if (data.__autoSide) {
8411
8467
  if (data.__hasSurface)
8412
8468
  this.__extraUpdate();
@@ -8433,20 +8489,26 @@ let Box = class Box extends Group {
8433
8489
  __updateStrokeBounds() { }
8434
8490
  __updateRenderBounds() {
8435
8491
  let isOverflow;
8436
- const { renderBounds } = this.__layout;
8437
8492
  if (this.children.length) {
8493
+ const data = this.__, { renderBounds, boxBounds } = this.__layout;
8438
8494
  super.__updateRenderBounds();
8439
8495
  copy$2(childrenRenderBounds, renderBounds);
8440
8496
  this.__updateRectRenderBounds();
8441
- isOverflow = !includes$1(renderBounds, childrenRenderBounds);
8442
- if (isOverflow && this.__.overflow !== 'hide')
8497
+ if (data.scrollY || data.scrollX) {
8498
+ childrenRenderBounds.x += data.scrollX;
8499
+ childrenRenderBounds.y += data.scrollY;
8500
+ }
8501
+ isOverflow = !includes$1(boxBounds, childrenRenderBounds);
8502
+ if (isOverflow && data.overflow !== 'hide')
8443
8503
  add(renderBounds, childrenRenderBounds);
8444
8504
  }
8445
8505
  else
8446
8506
  this.__updateRectRenderBounds();
8447
8507
  DataHelper.stintSet(this, 'isOverflow', isOverflow);
8508
+ this.__updateScrollBar();
8448
8509
  }
8449
8510
  __updateRectRenderBounds() { }
8511
+ __updateScrollBar() { }
8450
8512
  __updateRectChange() { }
8451
8513
  __updateChange() {
8452
8514
  super.__updateChange();
@@ -8463,10 +8525,12 @@ let Box = class Box extends Group {
8463
8525
  if (this.children.length)
8464
8526
  this.__renderGroup(canvas, options);
8465
8527
  }
8528
+ if (this.scrollBar)
8529
+ this.scrollBar.__render(canvas, options);
8466
8530
  }
8467
8531
  __drawContent(canvas, options) {
8468
8532
  this.__renderGroup(canvas, options);
8469
- if (this.__.__useStroke) {
8533
+ if (this.__.__useStroke || this.__.__useEffect) {
8470
8534
  canvas.setWorld(this.__nowWorld);
8471
8535
  this.__drawRenderPath(canvas);
8472
8536
  }
@@ -9125,9 +9189,14 @@ function fills(fills, ui, canvas) {
9125
9189
  }
9126
9190
  }
9127
9191
  canvas.fillStyle = item.style;
9128
- if (item.transform) {
9192
+ if (item.transform || item.scaleFixed) {
9129
9193
  canvas.save();
9130
- canvas.transform(item.transform);
9194
+ if (item.transform)
9195
+ canvas.transform(item.transform);
9196
+ if (item.scaleFixed) {
9197
+ const { scaleX, scaleY } = ui.getRenderScaleData(true);
9198
+ canvas.scale(1 / scaleX, 1 / scaleY);
9199
+ }
9131
9200
  if (item.blendMode)
9132
9201
  canvas.blendMode = item.blendMode;
9133
9202
  fillPathOrText(ui, canvas);
@@ -9163,8 +9232,13 @@ function strokeText(stroke, ui, canvas) {
9163
9232
  }
9164
9233
  function drawCenter$1(stroke, strokeWidthScale, ui, canvas) {
9165
9234
  const data = ui.__;
9166
- canvas.setStroke(!data.__isStrokes && stroke, data.strokeWidth * strokeWidthScale, data);
9167
- data.__isStrokes ? drawStrokesStyle(stroke, true, ui, canvas) : drawTextStroke(ui, canvas);
9235
+ if (typeof stroke === 'object') {
9236
+ drawStrokesStyle(stroke, strokeWidthScale, true, ui, canvas);
9237
+ }
9238
+ else {
9239
+ canvas.setStroke(stroke, data.__strokeWidth * strokeWidthScale, data);
9240
+ drawTextStroke(ui, canvas);
9241
+ }
9168
9242
  }
9169
9243
  function drawAlign(stroke, align, ui, canvas) {
9170
9244
  const out = canvas.getSameCanvas(true, true);
@@ -9173,15 +9247,9 @@ function drawAlign(stroke, align, ui, canvas) {
9173
9247
  out.blendMode = align === 'outside' ? 'destination-out' : 'destination-in';
9174
9248
  fillText(ui, out);
9175
9249
  out.blendMode = 'normal';
9176
- copyWorld(canvas, out, ui);
9250
+ LeafHelper.copyCanvasByWorld(ui, canvas, out);
9177
9251
  out.recycle(ui.__nowWorld);
9178
9252
  }
9179
- function copyWorld(canvas, out, ui) {
9180
- if (ui.__worldFlipped || Platform.fullImageShadow)
9181
- canvas.copyWorldByReset(out, ui.__nowWorld);
9182
- else
9183
- canvas.copyWorldToInner(out, ui.__nowWorld, ui.__layout.renderBounds);
9184
- }
9185
9253
  function drawTextStroke(ui, canvas) {
9186
9254
  let row, data = ui.__.__textDrawData;
9187
9255
  const { rows, decorationY } = data;
@@ -9197,14 +9265,21 @@ function drawTextStroke(ui, canvas) {
9197
9265
  rows.forEach(row => decorationY.forEach(value => canvas.strokeRect(row.x, row.y + value, row.width, decorationHeight)));
9198
9266
  }
9199
9267
  }
9200
- function drawStrokesStyle(strokes, isText, ui, canvas) {
9268
+ function drawStrokesStyle(strokes, strokeWidthScale, isText, ui, canvas) {
9201
9269
  let item;
9270
+ const data = ui.__, { __hasMultiStrokeStyle } = data;
9271
+ __hasMultiStrokeStyle || canvas.setStroke(undefined, data.__strokeWidth * strokeWidthScale, data);
9202
9272
  for (let i = 0, len = strokes.length; i < len; i++) {
9203
9273
  item = strokes[i];
9204
9274
  if (item.image && PaintImage.checkImage(ui, canvas, item, false))
9205
9275
  continue;
9206
9276
  if (item.style) {
9207
- canvas.strokeStyle = item.style;
9277
+ if (__hasMultiStrokeStyle) {
9278
+ const { strokeStyle } = item;
9279
+ strokeStyle ? canvas.setStroke(item.style, data.__getRealStrokeWidth(strokeStyle) * strokeWidthScale, data, strokeStyle) : canvas.setStroke(item.style, data.__strokeWidth * strokeWidthScale, data);
9280
+ }
9281
+ else
9282
+ canvas.strokeStyle = item.style;
9208
9283
  if (item.blendMode) {
9209
9284
  canvas.saveBlendMode(item.blendMode);
9210
9285
  isText ? drawTextStroke(ui, canvas) : canvas.stroke();
@@ -9243,8 +9318,13 @@ function strokes(strokes, ui, canvas) {
9243
9318
  }
9244
9319
  function drawCenter(stroke, strokeWidthScale, ui, canvas) {
9245
9320
  const data = ui.__;
9246
- canvas.setStroke(!data.__isStrokes && stroke, data.__strokeWidth * strokeWidthScale, data);
9247
- data.__isStrokes ? drawStrokesStyle(stroke, false, ui, canvas) : canvas.stroke();
9321
+ if (typeof stroke === 'object') {
9322
+ drawStrokesStyle(stroke, strokeWidthScale, false, ui, canvas);
9323
+ }
9324
+ else {
9325
+ canvas.setStroke(stroke, data.__strokeWidth * strokeWidthScale, data);
9326
+ canvas.stroke();
9327
+ }
9248
9328
  if (data.__useArrow)
9249
9329
  Paint.strokeArrow(stroke, ui, canvas);
9250
9330
  }
@@ -9266,7 +9346,7 @@ function drawOutside(stroke, ui, canvas) {
9266
9346
  drawCenter(stroke, 2, ui, out);
9267
9347
  out.clipUI(data);
9268
9348
  out.clearWorld(renderBounds);
9269
- copyWorld(canvas, out, ui);
9349
+ LeafHelper.copyCanvasByWorld(ui, canvas, out);
9270
9350
  out.recycle(ui.__nowWorld);
9271
9351
  }
9272
9352
  }
@@ -9321,8 +9401,16 @@ function compute(attrName, ui) {
9321
9401
  if (!(paints instanceof Array))
9322
9402
  paints = [paints];
9323
9403
  recycleMap = PaintImage.recycleImage(attrName, data);
9404
+ let maxChildStrokeWidth;
9324
9405
  for (let i = 0, len = paints.length, item; i < len; i++) {
9325
- (item = getLeafPaint(attrName, paints[i], ui)) && leafPaints.push(item);
9406
+ if (item = getLeafPaint(attrName, paints[i], ui)) {
9407
+ leafPaints.push(item);
9408
+ if (item.strokeStyle) {
9409
+ maxChildStrokeWidth || (maxChildStrokeWidth = 1);
9410
+ if (item.strokeStyle.strokeWidth)
9411
+ maxChildStrokeWidth = Math.max(maxChildStrokeWidth, item.strokeStyle.strokeWidth);
9412
+ }
9413
+ }
9326
9414
  }
9327
9415
  data['_' + attrName] = leafPaints.length ? leafPaints : undefined;
9328
9416
  if (leafPaints.length) {
@@ -9339,6 +9427,7 @@ function compute(attrName, ui) {
9339
9427
  else {
9340
9428
  stintSet(data, '__isAlphaPixelStroke', isAlphaPixel);
9341
9429
  stintSet(data, '__isTransparentStroke', isTransparent);
9430
+ stintSet(data, '__hasMultiStrokeStyle', maxChildStrokeWidth);
9342
9431
  }
9343
9432
  }
9344
9433
  function getLeafPaint(attrName, paint, ui) {
@@ -9370,6 +9459,11 @@ function getLeafPaint(attrName, paint, ui) {
9370
9459
  if (data) {
9371
9460
  if (typeof data.style === 'string' && hasTransparent$1(data.style))
9372
9461
  data.isTransparent = true;
9462
+ if (paint.style) {
9463
+ if (paint.style.strokeWidth === 0)
9464
+ return undefined;
9465
+ data.strokeStyle = paint.style;
9466
+ }
9373
9467
  if (paint.blendMode)
9374
9468
  data.blendMode = paint.blendMode;
9375
9469
  }
@@ -9389,8 +9483,8 @@ const PaintModule = {
9389
9483
  shape
9390
9484
  };
9391
9485
 
9392
- let origin = {};
9393
- const { get: get$3, rotateOfOuter: rotateOfOuter$1, translate: translate$1, scaleOfOuter: scaleOfOuter$1, scale: scaleHelper, rotate, skew: skewHelper } = MatrixHelper;
9486
+ let origin = {}, tempMatrix = getMatrixData();
9487
+ const { get: get$3, rotateOfOuter: rotateOfOuter$1, translate: translate$1, scaleOfOuter: scaleOfOuter$1, multiplyParent, scale: scaleHelper, rotate, skew: skewHelper } = MatrixHelper;
9394
9488
  function fillOrFitMode(data, box, x, y, scaleX, scaleY, rotation) {
9395
9489
  const transform = get$3();
9396
9490
  translate$1(transform, box.x + x, box.y + y);
@@ -9399,7 +9493,7 @@ function fillOrFitMode(data, box, x, y, scaleX, scaleY, rotation) {
9399
9493
  rotateOfOuter$1(transform, { x: box.x + box.width / 2, y: box.y + box.height / 2 }, rotation);
9400
9494
  data.transform = transform;
9401
9495
  }
9402
- function clipMode(data, box, x, y, scaleX, scaleY, rotation, skew) {
9496
+ function clipMode(data, box, x, y, scaleX, scaleY, rotation, skew, clipSize) {
9403
9497
  const transform = get$3();
9404
9498
  if (rotation)
9405
9499
  rotate(transform, rotation);
@@ -9408,6 +9502,10 @@ function clipMode(data, box, x, y, scaleX, scaleY, rotation, skew) {
9408
9502
  if (scaleX)
9409
9503
  scaleHelper(transform, scaleX, scaleY);
9410
9504
  translate$1(transform, box.x + x, box.y + y);
9505
+ if (clipSize) {
9506
+ tempMatrix.a = box.width / clipSize.width, tempMatrix.d = box.height / clipSize.height;
9507
+ multiplyParent(transform, tempMatrix);
9508
+ }
9411
9509
  data.transform = transform;
9412
9510
  }
9413
9511
  function repeatMode(data, box, width, height, x, y, scaleX, scaleY, rotation, align) {
@@ -9444,13 +9542,15 @@ const tempBox = new Bounds();
9444
9542
  const tempScaleData = {};
9445
9543
  const tempImage = {};
9446
9544
  function createData(leafPaint, image, paint, box) {
9447
- const { changeful, sync, editing } = paint;
9545
+ const { changeful, sync, editing, scaleFixed } = paint;
9448
9546
  if (changeful)
9449
9547
  leafPaint.changeful = changeful;
9450
9548
  if (sync)
9451
9549
  leafPaint.sync = sync;
9452
9550
  if (editing)
9453
9551
  leafPaint.editing = editing;
9552
+ if (scaleFixed)
9553
+ leafPaint.scaleFixed = scaleFixed;
9454
9554
  leafPaint.data = getPatternData(paint, box, image);
9455
9555
  }
9456
9556
  function getPatternData(paint, box, image) {
@@ -9459,7 +9559,7 @@ function getPatternData(paint, box, image) {
9459
9559
  if (paint.mode === 'strench')
9460
9560
  paint.mode = 'stretch';
9461
9561
  let { width, height } = image;
9462
- const { opacity, mode, align, offset, scale, size, rotation, skew, repeat, filters } = paint;
9562
+ const { opacity, mode, align, offset, scale, size, rotation, skew, clipSize, repeat, filters } = paint;
9463
9563
  const sameBox = box.width === width && box.height === height;
9464
9564
  const data = { mode };
9465
9565
  const swapSize = align !== 'center' && (rotation || 0) % 180 === 90;
@@ -9493,8 +9593,8 @@ function getPatternData(paint, box, image) {
9493
9593
  break;
9494
9594
  case 'normal':
9495
9595
  case 'clip':
9496
- if (tempImage.x || tempImage.y || scaleX || rotation || skew)
9497
- clipMode(data, box, tempImage.x, tempImage.y, scaleX, scaleY, rotation, skew);
9596
+ if (tempImage.x || tempImage.y || scaleX || clipSize || rotation || skew)
9597
+ clipMode(data, box, tempImage.x, tempImage.y, scaleX, scaleY, rotation, skew, paint.clipSize);
9498
9598
  break;
9499
9599
  case 'repeat':
9500
9600
  if (!sameBox || scaleX || rotation)
@@ -9631,18 +9731,16 @@ function ignoreRender(ui, value) {
9631
9731
  }
9632
9732
 
9633
9733
  const { get: get$1, scale, copy: copy$1 } = MatrixHelper;
9634
- const { ceil, abs: abs$1 } = Math;
9734
+ const { ceil, abs } = Math;
9635
9735
  function createPattern(ui, paint, pixelRatio) {
9636
- let { scaleX, scaleY } = ImageManager.patternLocked ? ui.__world : ui.__nowWorld;
9736
+ let { scaleX, scaleY } = ui.getRenderScaleData(true, paint.scaleFixed);
9637
9737
  const id = scaleX + '-' + scaleY + '-' + pixelRatio;
9638
9738
  if (paint.patternId !== id && !ui.destroyed) {
9639
- scaleX = abs$1(scaleX);
9640
- scaleY = abs$1(scaleY);
9641
9739
  const { image, data } = paint;
9642
9740
  let imageScale, imageMatrix, { width, height, scaleX: sx, scaleY: sy, transform, repeat } = data;
9643
9741
  if (sx) {
9644
- sx = abs$1(sx);
9645
- sy = abs$1(sy);
9742
+ sx = abs(sx);
9743
+ sy = abs(sy);
9646
9744
  imageMatrix = get$1();
9647
9745
  copy$1(imageMatrix, transform);
9648
9746
  scale(imageMatrix, 1 / sx, 1 / sy);
@@ -9695,9 +9793,8 @@ function createPattern(ui, paint, pixelRatio) {
9695
9793
  }
9696
9794
  }
9697
9795
 
9698
- const { abs } = Math;
9699
9796
  function checkImage(ui, canvas, paint, allowDraw) {
9700
- const { scaleX, scaleY } = ImageManager.patternLocked ? ui.__world : ui.__nowWorld;
9797
+ const { scaleX, scaleY } = ui.getRenderScaleData(true, paint.scaleFixed);
9701
9798
  const { pixelRatio } = canvas, { data } = paint;
9702
9799
  if (!data || (paint.patternId === scaleX + '-' + scaleY + '-' + pixelRatio && !Export.running)) {
9703
9800
  return false;
@@ -9710,8 +9807,8 @@ function checkImage(ui, canvas, paint, allowDraw) {
9710
9807
  else {
9711
9808
  if (!(paint.changeful || ResizeEvent.isResizing(ui) || Export.running)) {
9712
9809
  let { width, height } = data;
9713
- width *= abs(scaleX) * pixelRatio;
9714
- height *= abs(scaleY) * pixelRatio;
9810
+ width *= scaleX * pixelRatio;
9811
+ height *= scaleY * pixelRatio;
9715
9812
  if (data.scaleX) {
9716
9813
  width *= data.scaleX;
9717
9814
  height *= data.scaleY;
@@ -9721,6 +9818,10 @@ function checkImage(ui, canvas, paint, allowDraw) {
9721
9818
  }
9722
9819
  }
9723
9820
  if (allowDraw) {
9821
+ if (ui.__.__isFastShadow) {
9822
+ canvas.fillStyle = paint.style || '#000';
9823
+ canvas.fill();
9824
+ }
9724
9825
  drawImage(ui, canvas, paint, data);
9725
9826
  return true;
9726
9827
  }
@@ -9909,10 +10010,7 @@ function shadow(ui, current, shape) {
9909
10010
  }
9910
10011
  worldCanvas ? other.copyWorld(worldCanvas, nowWorld, nowWorld, 'destination-out') : other.copyWorld(shape.canvas, shapeBounds, bounds, 'destination-out');
9911
10012
  }
9912
- if (ui.__worldFlipped)
9913
- current.copyWorldByReset(other, copyBounds, nowWorld, item.blendMode);
9914
- else
9915
- current.copyWorldToInner(other, copyBounds, __layout.renderBounds, item.blendMode);
10013
+ LeafHelper.copyCanvasByWorld(ui, current, other, copyBounds, item.blendMode);
9916
10014
  if (end && index < end)
9917
10015
  other.clearWorld(copyBounds, true);
9918
10016
  });
@@ -9971,10 +10069,7 @@ function innerShadow(ui, current, shape) {
9971
10069
  copyBounds = bounds;
9972
10070
  }
9973
10071
  other.fillWorld(copyBounds, ColorConvert.string(item.color), 'source-in');
9974
- if (ui.__worldFlipped)
9975
- current.copyWorldByReset(other, copyBounds, nowWorld, item.blendMode);
9976
- else
9977
- current.copyWorldToInner(other, copyBounds, __layout.renderBounds, item.blendMode);
10072
+ LeafHelper.copyCanvasByWorld(ui, current, other, copyBounds, item.blendMode);
9978
10073
  if (end && index < end)
9979
10074
  other.clearWorld(copyBounds, true);
9980
10075
  });
@@ -10030,12 +10125,11 @@ Group.prototype.__renderMask = function (canvas, options) {
10030
10125
  contentCanvas = getCanvas(canvas);
10031
10126
  child.__render(maskCanvas, options);
10032
10127
  }
10033
- if (!(mask === 'clipping' || mask === 'clipping-path'))
10034
- continue;
10035
- }
10036
- if (excludeRenderBounds(child, options))
10128
+ if (mask === 'clipping' || mask === 'clipping-path')
10129
+ excludeRenderBounds(child, options) || child.__render(canvas, options);
10037
10130
  continue;
10038
- child.__render(contentCanvas || canvas, options);
10131
+ }
10132
+ excludeRenderBounds(child, options) || child.__render(contentCanvas || canvas, options);
10039
10133
  }
10040
10134
  maskEnd(this, currentMask, canvas, contentCanvas, maskCanvas, maskOpacity);
10041
10135
  };
@@ -10621,4 +10715,4 @@ try {
10621
10715
  }
10622
10716
  catch (_a) { }
10623
10717
 
10624
- 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, 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, PathConvert, PathCorner, PathCreator, PathData, PathDrawer, PathHelper, 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, cursorType, dataProcessor, dataType, decorateLeafAttr, defineDataProcessor, defineKey, defineLeafAttr, doBoundsType, doStrokeType, effectType, emptyData, eraserType, getBoundsData, getDescriptor, getMatrixData, getPointData, hitType, isEmptyData, isNull, layoutProcessor, maskType, naturalBoundsType, opacityType, pathInputType, pathType, pen, positionType, registerUI, registerUIEvent, resizeType, rewrite, rewriteAble, rotationType, scaleType, sortType, strokeType, surfaceType, tempBounds$1 as tempBounds, tempMatrix, tempPoint$2 as tempPoint, useCanvas, useModule, version, visibleType, zoomLayerType };
10718
+ 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, 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, PathConvert, PathCorner, PathCreator, PathData, PathDrawer, PathHelper, 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, doBoundsType, doStrokeType, effectType, emptyData, eraserType, getBoundsData, getDescriptor, getMatrixData, getPointData, hitType, isEmptyData, isNull, layoutProcessor, maskType, naturalBoundsType, opacityType, pathInputType, pathType, pen, positionType, registerUI, registerUIEvent, resizeType, rewrite, rewriteAble, rotationType, scaleType, sortType, strokeType, surfaceType, tempBounds$1 as tempBounds, tempMatrix$1 as tempMatrix, tempPoint$2 as tempPoint, useCanvas, useModule, version, visibleType, zoomLayerType };