@leafer/core 1.5.0 → 1.5.2

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/lib/core.esm.js CHANGED
@@ -116,8 +116,9 @@ const MathHelper = {
116
116
  if (!scaleData)
117
117
  scaleData = {};
118
118
  if (size) {
119
- scaleData.scaleX = (typeof size === 'number' ? size : size.width) / originSize.width;
120
- scaleData.scaleY = (typeof size === 'number' ? size : size.height) / originSize.height;
119
+ const scaleX = (typeof size === 'number' ? size : size.width || 0) / originSize.width, scaleY = (typeof size === 'number' ? size : size.height || 0) / originSize.height;
120
+ scaleData.scaleX = scaleX || scaleY || 1;
121
+ scaleData.scaleY = scaleY || scaleX || 1;
121
122
  }
122
123
  else if (scale)
123
124
  MathHelper.assignScale(scaleData, scale);
@@ -1690,6 +1691,9 @@ const emptyData = {};
1690
1691
  function isNull(value) {
1691
1692
  return value === undefined || value === null;
1692
1693
  }
1694
+ function isEmptyData(value) {
1695
+ return JSON.stringify(value) === '{}';
1696
+ }
1693
1697
 
1694
1698
  /******************************************************************************
1695
1699
  Copyright (c) Microsoft Corporation.
@@ -2029,13 +2033,11 @@ class LeaferCanvasBase extends Canvas {
2029
2033
  this.worldTransform = {};
2030
2034
  if (!config)
2031
2035
  config = minSize;
2032
- if (!config.pixelRatio)
2033
- config.pixelRatio = Platform.devicePixelRatio;
2034
2036
  this.manager = manager;
2035
2037
  this.innerId = IncrementId.create(IncrementId.CNAVAS);
2036
2038
  const { width, height, pixelRatio } = config;
2037
2039
  this.autoLayout = !width || !height;
2038
- this.size.pixelRatio = pixelRatio;
2040
+ this.size.pixelRatio = pixelRatio | Platform.devicePixelRatio;
2039
2041
  this.config = config;
2040
2042
  this.init();
2041
2043
  }
@@ -2232,7 +2234,7 @@ class LeaferCanvasBase extends Canvas {
2232
2234
  tempBounds.ceil();
2233
2235
  }
2234
2236
  isSameSize(size) {
2235
- return this.width === size.width && this.height === size.height && this.pixelRatio === size.pixelRatio;
2237
+ return this.width === size.width && this.height === size.height && (!size.pixelRatio || this.pixelRatio === size.pixelRatio);
2236
2238
  }
2237
2239
  getSameCanvas(useSameWorldTransform, useSameSmooth) {
2238
2240
  const canvas = this.manager ? this.manager.get(this.size) : Creator.canvas(Object.assign({}, this.size));
@@ -2347,7 +2349,7 @@ const RectHelper = {
2347
2349
  const { sin: sin$1, cos: cos$1, atan2: atan2$1, ceil, abs: abs$1, PI, sqrt: sqrt$1, pow } = Math;
2348
2350
  const { setPoint: setPoint$1, addPoint: addPoint$1 } = TwoPointBoundsHelper;
2349
2351
  const { set, toNumberPoints } = PointHelper;
2350
- const { M: M$5, L: L$6, C: C$5, Q: Q$4, Z: Z$5 } = PathCommandMap;
2352
+ const { M: M$5, L: L$6, C: C$4, Q: Q$4, Z: Z$5 } = PathCommandMap;
2351
2353
  const tempPoint$1 = {};
2352
2354
  const BezierHelper = {
2353
2355
  points(data, originPoints, curve, close) {
@@ -2382,7 +2384,7 @@ const BezierHelper = {
2382
2384
  data.push(Q$4, c1X, c1Y, bX, bY);
2383
2385
  }
2384
2386
  else {
2385
- data.push(C$5, c2X, c2Y, c1X, c1Y, bX, bY);
2387
+ data.push(C$4, c2X, c2Y, c1X, c1Y, bX, bY);
2386
2388
  }
2387
2389
  c2X = bX + cb * cX;
2388
2390
  c2Y = bY + cb * cY;
@@ -2487,7 +2489,7 @@ const BezierHelper = {
2487
2489
  x2 = cx + x + control * (rotationCos * radiusX * endSin + rotationSin * radiusY * endCos);
2488
2490
  y2 = cy + y + control * (rotationSin * radiusX * endSin - rotationCos * radiusY * endCos);
2489
2491
  if (data)
2490
- data.push(C$5, x1, y1, x2, y2, cx + x, cy + y);
2492
+ data.push(C$4, x1, y1, x2, y2, cx + x, cy + y);
2491
2493
  if (setPointBounds)
2492
2494
  toTwoPointBounds$1(cx + startX, cy + startY, x1, y1, x2, y2, cx + x, cy + y, setPointBounds, true);
2493
2495
  startX = x;
@@ -2501,7 +2503,7 @@ const BezierHelper = {
2501
2503
  set(setEndPoint, cx + x, cy + y);
2502
2504
  },
2503
2505
  quadraticCurveTo(data, fromX, fromY, x1, y1, toX, toY) {
2504
- data.push(C$5, (fromX + 2 * x1) / 3, (fromY + 2 * y1) / 3, (toX + 2 * x1) / 3, (toY + 2 * y1) / 3, toX, toY);
2506
+ data.push(C$4, (fromX + 2 * x1) / 3, (fromY + 2 * y1) / 3, (toX + 2 * x1) / 3, (toY + 2 * y1) / 3, toX, toY);
2505
2507
  },
2506
2508
  toTwoPointBoundsByQuadraticCurve(fromX, fromY, x1, y1, toX, toY, pointBounds, addMode) {
2507
2509
  toTwoPointBounds$1(fromX, fromY, (fromX + 2 * x1) / 3, (fromY + 2 * y1) / 3, (toX + 2 * x1) / 3, (toY + 2 * y1) / 3, toX, toY, pointBounds, addMode);
@@ -2609,7 +2611,7 @@ const EllipseHelper = {
2609
2611
  }
2610
2612
  };
2611
2613
 
2612
- const { M: M$4, m, L: L$5, l, H, h, V, v, C: C$4, c, S, s, Q: Q$3, q, T, t, A, a, Z: Z$4, z, N: N$3, D: D$3, X: X$3, G: G$3, F: F$4, O: O$3, P: P$3, U: U$3 } = PathCommandMap;
2614
+ const { M: M$4, m, L: L$5, l, H, h, V, v, C: C$3, c, S, s, Q: Q$3, q, T, t, A, a, Z: Z$4, z, N: N$3, D: D$3, X: X$3, G: G$3, F: F$4, O: O$3, P: P$3, U: U$3 } = PathCommandMap;
2613
2615
  const { rect: rect$1, roundRect: roundRect$2, arcTo: arcTo$3, arc: arc$3, ellipse: ellipse$3, quadraticCurveTo: quadraticCurveTo$1 } = BezierHelper;
2614
2616
  const { ellipticalArc } = EllipseHelper;
2615
2617
  const debug$7 = Debug.get('PathConvert');
@@ -2737,14 +2739,14 @@ const PathConvert = {
2737
2739
  old[i + 4] += y;
2738
2740
  command = S;
2739
2741
  case S:
2740
- smooth = (lastCommand === C$4) || (lastCommand === S);
2742
+ smooth = (lastCommand === C$3) || (lastCommand === S);
2741
2743
  x1 = smooth ? (x * 2 - controlX) : old[i + 1];
2742
2744
  y1 = smooth ? (y * 2 - controlY) : old[i + 2];
2743
2745
  controlX = old[i + 1];
2744
2746
  controlY = old[i + 2];
2745
2747
  x = old[i + 3];
2746
2748
  y = old[i + 4];
2747
- data.push(C$4, x1, y1, controlX, controlY, x, y);
2749
+ data.push(C$3, x1, y1, controlX, controlY, x, y);
2748
2750
  i += 5;
2749
2751
  break;
2750
2752
  case c:
@@ -2754,13 +2756,13 @@ const PathConvert = {
2754
2756
  old[i + 4] += y;
2755
2757
  old[i + 5] += x;
2756
2758
  old[i + 6] += y;
2757
- command = C$4;
2758
- case C$4:
2759
+ command = C$3;
2760
+ case C$3:
2759
2761
  controlX = old[i + 3];
2760
2762
  controlY = old[i + 4];
2761
2763
  x = old[i + 5];
2762
2764
  y = old[i + 6];
2763
- data.push(C$4, old[i + 1], old[i + 2], controlX, controlY, x, y);
2765
+ data.push(C$3, old[i + 1], old[i + 2], controlX, controlY, x, y);
2764
2766
  i += 7;
2765
2767
  break;
2766
2768
  case t:
@@ -2871,7 +2873,7 @@ const PathConvert = {
2871
2873
  data.push(L$5, item.x, item.y);
2872
2874
  break;
2873
2875
  case 'C':
2874
- data.push(C$4, item.x1, item.y1, item.x2, item.y2, item.x, item.y);
2876
+ data.push(C$3, item.x1, item.y1, item.x2, item.y2, item.x, item.y);
2875
2877
  break;
2876
2878
  case 'Q':
2877
2879
  data.push(Q$3, item.x1, item.y1, item.x, item.y);
@@ -2898,7 +2900,7 @@ const PathConvert = {
2898
2900
  };
2899
2901
  const { current, pushData, copyData } = PathConvert;
2900
2902
 
2901
- const { M: M$3, L: L$4, C: C$3, 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;
2903
+ 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;
2902
2904
  const { getMinDistanceFrom, getRadianFrom } = PointHelper;
2903
2905
  const { tan, min, abs } = Math;
2904
2906
  const startPoint = {};
@@ -2913,7 +2915,7 @@ const PathCommandDataHelper = {
2913
2915
  data.push(L$4, x, y);
2914
2916
  },
2915
2917
  bezierCurveTo(data, x1, y1, x2, y2, x, y) {
2916
- data.push(C$3, x1, y1, x2, y2, x, y);
2918
+ data.push(C$2, x1, y1, x2, y2, x, y);
2917
2919
  },
2918
2920
  quadraticCurveTo(data, x1, y1, x, y) {
2919
2921
  data.push(Q$2, x1, y1, x, y);
@@ -3075,7 +3077,7 @@ class PathCreator {
3075
3077
  paint() { }
3076
3078
  }
3077
3079
 
3078
- const { M: M$2, L: L$3, C: C$2, Q: Q$1, Z: Z$2, N: N$1, D: D$1, X: X$1, G: G$1, F: F$2, O: O$1, P: P$1, U: U$1 } = PathCommandMap;
3080
+ const { M: M$2, L: L$3, C: C$1, Q: Q$1, Z: Z$2, N: N$1, D: D$1, X: X$1, G: G$1, F: F$2, O: O$1, P: P$1, U: U$1 } = PathCommandMap;
3079
3081
  const debug$6 = Debug.get('PathDrawer');
3080
3082
  const PathDrawer = {
3081
3083
  drawPathByData(drawer, data) {
@@ -3094,7 +3096,7 @@ const PathDrawer = {
3094
3096
  drawer.lineTo(data[i + 1], data[i + 2]);
3095
3097
  i += 3;
3096
3098
  break;
3097
- case C$2:
3099
+ case C$1:
3098
3100
  drawer.bezierCurveTo(data[i + 1], data[i + 2], data[i + 3], data[i + 4], data[i + 5], data[i + 6]);
3099
3101
  i += 7;
3100
3102
  break;
@@ -3146,7 +3148,7 @@ const PathDrawer = {
3146
3148
  }
3147
3149
  };
3148
3150
 
3149
- const { M: M$1, L: L$2, C: C$1, Q, Z: Z$1, N, D, X, G, F: F$1, O, P, U } = PathCommandMap;
3151
+ const { M: M$1, L: L$2, C, Q, Z: Z$1, N, D, X, G, F: F$1, O, P, U } = PathCommandMap;
3150
3152
  const { toTwoPointBounds, toTwoPointBoundsByQuadraticCurve, arcTo: arcTo$1, arc, ellipse } = BezierHelper;
3151
3153
  const { addPointBounds, copy: copy$4, addPoint, setPoint, addBounds, toBounds: toBounds$1 } = TwoPointBoundsHelper;
3152
3154
  const debug$5 = Debug.get('PathBounds');
@@ -3167,7 +3169,7 @@ const PathBounds = {
3167
3169
  while (i < len) {
3168
3170
  command = data[i];
3169
3171
  if (i === 0) {
3170
- if (command === Z$1 || command === C$1 || command === Q) {
3172
+ if (command === Z$1 || command === C || command === Q) {
3171
3173
  setPoint(setPointBounds, x, y);
3172
3174
  }
3173
3175
  else {
@@ -3182,7 +3184,7 @@ const PathBounds = {
3182
3184
  addPoint(setPointBounds, x, y);
3183
3185
  i += 3;
3184
3186
  break;
3185
- case C$1:
3187
+ case C:
3186
3188
  toX = data[i + 5];
3187
3189
  toY = data[i + 6];
3188
3190
  toTwoPointBounds(x, y, data[i + 1], data[i + 2], data[i + 3], data[i + 4], toX, toY, tempPointBounds);
@@ -3264,12 +3266,12 @@ const PathBounds = {
3264
3266
  }
3265
3267
  };
3266
3268
 
3267
- const { M, L: L$1, C, Z } = PathCommandMap;
3269
+ const { M, L: L$1, Z } = PathCommandMap;
3268
3270
  const { getCenterX, getCenterY } = PointHelper;
3269
3271
  const { arcTo } = PathCommandDataHelper;
3270
3272
  const PathCorner = {
3271
3273
  smooth(data, cornerRadius, _cornerSmoothing) {
3272
- let command;
3274
+ let command, commandLen;
3273
3275
  let i = 0, x = 0, y = 0, startX = 0, startY = 0, secondX = 0, secondY = 0, lastX = 0, lastY = 0;
3274
3276
  const len = data.length;
3275
3277
  const smooth = [];
@@ -3306,15 +3308,16 @@ const PathCorner = {
3306
3308
  lastX = x;
3307
3309
  lastY = y;
3308
3310
  break;
3309
- case C:
3310
- smooth.push(C, data[i + 1], data[i + 2], data[i + 3], data[i + 4], data[i + 5], data[i + 6]);
3311
- i += 7;
3312
- break;
3313
3311
  case Z:
3314
3312
  arcTo(smooth, startX, startY, secondX, secondY, cornerRadius, lastX, lastY);
3315
3313
  smooth.push(Z);
3316
3314
  i += 1;
3317
3315
  break;
3316
+ default:
3317
+ commandLen = PathNumberCommandLengthMap[command];
3318
+ for (let j = 0; j < commandLen; j++)
3319
+ smooth.push(data[i + j]);
3320
+ i += commandLen;
3318
3321
  }
3319
3322
  }
3320
3323
  if (command !== Z) {
@@ -4073,33 +4076,45 @@ function defineDataProcessor(target, key, defaultValue) {
4073
4076
  else if (typeof defaultValue === 'function') {
4074
4077
  property.get = function () {
4075
4078
  let v = this[computedKey];
4076
- if (v === undefined)
4077
- this[computedKey] = v = defaultValue(this.__leaf);
4078
- return v;
4079
+ return v === undefined ? defaultValue(this.__leaf) : v;
4080
+ };
4081
+ }
4082
+ else if (typeof defaultValue === 'object') {
4083
+ const isEmpty = isEmptyData(defaultValue);
4084
+ property.get = function () {
4085
+ let v = this[computedKey];
4086
+ return v === undefined ? this[computedKey] = isEmpty ? {} : DataHelper.clone(defaultValue) : v;
4079
4087
  };
4080
4088
  }
4089
+ const isBox = target.isBranchLeaf;
4081
4090
  if (key === 'width') {
4082
4091
  property.get = function () {
4083
4092
  const v = this[computedKey];
4084
4093
  if (v === undefined) {
4085
- const t = this;
4086
- return t._height && t.__naturalWidth && t.__useNaturalRatio ? t._height * t.__naturalWidth / t.__naturalHeight : t.__naturalWidth || defaultValue;
4094
+ const t = this, naturalWidth = t.__naturalWidth, leaf = t.__leaf;
4095
+ if (!defaultValue || leaf.pathInputed)
4096
+ return leaf.boxBounds.width;
4097
+ if (naturalWidth)
4098
+ return t._height && t.__useNaturalRatio ? t._height * naturalWidth / t.__naturalHeight : naturalWidth;
4099
+ return (isBox && leaf.children.length) ? leaf.boxBounds.width : defaultValue;
4087
4100
  }
4088
- else {
4101
+ else
4089
4102
  return v;
4090
- }
4091
4103
  };
4092
4104
  }
4093
4105
  else if (key === 'height') {
4094
4106
  property.get = function () {
4095
4107
  const v = this[computedKey];
4096
4108
  if (v === undefined) {
4097
- const t = this;
4098
- return t._width && t.__naturalHeight && t.__useNaturalRatio ? t._width * t.__naturalHeight / t.__naturalWidth : t.__naturalHeight || defaultValue;
4109
+ const t = this, naturalHeight = t.__naturalHeight, leaf = t.__leaf;
4110
+ if (!defaultValue || leaf.pathInputed)
4111
+ return leaf.boxBounds.height;
4112
+ if (naturalHeight)
4113
+ return t._width && t.__useNaturalRatio ? t._width * naturalHeight / t.__naturalWidth : naturalHeight;
4114
+ return (isBox && leaf.children.length) ? leaf.boxBounds.height : defaultValue;
4099
4115
  }
4100
- else {
4116
+ else
4101
4117
  return v;
4102
- }
4103
4118
  };
4104
4119
  }
4105
4120
  let descriptor, find = data;
@@ -4526,7 +4541,12 @@ class LeafLayout {
4526
4541
  while (root.parent && !root.parent.leafer) {
4527
4542
  root = root.parent;
4528
4543
  }
4529
- Platform.layout(root);
4544
+ const r = root;
4545
+ if (r.__fullLayouting)
4546
+ return;
4547
+ r.__fullLayouting = true;
4548
+ Platform.layout(r);
4549
+ delete r.__fullLayouting;
4530
4550
  }
4531
4551
  }
4532
4552
  getTransform(relative = 'world') {
@@ -6051,7 +6071,7 @@ class LeafLevelList {
6051
6071
  }
6052
6072
  }
6053
6073
 
6054
- const version = "1.5.0";
6074
+ const version = "1.5.2";
6055
6075
 
6056
- export { AlignHelper, Answer, AroundHelper, AutoBounds, BezierHelper, Bounds, BoundsHelper, Branch, BranchHelper, BranchRender, CanvasManager, ChildEvent, Creator, DataHelper, Debug, Direction4, Direction9, EllipseHelper, Event, EventCreator, Eventer, FileHelper, ImageEvent, ImageManager, IncrementId, LayoutEvent, Leaf, LeafBounds, LeafBoundsHelper, LeafData, LeafDataProxy, LeafEventer, LeafHelper, LeafLayout, LeafLevelList, LeafList, LeafMatrix, LeafRender, LeaferCanvasBase, LeaferEvent, LeaferImage, MathHelper, Matrix, MatrixHelper, NeedConvertToCanvasCommandMap, OneRadian, PI2, PI_2, PathBounds, PathCommandDataHelper, PathCommandMap, PathConvert, PathCorner, PathCreator, PathDrawer, PathHelper, PathNumberCommandLengthMap, PathNumberCommandMap, Platform, Plugin, Point, PointHelper, PropertyEvent, RectHelper, RenderEvent, ResizeEvent, Resource, Run, StringNumberMap, TaskItem, TaskProcessor, TwoPointBoundsHelper, UICreator, WaitHelper, WatchEvent, affectRenderBoundsType, affectStrokeBoundsType, attr, autoLayoutType, boundsType, canvasPatch, canvasSizeAttrs, cursorType, dataProcessor, dataType, decorateLeafAttr, defineDataProcessor, defineKey, defineLeafAttr, doBoundsType, doStrokeType, emptyData, eraserType, getBoundsData, getDescriptor, getMatrixData, getPointData, hitType, isNull, layoutProcessor, maskType, naturalBoundsType, opacityType, pathInputType, pathType, pen, positionType, registerUI, registerUIEvent, rewrite, rewriteAble, rotationType, scaleType, sortType, strokeType, surfaceType, tempBounds, tempMatrix, tempPoint$2 as tempPoint, useModule, version, visibleType };
6076
+ export { AlignHelper, Answer, AroundHelper, AutoBounds, BezierHelper, Bounds, BoundsHelper, Branch, BranchHelper, BranchRender, CanvasManager, ChildEvent, Creator, DataHelper, Debug, Direction4, Direction9, EllipseHelper, Event, EventCreator, Eventer, FileHelper, ImageEvent, ImageManager, IncrementId, LayoutEvent, Leaf, LeafBounds, LeafBoundsHelper, LeafData, LeafDataProxy, LeafEventer, LeafHelper, LeafLayout, LeafLevelList, LeafList, LeafMatrix, LeafRender, LeaferCanvasBase, LeaferEvent, LeaferImage, MathHelper, Matrix, MatrixHelper, NeedConvertToCanvasCommandMap, OneRadian, PI2, PI_2, PathBounds, PathCommandDataHelper, PathCommandMap, PathConvert, PathCorner, PathCreator, PathDrawer, PathHelper, PathNumberCommandLengthMap, PathNumberCommandMap, Platform, Plugin, Point, PointHelper, PropertyEvent, RectHelper, RenderEvent, ResizeEvent, Resource, Run, StringNumberMap, TaskItem, TaskProcessor, TwoPointBoundsHelper, UICreator, WaitHelper, WatchEvent, affectRenderBoundsType, affectStrokeBoundsType, attr, autoLayoutType, boundsType, canvasPatch, canvasSizeAttrs, cursorType, dataProcessor, dataType, decorateLeafAttr, defineDataProcessor, defineKey, defineLeafAttr, doBoundsType, doStrokeType, emptyData, eraserType, getBoundsData, getDescriptor, getMatrixData, getPointData, hitType, isEmptyData, isNull, layoutProcessor, maskType, naturalBoundsType, opacityType, pathInputType, pathType, pen, positionType, registerUI, registerUIEvent, rewrite, rewriteAble, rotationType, scaleType, sortType, strokeType, surfaceType, tempBounds, tempMatrix, tempPoint$2 as tempPoint, useModule, version, visibleType };
6057
6077
  //# sourceMappingURL=core.esm.js.map