leafer-draw 2.1.6 → 2.1.8

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.
@@ -292,7 +292,7 @@ const FourNumberHelper = {
292
292
  return to;
293
293
  },
294
294
  setTemp(top, right, bottom, left) {
295
- return set$2(tempFour, top, right, bottom, left);
295
+ return set$3(tempFour, top, right, bottom, left);
296
296
  },
297
297
  toTempAB(a, b, change) {
298
298
  tempTo = change ? isNumber(a) ? b : a : [];
@@ -332,22 +332,22 @@ const FourNumberHelper = {
332
332
  max(t, other, change) {
333
333
  if (isNumber(t) && isNumber(other)) return max$4(t, other);
334
334
  toTempAB(t, other, change);
335
- 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]));
335
+ return set$3(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]));
336
336
  },
337
337
  add(t, other, change) {
338
338
  if (isNumber(t) && isNumber(other)) return t + other;
339
339
  toTempAB(t, other, change);
340
- return set$2(tempTo, tempA[0] + tempB[0], tempA[1] + tempB[1], tempA[2] + tempB[2], tempA[3] + tempB[3]);
340
+ return set$3(tempTo, tempA[0] + tempB[0], tempA[1] + tempB[1], tempA[2] + tempB[2], tempA[3] + tempB[3]);
341
341
  },
342
342
  swapAndScale(t, scaleX, scaleY, change) {
343
343
  if (isNumber(t)) return scaleX === scaleY ? t * scaleX : [ t * scaleY, t * scaleX ];
344
344
  const to = change ? t : [];
345
345
  const [top, right, bottom, left] = t.length === 4 ? t : get$5(t);
346
- return set$2(to, bottom * scaleY, left * scaleX, top * scaleY, right * scaleX);
346
+ return set$3(to, bottom * scaleY, left * scaleX, top * scaleY, right * scaleX);
347
347
  }
348
348
  };
349
349
 
350
- const {set: set$2, get: get$5, setTemp: setTemp, toTempAB: toTempAB} = FourNumberHelper;
350
+ const {set: set$3, get: get$5, setTemp: setTemp, toTempAB: toTempAB} = FourNumberHelper;
351
351
 
352
352
  const {round: round$3, pow: pow$1, max: max$3, floor: floor$2, PI: PI$3} = Math;
353
353
 
@@ -472,7 +472,7 @@ const {sin: sin$5, cos: cos$5, acos: acos, sqrt: sqrt$3} = Math;
472
472
 
473
473
  const {float: float$2} = MathHelper;
474
474
 
475
- const tempPoint$3 = {};
475
+ const tempPoint$4 = {};
476
476
 
477
477
  function getWorld() {
478
478
  return Object.assign(Object.assign(Object.assign({}, getMatrixData()), getBoundsData()), {
@@ -531,8 +531,8 @@ const MatrixHelper = {
531
531
  to.f = t.f * pixelRatio;
532
532
  },
533
533
  scaleOfOuter(t, origin, scaleX, scaleY) {
534
- M$6.toInnerPoint(t, origin, tempPoint$3);
535
- M$6.scaleOfInner(t, tempPoint$3, scaleX, scaleY);
534
+ M$6.toInnerPoint(t, origin, tempPoint$4);
535
+ M$6.scaleOfInner(t, tempPoint$4, scaleX, scaleY);
536
536
  },
537
537
  scaleOfInner(t, origin, scaleX, scaleY = scaleX) {
538
538
  M$6.translateInner(t, origin.x, origin.y);
@@ -550,8 +550,8 @@ const MatrixHelper = {
550
550
  t.d = c * sinR + d * cosR;
551
551
  },
552
552
  rotateOfOuter(t, origin, rotation) {
553
- M$6.toInnerPoint(t, origin, tempPoint$3);
554
- M$6.rotateOfInner(t, tempPoint$3, rotation);
553
+ M$6.toInnerPoint(t, origin, tempPoint$4);
554
+ M$6.rotateOfInner(t, tempPoint$4, rotation);
555
555
  },
556
556
  rotateOfInner(t, origin, rotation) {
557
557
  M$6.translateInner(t, origin.x, origin.y);
@@ -572,8 +572,8 @@ const MatrixHelper = {
572
572
  }
573
573
  },
574
574
  skewOfOuter(t, origin, skewX, skewY) {
575
- M$6.toInnerPoint(t, origin, tempPoint$3);
576
- M$6.skewOfInner(t, tempPoint$3, skewX, skewY);
575
+ M$6.toInnerPoint(t, origin, tempPoint$4);
576
+ M$6.skewOfInner(t, tempPoint$4, skewX, skewY);
577
577
  },
578
578
  skewOfInner(t, origin, skewX, skewY = 0) {
579
579
  M$6.translateInner(t, origin.x, origin.y);
@@ -774,7 +774,7 @@ const {float: float$1} = MathHelper;
774
774
 
775
775
  const {toInnerPoint: toInnerPoint$2, toOuterPoint: toOuterPoint$3} = MatrixHelper;
776
776
 
777
- const {sin: sin$4, cos: cos$4, abs: abs$4, sqrt: sqrt$2, atan2: atan2$2, min: min$1, round: round$2} = Math;
777
+ const {sin: sin$4, cos: cos$4, abs: abs$5, sqrt: sqrt$2, atan2: atan2$2, min: min$1, round: round$2} = Math;
778
778
 
779
779
  const PointHelper = {
780
780
  defaultPoint: getPointData(),
@@ -811,15 +811,15 @@ const PointHelper = {
811
811
  t.x += (t.x - origin.x) * (scaleX - 1);
812
812
  t.y += (t.y - origin.y) * (scaleY - 1);
813
813
  },
814
- rotate(t, rotation, origin) {
814
+ rotate(t, rotation, origin, radiusX = 1, radiusY = 1) {
815
815
  if (!origin) origin = P$5.defaultPoint;
816
816
  rotation *= OneRadian;
817
817
  const cosR = cos$4(rotation);
818
818
  const sinR = sin$4(rotation);
819
- const rx = t.x - origin.x;
820
- const ry = t.y - origin.y;
821
- t.x = origin.x + rx * cosR - ry * sinR;
822
- t.y = origin.y + rx * sinR + ry * cosR;
819
+ const rx = (t.x - origin.x) / radiusX;
820
+ const ry = (t.y - origin.y) / radiusY;
821
+ t.x = origin.x + (rx * cosR - ry * sinR) * radiusX;
822
+ t.y = origin.y + (rx * sinR + ry * cosR) * radiusY;
823
823
  },
824
824
  tempToInnerOf(t, matrix) {
825
825
  const {tempPoint: temp} = P$5;
@@ -872,15 +872,15 @@ const PointHelper = {
872
872
  return getDistanceFrom(t.x, t.y, point.x, point.y);
873
873
  },
874
874
  getDistanceFrom(x1, y1, x2, y2) {
875
- const x = abs$4(x2 - x1);
876
- const y = abs$4(y2 - y1);
875
+ const x = abs$5(x2 - x1);
876
+ const y = abs$5(y2 - y1);
877
877
  return sqrt$2(x * x + y * y);
878
878
  },
879
879
  getMinDistanceFrom(x1, y1, x2, y2, x3, y3) {
880
880
  return min$1(getDistanceFrom(x1, y1, x2, y2), getDistanceFrom(x2, y2, x3, y3));
881
881
  },
882
- getAngle(t, to) {
883
- return getAtan2(t, to) / OneRadian;
882
+ getAngle(t, to, radiusX, radiusY) {
883
+ return getAtan2(t, to, radiusX, radiusY) / OneRadian;
884
884
  },
885
885
  getRotation(t, origin, to, toOrigin) {
886
886
  if (!toOrigin) toOrigin = origin;
@@ -894,8 +894,8 @@ const PointHelper = {
894
894
  const d = toY - toOriginY;
895
895
  return Math.atan2(a * d - b * c, a * c + b * d);
896
896
  },
897
- getAtan2(t, to) {
898
- return atan2$2(to.y - t.y, to.x - t.x);
897
+ getAtan2(t, to, radiusX = 1, radiusY = 1) {
898
+ return atan2$2((to.y - t.y) / radiusY, (to.x - t.x) / radiusX);
899
899
  },
900
900
  getDistancePoint(t, to, distance, changeTo, fromTo) {
901
901
  const r = getAtan2(t, to);
@@ -952,12 +952,12 @@ class Point {
952
952
  PointHelper.scaleOf(this, origin, scaleX, scaleY);
953
953
  return this;
954
954
  }
955
- rotate(rotation, origin) {
956
- PointHelper.rotate(this, rotation, origin);
955
+ rotate(rotation, origin, radiusX, radiusY) {
956
+ PointHelper.rotate(this, rotation, origin, radiusX, radiusY);
957
957
  return this;
958
958
  }
959
- rotateOf(origin, rotation) {
960
- PointHelper.rotate(this, rotation, origin);
959
+ rotateOf(origin, rotation, radiusX, radiusY) {
960
+ PointHelper.rotate(this, rotation, origin, radiusX, radiusY);
961
961
  return this;
962
962
  }
963
963
  getRotation(origin, to, toOrigin) {
@@ -980,11 +980,11 @@ class Point {
980
980
  getDistancePoint(to, distance, changeTo, fromTo) {
981
981
  return new Point(PointHelper.getDistancePoint(this, to, distance, changeTo, fromTo));
982
982
  }
983
- getAngle(to) {
984
- return PointHelper.getAngle(this, to);
983
+ getAngle(to, radiusX, radiusY) {
984
+ return PointHelper.getAngle(this, to, radiusX, radiusY);
985
985
  }
986
- getAtan2(to) {
987
- return PointHelper.getAtan2(this, to);
986
+ getAtan2(to, radiusX, radiusY) {
987
+ return PointHelper.getAtan2(this, to, radiusX, radiusY);
988
988
  }
989
989
  isSame(point, quick) {
990
990
  return PointHelper.isSame(this, point, quick);
@@ -995,7 +995,7 @@ class Point {
995
995
  }
996
996
  }
997
997
 
998
- const tempPoint$2 = new Point;
998
+ const tempPoint$3 = new Point;
999
999
 
1000
1000
  class Matrix {
1001
1001
  constructor(a, b, c, d, e, f) {
@@ -2702,15 +2702,15 @@ const RectHelper = {
2702
2702
  }
2703
2703
  };
2704
2704
 
2705
- const {sin: sin$3, cos: cos$3, hypot: hypot, atan2: atan2$1, ceil: ceil, abs: abs$3, PI: PI$2, sqrt: sqrt$1, pow: pow} = Math;
2705
+ const {sin: sin$3, cos: cos$3, hypot: hypot, atan2: atan2$1, ceil: ceil, abs: abs$4, PI: PI$2, sqrt: sqrt$1, pow: pow} = Math;
2706
2706
 
2707
2707
  const {setPoint: setPoint$1, addPoint: addPoint$1} = TwoPointBoundsHelper;
2708
2708
 
2709
- const {set: set$1, toNumberPoints: toNumberPoints} = PointHelper;
2709
+ const {set: set$2, toNumberPoints: toNumberPoints} = PointHelper;
2710
2710
 
2711
2711
  const {M: M$5, L: L$6, C: C$4, Q: Q$4, Z: Z$5} = PathCommandMap;
2712
2712
 
2713
- const tempPoint$1 = {};
2713
+ const tempPoint$2 = {};
2714
2714
 
2715
2715
  const BezierHelper = {
2716
2716
  points(data, originPoints, curve, close) {
@@ -2779,14 +2779,14 @@ const BezierHelper = {
2779
2779
  const lenCB = hypot(CBx, CBy);
2780
2780
  let totalRadian = endRadian - startRadian;
2781
2781
  if (totalRadian < 0) totalRadian += PI2;
2782
- if (lenBA < 1e-12 || lenCB < 1e-12 || totalRadian < 1e-12 || abs$3(totalRadian - PI$2) < 1e-12) {
2782
+ if (lenBA < 1e-12 || lenCB < 1e-12 || totalRadian < 1e-12 || abs$4(totalRadian - PI$2) < 1e-12) {
2783
2783
  if (data) data.push(L$6, x1, y1);
2784
2784
  if (setPointBounds) {
2785
2785
  setPoint$1(setPointBounds, fromX, fromY);
2786
2786
  addPoint$1(setPointBounds, x1, y1);
2787
2787
  }
2788
- if (setStartPoint) set$1(setStartPoint, fromX, fromY);
2789
- if (setEndPoint) set$1(setEndPoint, x1, y1);
2788
+ if (setStartPoint) set$2(setStartPoint, fromX, fromY);
2789
+ if (setEndPoint) set$2(setEndPoint, x1, y1);
2790
2790
  return;
2791
2791
  }
2792
2792
  const anticlockwise = BAx * CBy - CBx * BAy < 0;
@@ -2812,7 +2812,7 @@ const BezierHelper = {
2812
2812
  let totalRadian = endRadian - startRadian;
2813
2813
  if (totalRadian < 0) totalRadian += PI2; else if (totalRadian > PI2) totalRadian -= PI2;
2814
2814
  if (anticlockwise) totalRadian -= PI2;
2815
- const parts = ceil(abs$3(totalRadian / PI_2));
2815
+ const parts = ceil(abs$4(totalRadian / PI_2));
2816
2816
  const partRadian = totalRadian / parts;
2817
2817
  const partRadian4Sin = sin$3(partRadian / 4);
2818
2818
  const control = 8 / 3 * partRadian4Sin * partRadian4Sin / sin$3(partRadian / 2);
@@ -2826,7 +2826,7 @@ const BezierHelper = {
2826
2826
  let fromX = cx + x, fromY = cy + y;
2827
2827
  if (data) data.push(data.length ? L$6 : M$5, fromX, fromY);
2828
2828
  if (setPointBounds) setPoint$1(setPointBounds, fromX, fromY);
2829
- if (setStartPoint) set$1(setStartPoint, fromX, fromY);
2829
+ if (setStartPoint) set$2(setStartPoint, fromX, fromY);
2830
2830
  for (let i = 0; i < parts; i++) {
2831
2831
  endCos = cos$3(endRadian);
2832
2832
  endSin = sin$3(endRadian);
@@ -2845,7 +2845,7 @@ const BezierHelper = {
2845
2845
  startRadian = endRadian;
2846
2846
  endRadian += partRadian;
2847
2847
  }
2848
- if (setEndPoint) set$1(setEndPoint, cx + x, cy + y);
2848
+ if (setEndPoint) set$2(setEndPoint, cx + x, cy + y);
2849
2849
  },
2850
2850
  quadraticCurveTo(data, fromX, fromY, x1, y1, toX, toY) {
2851
2851
  data.push(C$4, (fromX + 2 * x1) / 3, (fromY + 2 * y1) / 3, (toX + 2 * x1) / 3, (toY + 2 * y1) / 3, toX, toY);
@@ -2881,8 +2881,8 @@ const BezierHelper = {
2881
2881
  addMode ? addPoint$1(pointBounds, fromX, fromY) : setPoint$1(pointBounds, fromX, fromY);
2882
2882
  addPoint$1(pointBounds, toX, toY);
2883
2883
  for (let i = 0, len = tList.length; i < len; i++) {
2884
- getPointAndSet(tList[i], fromX, fromY, x1, y1, x2, y2, toX, toY, tempPoint$1);
2885
- addPoint$1(pointBounds, tempPoint$1.x, tempPoint$1.y);
2884
+ getPointAndSet(tList[i], fromX, fromY, x1, y1, x2, y2, toX, toY, tempPoint$2);
2885
+ addPoint$1(pointBounds, tempPoint$2.x, tempPoint$2.y);
2886
2886
  }
2887
2887
  },
2888
2888
  getPointAndSet(t, fromX, fromY, x1, y1, x2, y2, toX, toY, setPoint) {
@@ -3321,7 +3321,7 @@ 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
3321
3321
 
3322
3322
  const {getMinDistanceFrom: getMinDistanceFrom, getRadianFrom: getRadianFrom} = PointHelper;
3323
3323
 
3324
- const {tan: tan, min: min, abs: abs$2} = Math;
3324
+ const {tan: tan, min: min, abs: abs$3} = Math;
3325
3325
 
3326
3326
  const startPoint = {};
3327
3327
 
@@ -3381,7 +3381,7 @@ const PathCommandDataHelper = {
3381
3381
  arcTo(data, x1, y1, x2, y2, radius, lastX, lastY, fullRadius) {
3382
3382
  if (!isUndefined(lastX)) {
3383
3383
  const r = getMinDistanceFrom(lastX, lastY, x1, y1, x2, y2) / (fullRadius ? 1 : 2);
3384
- radius = min(radius, min(r, r * abs$2(tan(getRadianFrom(lastX, lastY, x1, y1, x2, y2) / 2))));
3384
+ radius = min(radius, min(r, r * abs$3(tan(getRadianFrom(lastX, lastY, x1, y1, x2, y2) / 2))));
3385
3385
  }
3386
3386
  data.push(U$2, x1, y1, x2, y2, radius);
3387
3387
  },
@@ -4586,7 +4586,9 @@ function sortType(defaultValue) {
4586
4586
  set(value) {
4587
4587
  if (this.__setAttr(key, value)) {
4588
4588
  this.waitParent(() => {
4589
- this.parent.__layout.childrenSortChange();
4589
+ const {parent: parent} = this;
4590
+ parent.__layout.childrenSortChange();
4591
+ if (parent.__.flow) parent.__layout.boxChange();
4590
4592
  });
4591
4593
  }
4592
4594
  }
@@ -4988,7 +4990,7 @@ const LeafHelper = {
4988
4990
  p = p.parent;
4989
4991
  }
4990
4992
  },
4991
- animateMove(t, move, speed = .3) {
4993
+ animateMove(t, move, speed = .3, onAnimate) {
4992
4994
  if (!move.x && !move.y) return;
4993
4995
  if (Math.abs(move.x) < 1 && Math.abs(move.y) < 1) {
4994
4996
  t.move(move);
@@ -4996,8 +4998,9 @@ const LeafHelper = {
4996
4998
  const x = move.x * speed, y = move.y * speed;
4997
4999
  move.x -= x, move.y -= y;
4998
5000
  t.move(x, y);
4999
- Platform.requestRender(() => L.animateMove(t, move, speed));
5001
+ Platform.requestRender(() => L.animateMove(t, move, speed, onAnimate));
5000
5002
  }
5003
+ onAnimate && onAnimate();
5001
5004
  }
5002
5005
  };
5003
5006
 
@@ -6038,7 +6041,7 @@ const LeafDataProxy = {
6038
6041
 
6039
6042
  const {setLayout: setLayout, multiplyParent: multiplyParent$2, translateInner: translateInner, defaultWorld: defaultWorld} = MatrixHelper;
6040
6043
 
6041
- const {toPoint: toPoint$3, tempPoint: tempPoint} = AroundHelper;
6044
+ const {toPoint: toPoint$3, tempPoint: tempPoint$1} = AroundHelper;
6042
6045
 
6043
6046
  const LeafMatrix = {
6044
6047
  __updateWorldMatrix() {
@@ -6059,8 +6062,8 @@ const LeafMatrix = {
6059
6062
  local.e = data.x + data.offsetX;
6060
6063
  local.f = data.y + data.offsetY;
6061
6064
  if (data.around || data.origin) {
6062
- toPoint$3(data.around || data.origin, layout.boxBounds, tempPoint);
6063
- translateInner(local, -tempPoint.x, -tempPoint.y, !data.around);
6065
+ toPoint$3(data.around || data.origin, layout.boxBounds, tempPoint$1);
6066
+ translateInner(local, -tempPoint$1.x, -tempPoint$1.y, !data.around);
6064
6067
  }
6065
6068
  }
6066
6069
  this.__layout.matrixChanged = undefined;
@@ -6169,6 +6172,7 @@ const LeafBounds = {
6169
6172
  if (this.isBranch) {
6170
6173
  this.__extraUpdate();
6171
6174
  if (this.__.flow) {
6175
+ if (this.__layout.childrenSortChanged) this.__updateSortChildren();
6172
6176
  if (this.__layout.boxChanged) this.__updateFlowLayout();
6173
6177
  updateAllMatrix$2(this);
6174
6178
  updateBounds$1(this, this);
@@ -6240,11 +6244,7 @@ const {excludeRenderBounds: excludeRenderBounds$1} = LeafBoundsHelper, {hasSize:
6240
6244
 
6241
6245
  const BranchRender = {
6242
6246
  __updateChange() {
6243
- const {__layout: layout} = this;
6244
- if (layout.childrenSortChanged) {
6245
- this.__updateSortChildren();
6246
- layout.childrenSortChanged = false;
6247
- }
6247
+ if (this.__layout.childrenSortChanged) this.__updateSortChildren();
6248
6248
  this.__.__checkSingle();
6249
6249
  },
6250
6250
  __render(canvas, options) {
@@ -6748,6 +6748,7 @@ let Branch = class Branch extends Leaf {
6748
6748
  children.sort(sort);
6749
6749
  this.__layout.affectChildrenSort = affectSort;
6750
6750
  }
6751
+ this.__layout.childrenSortChanged = false;
6751
6752
  }
6752
6753
  add(child, index) {
6753
6754
  if (child === this || child.destroyed) return debug$5.warn("add self or destroyed");
@@ -6983,7 +6984,7 @@ class LeafLevelList {
6983
6984
  }
6984
6985
  }
6985
6986
 
6986
- const version = "2.1.6";
6987
+ const version = "2.1.8";
6987
6988
 
6988
6989
  const debug$4 = Debug.get("LeaferCanvas");
6989
6990
 
@@ -8543,6 +8544,7 @@ let UI = UI_1 = class UI extends Leaf {
8543
8544
  this.set(keyframe);
8544
8545
  return Plugin.need("animate");
8545
8546
  }
8547
+ killAnimate(_type, _nextStyle) {}
8546
8548
  export(_filename, _options) {
8547
8549
  return Plugin.need("export");
8548
8550
  }
@@ -9302,32 +9304,56 @@ __decorate([ affectRenderBoundsType("hide") ], Frame.prototype, "overflow", void
9302
9304
 
9303
9305
  Frame = __decorate([ registerUI() ], Frame);
9304
9306
 
9305
- const {moveTo: moveTo$3, closePath: closePath$2, ellipse: ellipse} = PathCommandDataHelper;
9307
+ const {moveTo: moveTo$3, closePath: closePath$2, ellipse: ellipse} = PathCommandDataHelper, {tempPoint: tempPoint, set: set$1, rotate: rotate$2} = PointHelper, {abs: abs$2} = Math, tempCenter = {};
9306
9308
 
9307
9309
  let Ellipse = class Ellipse extends UI {
9308
9310
  get __tag() {
9309
9311
  return "Ellipse";
9310
9312
  }
9311
9313
  __updatePath() {
9312
- const data = this.__, {width: width, height: height, innerRadius: innerRadius, startAngle: startAngle, endAngle: endAngle} = data;
9314
+ const data = this.__, {width: width, height: height, innerRadius: innerRadius, startAngle: startAngle, endAngle: endAngle, closed: closed} = data;
9313
9315
  const rx = width / 2, ry = height / 2;
9314
9316
  const path = data.path = [];
9315
- let open;
9317
+ let open, hasAngle, closedAngle;
9318
+ if (startAngle || endAngle) hasAngle = true;
9319
+ if (hasAngle) closedAngle = abs$2(endAngle - startAngle) === 360;
9316
9320
  if (innerRadius) {
9317
- if (startAngle || endAngle) {
9318
- if (innerRadius < 1) ellipse(path, rx, ry, rx * innerRadius, ry * innerRadius, 0, startAngle, endAngle, false); else open = true;
9319
- ellipse(path, rx, ry, rx, ry, 0, endAngle, startAngle, true);
9321
+ const drawInnerEllipse = innerRadius < 1 || closed;
9322
+ let outerStartAngle = startAngle, outerEndAngle = endAngle, outerAnticlockwise;
9323
+ if (hasAngle) {
9324
+ if (drawInnerEllipse) {
9325
+ ellipse(path, rx, ry, rx * innerRadius, ry * innerRadius, 0, startAngle, endAngle);
9326
+ if (closedAngle) {
9327
+ set$1(tempPoint, width, ry);
9328
+ set$1(tempCenter, rx, ry);
9329
+ rotate$2(tempPoint, endAngle, tempCenter, rx, ry);
9330
+ moveTo$3(path, tempPoint.x, tempPoint.y);
9331
+ }
9332
+ outerStartAngle = endAngle;
9333
+ outerEndAngle = startAngle;
9334
+ outerAnticlockwise = true;
9335
+ } else {
9336
+ if (!closedAngle) open = true;
9337
+ }
9320
9338
  } else {
9321
- if (innerRadius < 1) {
9339
+ if (drawInnerEllipse) {
9322
9340
  ellipse(path, rx, ry, rx * innerRadius, ry * innerRadius);
9341
+ closePath$2(path);
9323
9342
  moveTo$3(path, width, ry);
9343
+ outerStartAngle = 360;
9344
+ outerAnticlockwise = true;
9345
+ } else {
9346
+ outerEndAngle = 360;
9324
9347
  }
9325
- ellipse(path, rx, ry, rx, ry, 0, 360, 0, true);
9326
9348
  }
9349
+ ellipse(path, rx, ry, rx, ry, 0, outerStartAngle, outerEndAngle, outerAnticlockwise);
9327
9350
  } else {
9328
- if (startAngle || endAngle) {
9329
- moveTo$3(path, rx, ry);
9330
- ellipse(path, rx, ry, rx, ry, 0, startAngle, endAngle, false);
9351
+ if (hasAngle) {
9352
+ if (!closedAngle) {
9353
+ if (!closed) open = true;
9354
+ if (!open) moveTo$3(path, rx, ry);
9355
+ }
9356
+ ellipse(path, rx, ry, rx, ry, 0, startAngle, endAngle);
9331
9357
  } else {
9332
9358
  ellipse(path, rx, ry, rx, ry);
9333
9359
  }
@@ -10194,6 +10220,7 @@ function checkSizeAndCreateData(ui, attrName, paint, image, leafPaint, boxBounds
10194
10220
  if (data.__autoSide) {
10195
10221
  ui.forceUpdate("width");
10196
10222
  LeafHelper.updateBounds(ui);
10223
+ ui.__layout.boundsChanged = true;
10197
10224
  if (ui.__proxyData) {
10198
10225
  ui.setProxyAttr("width", data.width);
10199
10226
  ui.setProxyAttr("height", data.height);
@@ -10201,7 +10228,7 @@ function checkSizeAndCreateData(ui, attrName, paint, image, leafPaint, boxBounds
10201
10228
  needUpdate = false;
10202
10229
  }
10203
10230
  }
10204
- if (paint.mode === "brush") PaintImage.brush(leafPaint, ui, attrName);
10231
+ if (paint.mode === "brush") PaintImage.brush(ui, attrName, leafPaint);
10205
10232
  if (!leafPaint.data) {
10206
10233
  PaintImage.createData(leafPaint, image, paint, boxBounds);
10207
10234
  const {transform: transform} = leafPaint.data, {opacity: opacity} = paint;
@@ -11467,4 +11494,4 @@ Object.assign(Effect, EffectModule);
11467
11494
 
11468
11495
  useCanvas();
11469
11496
 
11470
- export { AlignHelper, Answer, AroundHelper, AutoBounds, BezierHelper, Bounds, BoundsEvent, BoundsHelper, Box, BoxData, Branch, BranchHelper, BranchRender, Canvas, CanvasData, CanvasManager, ChildEvent, ColorConvert, Creator, DataHelper, Debug, Direction4, Direction9, Effect, Ellipse, EllipseData, EllipseHelper, Event, EventCreator, Eventer, Export, FileHelper, Filter, FourNumberHelper, Frame, FrameData, Group, GroupData, Image$1 as Image, ImageData, ImageEvent, ImageManager, IncrementId, LayoutEvent, Layouter, Leaf, LeafBounds, LeafBoundsHelper, LeafData, LeafDataProxy, LeafEventer, LeafHelper, LeafLayout, LeafLevelList, LeafList, LeafMatrix, LeafRender, Leafer, LeaferCanvas, LeaferCanvasBase, LeaferData, LeaferEvent, LeaferFilm, LeaferImage, LeaferVideo, 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 };
11497
+ export { AlignHelper, Answer, AroundHelper, AutoBounds, BezierHelper, Bounds, BoundsEvent, BoundsHelper, Box, BoxData, Branch, BranchHelper, BranchRender, Canvas, CanvasData, CanvasManager, ChildEvent, ColorConvert, Creator, DataHelper, Debug, Direction4, Direction9, Effect, Ellipse, EllipseData, EllipseHelper, Event, EventCreator, Eventer, Export, FileHelper, Filter, FourNumberHelper, Frame, FrameData, Group, GroupData, Image$1 as Image, ImageData, ImageEvent, ImageManager, IncrementId, LayoutEvent, Layouter, Leaf, LeafBounds, LeafBoundsHelper, LeafData, LeafDataProxy, LeafEventer, LeafHelper, LeafLayout, LeafLevelList, LeafList, LeafMatrix, LeafRender, Leafer, LeaferCanvas, LeaferCanvasBase, LeaferData, LeaferEvent, LeaferFilm, LeaferImage, LeaferVideo, 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$3 as tempPoint, tryToNumber, useCanvas, useModule, version, visibleType, zoomLayerType };