@leafer-draw/worker 1.6.7 → 1.7.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.
@@ -43,7 +43,7 @@ const IncrementId = {
43
43
  };
44
44
  const I$1 = IncrementId;
45
45
 
46
- const { round: round$3, pow: pow$1, PI: PI$4 } = Math;
46
+ const { round: round$3, pow: pow$1, PI: PI$3 } = Math;
47
47
  const MathHelper = {
48
48
  within(value, min, max) {
49
49
  if (typeof min === 'object')
@@ -139,9 +139,9 @@ const MathHelper = {
139
139
  function randInt(num) {
140
140
  return Math.round(Math.random() * num);
141
141
  }
142
- const OneRadian = PI$4 / 180;
143
- const PI2 = PI$4 * 2;
144
- const PI_2 = PI$4 / 2;
142
+ const OneRadian = PI$3 / 180;
143
+ const PI2 = PI$3 * 2;
144
+ const PI_2 = PI$3 / 2;
145
145
  function getPointData() { return { x: 0, y: 0 }; }
146
146
  function getBoundsData() { return { x: 0, y: 0, width: 0, height: 0 }; }
147
147
  function getMatrixData() { return { a: 1, b: 0, c: 0, d: 1, e: 0, f: 0 }; }
@@ -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, PI: PI$3 } = Math;
439
+ const { sin: sin$4, cos: cos$4, abs: abs$4, sqrt: sqrt$2, atan2: atan2$2, min: min$1, round: round$2 } = Math;
440
440
  const PointHelper = {
441
441
  defaultPoint: getPointData(),
442
442
  tempPoint: {},
@@ -549,10 +549,11 @@ const PointHelper = {
549
549
  getRadianFrom(fromX, fromY, originX, originY, toX, toY, toOriginX, toOriginY) {
550
550
  if (toOriginX === undefined)
551
551
  toOriginX = originX, toOriginY = originY;
552
- let fromAngle = atan2$2(fromY - originY, fromX - originX);
553
- let toAngle = atan2$2(toY - toOriginY, toX - toOriginX);
554
- const radian = toAngle - fromAngle;
555
- return radian < -PI$3 ? radian + PI2 : radian;
552
+ const a = fromX - originX;
553
+ const b = fromY - originY;
554
+ const c = toX - toOriginX;
555
+ const d = toY - toOriginY;
556
+ return Math.atan2(a * d - b * c, a * c + b * d);
556
557
  },
557
558
  getAtan2(t, to) {
558
559
  return atan2$2(to.y - t.y, to.x - t.x);
@@ -3339,7 +3340,7 @@ const { getCenterX, getCenterY } = PointHelper;
3339
3340
  const { arcTo } = PathCommandDataHelper;
3340
3341
  const PathCorner = {
3341
3342
  smooth(data, cornerRadius, _cornerSmoothing) {
3342
- let command, commandLen;
3343
+ let command, lastCommand, commandLen;
3343
3344
  let i = 0, x = 0, y = 0, startX = 0, startY = 0, secondX = 0, secondY = 0, lastX = 0, lastY = 0;
3344
3345
  const len = data.length;
3345
3346
  const smooth = [];
@@ -3377,8 +3378,10 @@ const PathCorner = {
3377
3378
  lastY = y;
3378
3379
  break;
3379
3380
  case Z:
3380
- arcTo(smooth, startX, startY, secondX, secondY, cornerRadius, lastX, lastY);
3381
- smooth.push(Z);
3381
+ if (lastCommand !== Z) {
3382
+ arcTo(smooth, startX, startY, secondX, secondY, cornerRadius, lastX, lastY);
3383
+ smooth.push(Z);
3384
+ }
3382
3385
  i += 1;
3383
3386
  break;
3384
3387
  default:
@@ -3387,6 +3390,7 @@ const PathCorner = {
3387
3390
  smooth.push(data[i + j]);
3388
3391
  i += commandLen;
3389
3392
  }
3393
+ lastCommand = command;
3390
3394
  }
3391
3395
  if (command !== Z) {
3392
3396
  smooth[1] = startX;
@@ -3883,12 +3887,12 @@ class LeaferImage {
3883
3887
  try {
3884
3888
  if (transform && pattern.setTransform) {
3885
3889
  pattern.setTransform(transform);
3886
- transform = null;
3890
+ transform = undefined;
3887
3891
  }
3888
3892
  }
3889
3893
  catch (_a) { }
3890
3894
  if (paint)
3891
- paint.transform = transform;
3895
+ DataHelper.stintSet(paint, 'transform', transform);
3892
3896
  return pattern;
3893
3897
  }
3894
3898
  destroy() {
@@ -3993,10 +3997,14 @@ function pathInputType(defaultValue) {
3993
3997
  }));
3994
3998
  }
3995
3999
  const pathType = boundsType;
3996
- function affectStrokeBoundsType(defaultValue) {
4000
+ function affectStrokeBoundsType(defaultValue, useStroke) {
3997
4001
  return decorateLeafAttr(defaultValue, (key) => attr({
3998
4002
  set(value) {
3999
- this.__setAttr(key, value) && doStrokeType(this);
4003
+ if (this.__setAttr(key, value)) {
4004
+ doStrokeType(this);
4005
+ if (useStroke)
4006
+ this.__.__useStroke = true;
4007
+ }
4000
4008
  }
4001
4009
  }));
4002
4010
  }
@@ -5422,6 +5430,8 @@ const LeafBounds = {
5422
5430
 
5423
5431
  const LeafRender = {
5424
5432
  __render(canvas, options) {
5433
+ if (options.shape)
5434
+ return this.__renderShape(canvas, options);
5425
5435
  if (this.__worldOpacity) {
5426
5436
  const data = this.__;
5427
5437
  canvas.setWorld(this.__nowWorld = this.__getNowWorld(options));
@@ -5431,12 +5441,10 @@ const LeafRender = {
5431
5441
  return this.__renderEraser(canvas, options);
5432
5442
  const tempCanvas = canvas.getSameCanvas(true, true);
5433
5443
  this.__draw(tempCanvas, options, canvas);
5434
- if (this.__worldFlipped) {
5444
+ if (this.__worldFlipped)
5435
5445
  canvas.copyWorldByReset(tempCanvas, this.__nowWorld, null, data.__blendMode, true);
5436
- }
5437
- else {
5446
+ else
5438
5447
  canvas.copyWorldToInner(tempCanvas, this.__nowWorld, this.__layout.renderBounds, data.__blendMode);
5439
- }
5440
5448
  tempCanvas.recycle(this.__nowWorld);
5441
5449
  }
5442
5450
  else {
@@ -5446,6 +5454,12 @@ const LeafRender = {
5446
5454
  Debug.drawBounds(this, canvas, options);
5447
5455
  }
5448
5456
  },
5457
+ __renderShape(canvas, options) {
5458
+ if (this.__worldOpacity) {
5459
+ canvas.setWorld(this.__nowWorld = this.__getNowWorld(options));
5460
+ this.__drawShape(canvas, options);
5461
+ }
5462
+ },
5449
5463
  __clip(canvas, options) {
5450
5464
  if (this.__worldOpacity) {
5451
5465
  canvas.setWorld(this.__nowWorld = this.__getNowWorld(options));
@@ -5865,7 +5879,8 @@ let Leaf = class Leaf {
5865
5879
  __drawFast(_canvas, _options) { }
5866
5880
  __draw(_canvas, _options, _originCanvas) { }
5867
5881
  __clip(_canvas, _options) { }
5868
- __renderShape(_canvas, _options, _ignoreFill, _ignoreStroke) { }
5882
+ __renderShape(_canvas, _options) { }
5883
+ __drawShape(_canvas, _options) { }
5869
5884
  __updateWorldOpacity() { }
5870
5885
  __updateChange() { }
5871
5886
  __drawPath(_canvas) { }
@@ -6233,7 +6248,7 @@ class LeafLevelList {
6233
6248
  }
6234
6249
  }
6235
6250
 
6236
- const version = "1.6.7";
6251
+ const version = "1.7.0";
6237
6252
 
6238
6253
  class LeaferCanvas extends LeaferCanvasBase {
6239
6254
  get allowBackgroundColor() { return true; }
@@ -6993,13 +7008,9 @@ class UIData extends LeafData {
6993
7008
  else
6994
7009
  return strokeWidth;
6995
7010
  }
6996
- get __hasStroke() { return this.stroke && this.strokeWidth; }
6997
- get __hasHalf() { const t = this; return (t.stroke && t.strokeAlign === 'center' && t.strokeWidth % 2) || undefined; }
6998
7011
  get __hasMultiPaint() {
6999
7012
  const t = this;
7000
- if ((t.__isFills && t.fill.length > 1) || (t.__isStrokes && t.stroke.length > 1) || t.__useEffect)
7001
- return true;
7002
- return t.fill && this.__hasStroke;
7013
+ return (t.fill && this.__useStroke) || (t.__isFills && t.fill.length > 1) || (t.__isStrokes && t.stroke.length > 1) || t.__useEffect;
7003
7014
  }
7004
7015
  get __clipAfterFill() { const t = this; return (t.cornerRadius || t.innerShadow || t.__pathInputed); }
7005
7016
  get __hasSurface() { const t = this; return (t.fill || t.stroke); }
@@ -7290,15 +7301,18 @@ const { stintSet: stintSet$1 } = DataHelper;
7290
7301
  const UIRender = {
7291
7302
  __updateChange() {
7292
7303
  const data = this.__;
7304
+ if (data.__useStroke) {
7305
+ const useStroke = data.__useStroke = !!(data.stroke && data.strokeWidth);
7306
+ stintSet$1(this.__world, 'half', useStroke && data.strokeAlign === 'center' && data.strokeWidth % 2);
7307
+ stintSet$1(data, '__fillAfterStroke', useStroke && data.strokeAlign === 'outside' && data.fill && !data.__isTransparentFill);
7308
+ }
7293
7309
  if (data.__useEffect) {
7294
7310
  const { shadow, fill, stroke } = data, otherEffect = data.innerShadow || data.blur || data.backgroundBlur || data.filter;
7295
7311
  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')));
7296
7312
  data.__useEffect = !!(shadow || otherEffect);
7297
7313
  }
7298
- stintSet$1(this.__world, 'half', data.__hasHalf);
7299
- stintSet$1(data, '__fillAfterStroke', data.stroke && data.strokeAlign === 'outside' && data.fill && !data.__isTransparentFill);
7300
7314
  data.__checkSingle();
7301
- stintSet$1(data, '__complex', data.__isFills || data.__isStrokes || data.cornerRadius || data.__useEffect);
7315
+ stintSet$1(data, '__complex', (data.__isFills || data.__isStrokes || data.cornerRadius || data.__useEffect));
7302
7316
  },
7303
7317
  __drawFast(canvas, options) {
7304
7318
  drawFast(this, canvas, options);
@@ -7356,18 +7370,15 @@ const UIRender = {
7356
7370
  this.__drawFast(canvas, options);
7357
7371
  }
7358
7372
  },
7359
- __renderShape(canvas, options, ignoreFill, ignoreStroke) {
7360
- if (this.__worldOpacity) {
7361
- canvas.setWorld(this.__nowWorld = this.__getNowWorld(options));
7362
- const { fill, stroke } = this.__;
7363
- this.__drawRenderPath(canvas);
7364
- if (fill && !ignoreFill)
7365
- this.__.__isAlphaPixelFill ? Paint.fills(fill, this, canvas) : Paint.fill('#000000', this, canvas);
7366
- if (this.__.__isCanvas)
7367
- this.__drawAfterFill(canvas, options);
7368
- if (stroke && !ignoreStroke)
7369
- this.__.__isAlphaPixelStroke ? Paint.strokes(stroke, this, canvas) : Paint.stroke('#000000', this, canvas);
7370
- }
7373
+ __drawShape(canvas, options) {
7374
+ this.__drawRenderPath(canvas);
7375
+ const data = this.__, { fill, stroke } = data;
7376
+ if (fill && !options.ignoreFill)
7377
+ data.__isAlphaPixelFill ? Paint.fills(fill, this, canvas) : Paint.fill('#000000', this, canvas);
7378
+ if (data.__isCanvas)
7379
+ this.__drawAfterFill(canvas, options);
7380
+ if (stroke && !options.ignoreStroke)
7381
+ data.__isAlphaPixelStroke ? Paint.strokes(stroke, this, canvas) : Paint.stroke('#000000', this, canvas);
7371
7382
  },
7372
7383
  __drawAfterFill(canvas, options) {
7373
7384
  if (this.__.__clipAfterFill) {
@@ -7492,12 +7503,14 @@ let UI = UI_1 = class UI extends Leaf {
7492
7503
  }
7493
7504
  }
7494
7505
  __updateRenderPath() {
7495
- if (this.__.path) {
7496
- const data = this.__;
7506
+ const data = this.__;
7507
+ if (data.path) {
7497
7508
  data.__pathForRender = data.cornerRadius ? PathCorner.smooth(data.path, data.cornerRadius, data.cornerSmoothing) : data.path;
7498
7509
  if (data.__useArrow)
7499
7510
  PathArrow.addArrows(this, !data.cornerRadius);
7500
7511
  }
7512
+ else
7513
+ data.__pathForRender && (data.__pathForRender = undefined);
7501
7514
  }
7502
7515
  __drawRenderPath(canvas) {
7503
7516
  canvas.beginPath();
@@ -7708,13 +7721,13 @@ __decorate([
7708
7721
  surfaceType()
7709
7722
  ], UI.prototype, "fill", void 0);
7710
7723
  __decorate([
7711
- strokeType()
7724
+ strokeType(undefined, true)
7712
7725
  ], UI.prototype, "stroke", void 0);
7713
7726
  __decorate([
7714
7727
  strokeType('inside')
7715
7728
  ], UI.prototype, "strokeAlign", void 0);
7716
7729
  __decorate([
7717
- strokeType(1)
7730
+ strokeType(1, true)
7718
7731
  ], UI.prototype, "strokeWidth", void 0);
7719
7732
  __decorate([
7720
7733
  strokeType(false)
@@ -8141,7 +8154,7 @@ let Leafer = Leafer_1 = class Leafer extends Group {
8141
8154
  list.push(item);
8142
8155
  this.requestRender();
8143
8156
  }
8144
- zoom(_zoomType, _padding, _fixedScale, _transition) {
8157
+ zoom(_zoomType, _optionsOrPadding, _scroll, _transition) {
8145
8158
  return Plugin.need('view');
8146
8159
  }
8147
8160
  getValidMove(moveX, moveY) { return { x: moveX, y: moveY }; }
@@ -8186,7 +8199,7 @@ let Leafer = Leafer_1 = class Leafer extends Group {
8186
8199
  Leafer_1.list.remove(this);
8187
8200
  try {
8188
8201
  this.stop();
8189
- this.emitEvent(new LeaferEvent(LeaferEvent.END, this));
8202
+ this.emitLeafer(LeaferEvent.END);
8190
8203
  this.__removeListenEvents();
8191
8204
  this.__controllers.forEach(item => !(this.parent && item === this.interaction) && item.destroy());
8192
8205
  this.__controllers.length = 0;
@@ -8314,7 +8327,7 @@ let Box = class Box extends Group {
8314
8327
  }
8315
8328
  __drawContent(canvas, options) {
8316
8329
  this.__renderGroup(canvas, options);
8317
- if (this.__.__hasStroke) {
8330
+ if (this.__.__useStroke) {
8318
8331
  canvas.setWorld(this.__nowWorld);
8319
8332
  this.__drawRenderPath(canvas);
8320
8333
  }
@@ -8534,8 +8547,8 @@ let Polygon = class Polygon extends UI {
8534
8547
  for (let i = 1; i < sides; i++) {
8535
8548
  lineTo$1(path, rx + rx * sin$1((i * 2 * PI$1) / sides), ry - ry * cos$1((i * 2 * PI$1) / sides));
8536
8549
  }
8550
+ closePath$1(path);
8537
8551
  }
8538
- closePath$1(path);
8539
8552
  }
8540
8553
  __updateRenderPath() { }
8541
8554
  __updateBoxBounds() { }
@@ -8773,6 +8786,11 @@ let Text = class Text extends UI {
8773
8786
  return;
8774
8787
  super.__draw(canvas, options, originCanvas);
8775
8788
  }
8789
+ __drawShape(canvas, options) {
8790
+ if (options.shape)
8791
+ this.__box && this.__box.__drawShape(canvas, options);
8792
+ super.__drawShape(canvas, options);
8793
+ }
8776
8794
  destroy() {
8777
8795
  if (this.boxStyle)
8778
8796
  this.boxStyle = null;
@@ -9233,7 +9251,7 @@ const PaintModule = {
9233
9251
  };
9234
9252
 
9235
9253
  let origin = {};
9236
- const { get: get$3, rotateOfOuter: rotateOfOuter$1, translate: translate$1, scaleOfOuter: scaleOfOuter$1, scale: scaleHelper, rotate } = MatrixHelper;
9254
+ const { get: get$3, rotateOfOuter: rotateOfOuter$1, translate: translate$1, scaleOfOuter: scaleOfOuter$1, scale: scaleHelper, rotate, skew: skewHelper } = MatrixHelper;
9237
9255
  function fillOrFitMode(data, box, x, y, scaleX, scaleY, rotation) {
9238
9256
  const transform = get$3();
9239
9257
  translate$1(transform, box.x + x, box.y + y);
@@ -9242,13 +9260,15 @@ function fillOrFitMode(data, box, x, y, scaleX, scaleY, rotation) {
9242
9260
  rotateOfOuter$1(transform, { x: box.x + box.width / 2, y: box.y + box.height / 2 }, rotation);
9243
9261
  data.transform = transform;
9244
9262
  }
9245
- function clipMode(data, box, x, y, scaleX, scaleY, rotation) {
9263
+ function clipMode(data, box, x, y, scaleX, scaleY, rotation, skew) {
9246
9264
  const transform = get$3();
9247
- translate$1(transform, box.x + x, box.y + y);
9248
- if (scaleX)
9249
- scaleHelper(transform, scaleX, scaleY);
9250
9265
  if (rotation)
9251
9266
  rotate(transform, rotation);
9267
+ if (skew)
9268
+ skewHelper(transform, skew.x, skew.y);
9269
+ if (scaleX)
9270
+ scaleHelper(transform, scaleX, scaleY);
9271
+ translate$1(transform, box.x + x, box.y + y);
9252
9272
  data.transform = transform;
9253
9273
  }
9254
9274
  function repeatMode(data, box, width, height, x, y, scaleX, scaleY, rotation, align) {
@@ -9285,11 +9305,13 @@ const tempBox = new Bounds();
9285
9305
  const tempScaleData = {};
9286
9306
  const tempImage = {};
9287
9307
  function createData(leafPaint, image, paint, box) {
9288
- const { changeful, sync } = paint;
9308
+ const { changeful, sync, editing } = paint;
9289
9309
  if (changeful)
9290
9310
  leafPaint.changeful = changeful;
9291
9311
  if (sync)
9292
9312
  leafPaint.sync = sync;
9313
+ if (editing)
9314
+ leafPaint.editing = editing;
9293
9315
  leafPaint.data = getPatternData(paint, box, image);
9294
9316
  }
9295
9317
  function getPatternData(paint, box, image) {
@@ -9298,7 +9320,7 @@ function getPatternData(paint, box, image) {
9298
9320
  if (paint.mode === 'strench')
9299
9321
  paint.mode = 'stretch';
9300
9322
  let { width, height } = image;
9301
- const { opacity, mode, align, offset, scale, size, rotation, repeat, filters } = paint;
9323
+ const { opacity, mode, align, offset, scale, size, rotation, skew, repeat, filters } = paint;
9302
9324
  const sameBox = box.width === width && box.height === height;
9303
9325
  const data = { mode };
9304
9326
  const swapSize = align !== 'center' && (rotation || 0) % 180 === 90;
@@ -9332,8 +9354,8 @@ function getPatternData(paint, box, image) {
9332
9354
  break;
9333
9355
  case 'normal':
9334
9356
  case 'clip':
9335
- if (tempImage.x || tempImage.y || scaleX || rotation)
9336
- clipMode(data, box, tempImage.x, tempImage.y, scaleX, scaleY, rotation);
9357
+ if (tempImage.x || tempImage.y || scaleX || rotation || skew)
9358
+ clipMode(data, box, tempImage.x, tempImage.y, scaleX, scaleY, rotation, skew);
9337
9359
  break;
9338
9360
  case 'repeat':
9339
9361
  if (!sameBox || scaleX || rotation)
@@ -9410,11 +9432,11 @@ function image(ui, attrName, paint, boxBounds, firstUse) {
9410
9432
  }
9411
9433
  onLoadSuccess(ui, event);
9412
9434
  }
9413
- leafPaint.loadId = null;
9435
+ leafPaint.loadId = undefined;
9414
9436
  }, (error) => {
9415
9437
  ignoreRender(ui, false);
9416
9438
  onLoadError(ui, event, error);
9417
- leafPaint.loadId = null;
9439
+ leafPaint.loadId = undefined;
9418
9440
  });
9419
9441
  if (ui.placeholderColor) {
9420
9442
  if (!ui.placeholderDelay)
@@ -9480,6 +9502,8 @@ function createPattern(ui, paint, pixelRatio) {
9480
9502
  const { image, data } = paint;
9481
9503
  let imageScale, imageMatrix, { width, height, scaleX: sx, scaleY: sy, transform, repeat } = data;
9482
9504
  if (sx) {
9505
+ sx = abs$1(sx);
9506
+ sy = abs$1(sy);
9483
9507
  imageMatrix = get$1();
9484
9508
  copy$1(imageMatrix, transform);
9485
9509
  scale(imageMatrix, 1 / sx, 1 / sy);