@leafer-draw/miniapp 1.0.8 → 1.0.10

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.
@@ -1411,14 +1411,13 @@ const UICreator = {
1411
1411
  list: {},
1412
1412
  register(UI) {
1413
1413
  const { __tag: tag } = UI.prototype;
1414
- if (list$1[tag]) {
1414
+ if (list$1[tag])
1415
1415
  debug$c.repeat(tag);
1416
- }
1417
- else {
1418
- list$1[tag] = UI;
1419
- }
1416
+ list$1[tag] = UI;
1420
1417
  },
1421
1418
  get(tag, data, x, y, width, height) {
1419
+ if (!list$1[tag])
1420
+ debug$c.error('not register ' + tag);
1422
1421
  const ui = new list$1[tag](data);
1423
1422
  if (x !== undefined) {
1424
1423
  ui.x = x;
@@ -1442,7 +1441,7 @@ const EventCreator = {
1442
1441
  Object.keys(Event).forEach(key => {
1443
1442
  name = Event[key];
1444
1443
  if (typeof name === 'string')
1445
- nameList[name] ? debug$b.repeat(name) : nameList[name] = Event;
1444
+ nameList[name] && debug$b.repeat(name), nameList[name] = Event;
1446
1445
  });
1447
1446
  },
1448
1447
  changeName(oldName, newName) {
@@ -1644,7 +1643,7 @@ class LeafData {
1644
1643
  const t = this;
1645
1644
  if (t.blendMode === 'pass-through') {
1646
1645
  const leaf = this.__leaf;
1647
- if ((t.opacity < 1 && leaf.isBranch) || leaf.__hasEraser || t.eraser) {
1646
+ if ((t.opacity < 1 && (leaf.isBranch || t.__hasMultiPaint)) || leaf.__hasEraser || t.eraser) {
1648
1647
  t.__single = true;
1649
1648
  }
1650
1649
  else if (t.__single) {
@@ -2042,8 +2041,9 @@ class LeaferCanvasBase extends Canvas$1 {
2042
2041
  takeCanvas = this.getSameCanvas();
2043
2042
  takeCanvas.copyWorld(this);
2044
2043
  }
2045
- DataHelper.copyAttrs(this.size, size, canvasSizeAttrs);
2046
- this.size.pixelRatio || (this.size.pixelRatio = 1);
2044
+ const s = this.size;
2045
+ DataHelper.copyAttrs(s, size, canvasSizeAttrs);
2046
+ canvasSizeAttrs.forEach(key => s[key] || (s[key] = 1));
2047
2047
  this.bounds = new Bounds(0, 0, this.width, this.height);
2048
2048
  if (this.context && !this.unreal) {
2049
2049
  this.updateViewSize();
@@ -2157,6 +2157,17 @@ class LeaferCanvasBase extends Canvas$1 {
2157
2157
  if (!onlyResetTransform)
2158
2158
  this.useWorldTransform();
2159
2159
  }
2160
+ useGrayscaleAlpha(bounds) {
2161
+ this.setTempBounds(bounds, true, true);
2162
+ let alpha, pixel;
2163
+ const { context } = this, imageData = context.getImageData(tempBounds$1.x, tempBounds$1.y, tempBounds$1.width, tempBounds$1.height), { data } = imageData;
2164
+ for (let i = 0, len = data.length; i < len; i += 4) {
2165
+ pixel = data[i] * 0.299 + data[i + 1] * 0.587 + data[i + 2] * 0.114;
2166
+ if (alpha = data[i + 3])
2167
+ data[i + 3] = alpha === 255 ? pixel : alpha * (pixel / 255);
2168
+ }
2169
+ context.putImageData(imageData, tempBounds$1.x, tempBounds$1.y);
2170
+ }
2160
2171
  useMask(maskCanvas, fromBounds, toBounds) {
2161
2172
  this.copyWorld(maskCanvas, fromBounds, toBounds, 'destination-in');
2162
2173
  }
@@ -2167,7 +2178,7 @@ class LeaferCanvasBase extends Canvas$1 {
2167
2178
  if (blendMode)
2168
2179
  this.blendMode = blendMode;
2169
2180
  this.fillStyle = color;
2170
- tempBounds$1.set(bounds).scale(this.pixelRatio);
2181
+ this.setTempBounds(bounds);
2171
2182
  this.fillRect(tempBounds$1.x, tempBounds$1.y, tempBounds$1.width, tempBounds$1.height);
2172
2183
  if (blendMode)
2173
2184
  this.blendMode = 'source-over';
@@ -2176,22 +2187,18 @@ class LeaferCanvasBase extends Canvas$1 {
2176
2187
  if (blendMode)
2177
2188
  this.blendMode = blendMode;
2178
2189
  this.strokeStyle = color;
2179
- tempBounds$1.set(bounds).scale(this.pixelRatio);
2190
+ this.setTempBounds(bounds);
2180
2191
  this.strokeRect(tempBounds$1.x, tempBounds$1.y, tempBounds$1.width, tempBounds$1.height);
2181
2192
  if (blendMode)
2182
2193
  this.blendMode = 'source-over';
2183
2194
  }
2184
2195
  clearWorld(bounds, ceilPixel) {
2185
- tempBounds$1.set(bounds).scale(this.pixelRatio);
2186
- if (ceilPixel)
2187
- tempBounds$1.ceil();
2196
+ this.setTempBounds(bounds, ceilPixel);
2188
2197
  this.clearRect(tempBounds$1.x, tempBounds$1.y, tempBounds$1.width, tempBounds$1.height);
2189
2198
  }
2190
2199
  clipWorld(bounds, ceilPixel) {
2191
2200
  this.beginPath();
2192
- tempBounds$1.set(bounds).scale(this.pixelRatio);
2193
- if (ceilPixel)
2194
- tempBounds$1.ceil();
2201
+ this.setTempBounds(bounds, ceilPixel);
2195
2202
  this.rect(tempBounds$1.x, tempBounds$1.y, tempBounds$1.width, tempBounds$1.height);
2196
2203
  this.clip();
2197
2204
  }
@@ -2199,6 +2206,14 @@ class LeaferCanvasBase extends Canvas$1 {
2199
2206
  const { pixelRatio } = this;
2200
2207
  this.clearRect(0, 0, this.width * pixelRatio + 2, this.height * pixelRatio + 2);
2201
2208
  }
2209
+ setTempBounds(bounds, ceil, intersect) {
2210
+ tempBounds$1.set(bounds);
2211
+ if (intersect)
2212
+ tempBounds$1.intersect(this.bounds);
2213
+ tempBounds$1.scale(this.pixelRatio);
2214
+ if (ceil)
2215
+ tempBounds$1.ceil();
2216
+ }
2202
2217
  isSameSize(size) {
2203
2218
  return this.width === size.width && this.height === size.height && this.pixelRatio === size.pixelRatio;
2204
2219
  }
@@ -5212,13 +5227,14 @@ const BranchRender = {
5212
5227
  this.__.__checkSingle();
5213
5228
  },
5214
5229
  __render(canvas, options) {
5230
+ this.__nowWorld = this.__getNowWorld(options);
5215
5231
  if (this.__worldOpacity) {
5216
5232
  if (this.__.__single) {
5217
5233
  if (this.__.eraser === 'path')
5218
5234
  return this.__renderEraser(canvas, options);
5219
5235
  const tempCanvas = canvas.getSameCanvas(false, true);
5220
5236
  this.__renderBranch(tempCanvas, options);
5221
- const nowWorld = this.__getNowWorld(options);
5237
+ const nowWorld = this.__nowWorld;
5222
5238
  canvas.opacity = this.__.opacity;
5223
5239
  canvas.copyWorldByReset(tempCanvas, nowWorld, nowWorld, this.__.__blendMode, true);
5224
5240
  tempCanvas.recycle(nowWorld);
@@ -5959,7 +5975,7 @@ class LeafLevelList {
5959
5975
  }
5960
5976
  }
5961
5977
 
5962
- const version = "1.0.8";
5978
+ const version = "1.0.10";
5963
5979
 
5964
5980
  class LeaferCanvas extends LeaferCanvasBase {
5965
5981
  get allowBackgroundColor() { return false; }
@@ -6072,7 +6088,7 @@ function useCanvas(_canvasType, app) {
6072
6088
  Platform.origin = {
6073
6089
  createCanvas: (width, height, _format) => {
6074
6090
  const data = { type: '2d', width, height };
6075
- app.createOffscreenCanvas ? app.createOffscreenCanvas(data) : app.createOffScreenCanvas(data);
6091
+ return app.createOffscreenCanvas ? app.createOffscreenCanvas(data) : app.createOffScreenCanvas(data);
6076
6092
  },
6077
6093
  canvasToDataURL: (canvas, type, quality) => canvas.toDataURL(mineType(type), quality),
6078
6094
  canvasToBolb: (canvas, type, quality) => canvas.toBuffer(type, { quality }),
@@ -6183,7 +6199,7 @@ function useCanvas(_canvasType, app) {
6183
6199
  }
6184
6200
  Platform.name = 'miniapp';
6185
6201
  Platform.requestRender = function (render) {
6186
- const { view } = (Platform.renderCanvas || Platform.canvas);
6202
+ const { view } = Platform.renderCanvas || Platform.canvas;
6187
6203
  view.requestAnimationFrame ? view.requestAnimationFrame(render) : setTimeout(render, 16);
6188
6204
  };
6189
6205
  defineKey(Platform, 'devicePixelRatio', { get() { return Math.max(1, wx.getSystemInfoSync().pixelRatio); } });
@@ -6568,7 +6584,8 @@ class Renderer {
6568
6584
  this.totalBounds = new Bounds();
6569
6585
  debug$3.log(target.innerName, '--->');
6570
6586
  try {
6571
- target.app.emit(RenderEvent.CHILD_START, target);
6587
+ if (!target.isApp)
6588
+ target.app.emit(RenderEvent.CHILD_START, target);
6572
6589
  this.emitRender(RenderEvent.START);
6573
6590
  this.renderOnce(callback);
6574
6591
  this.emitRender(RenderEvent.END, this.totalBounds);
@@ -6849,6 +6866,12 @@ class UIData extends LeafData {
6849
6866
  return strokeWidth;
6850
6867
  }
6851
6868
  get __hasStroke() { return this.stroke && this.strokeWidth; }
6869
+ get __hasMultiPaint() {
6870
+ const t = this;
6871
+ if ((t.__isFills && t.fill.length > 1) || (t.__isStrokes && t.stroke.length > 1) || t.__useEffect)
6872
+ return true;
6873
+ return t.fill && this.__hasStroke;
6874
+ }
6852
6875
  get __clipAfterFill() { return (this.cornerRadius || this.__pathInputed); }
6853
6876
  get __autoWidth() { return !this._width; }
6854
6877
  get __autoHeight() { return !this._height; }
@@ -7218,9 +7241,8 @@ const RectRender = {
7218
7241
  canvas.strokeRect(half, half, width, height);
7219
7242
  canvas.restore();
7220
7243
  }
7221
- else {
7244
+ else
7222
7245
  canvas.strokeRect(half, half, width, height);
7223
- }
7224
7246
  break;
7225
7247
  case 'outside':
7226
7248
  canvas.strokeRect(-half, -half, width + __strokeWidth, height + __strokeWidth);
@@ -7445,6 +7467,15 @@ __decorate([
7445
7467
  __decorate([
7446
7468
  boundsType(0)
7447
7469
  ], UI.prototype, "padding", void 0);
7470
+ __decorate([
7471
+ boundsType(false)
7472
+ ], UI.prototype, "lockRatio", void 0);
7473
+ __decorate([
7474
+ boundsType()
7475
+ ], UI.prototype, "widthRange", void 0);
7476
+ __decorate([
7477
+ boundsType()
7478
+ ], UI.prototype, "heightRange", void 0);
7448
7479
  __decorate([
7449
7480
  dataType(false)
7450
7481
  ], UI.prototype, "draggable", void 0);
@@ -7736,8 +7767,6 @@ let Leafer = Leafer_1 = class Leafer extends Group {
7736
7767
  __onResize(event) {
7737
7768
  this.emitEvent(event);
7738
7769
  DataHelper.copyAttrs(this.__, event, canvasSizeAttrs);
7739
- if (!event.width || !event.height)
7740
- debug$1.warn('w = 0 or h = 0');
7741
7770
  setTimeout(() => { if (this.canvasManager)
7742
7771
  this.canvasManager.clearRecycled(); }, 0);
7743
7772
  }
@@ -8062,9 +8091,6 @@ __decorate([
8062
8091
  __decorate([
8063
8092
  dataType(false)
8064
8093
  ], Box.prototype, "resizeChildren", void 0);
8065
- __decorate([
8066
- dataType(false)
8067
- ], Box.prototype, "textBox", void 0);
8068
8094
  __decorate([
8069
8095
  affectRenderBoundsType('show')
8070
8096
  ], Box.prototype, "overflow", void 0);
@@ -8475,7 +8501,6 @@ let Text = class Text extends UI {
8475
8501
  this.__updateTextDrawData();
8476
8502
  const { bounds } = data.__textDrawData;
8477
8503
  const b = layout.boxBounds;
8478
- console.log(bounds, autoWidth, autoHeight);
8479
8504
  if (data.__lineHeight < fontSize)
8480
8505
  spread(bounds, fontSize / 2);
8481
8506
  if (autoWidth || autoHeight) {
@@ -9527,16 +9552,16 @@ const EffectModule = {
9527
9552
 
9528
9553
  const { excludeRenderBounds } = LeafBoundsHelper;
9529
9554
  Group.prototype.__renderMask = function (canvas, options) {
9530
- let child, maskCanvas, contentCanvas, maskOpacity, currentMask;
9555
+ let child, maskCanvas, contentCanvas, maskOpacity, currentMask, mask;
9531
9556
  const { children } = this;
9532
9557
  for (let i = 0, len = children.length; i < len; i++) {
9533
- child = children[i];
9534
- if (child.__.mask) {
9558
+ child = children[i], mask = child.__.mask;
9559
+ if (mask) {
9535
9560
  if (currentMask) {
9536
9561
  maskEnd(this, currentMask, canvas, contentCanvas, maskCanvas, maskOpacity);
9537
9562
  maskCanvas = contentCanvas = null;
9538
9563
  }
9539
- if (child.__.mask === 'path') {
9564
+ if (mask === 'path' || mask === 'clipping-path') {
9540
9565
  if (child.opacity < 1) {
9541
9566
  currentMask = 'opacity-path';
9542
9567
  maskOpacity = child.opacity;
@@ -9550,14 +9575,14 @@ Group.prototype.__renderMask = function (canvas, options) {
9550
9575
  child.__clip(contentCanvas || canvas, options);
9551
9576
  }
9552
9577
  else {
9553
- currentMask = 'alpha';
9578
+ currentMask = mask === 'grayscale' ? 'grayscale' : 'alpha';
9554
9579
  if (!maskCanvas)
9555
9580
  maskCanvas = getCanvas(canvas);
9556
9581
  if (!contentCanvas)
9557
9582
  contentCanvas = getCanvas(canvas);
9558
9583
  child.__render(maskCanvas, options);
9559
9584
  }
9560
- if (child.__.mask !== 'clipping')
9585
+ if (!(mask === 'clipping' || mask === 'clipping-path'))
9561
9586
  continue;
9562
9587
  }
9563
9588
  if (excludeRenderBounds(child, options))
@@ -9568,6 +9593,8 @@ Group.prototype.__renderMask = function (canvas, options) {
9568
9593
  };
9569
9594
  function maskEnd(leaf, maskMode, canvas, contentCanvas, maskCanvas, maskOpacity) {
9570
9595
  switch (maskMode) {
9596
+ case 'grayscale':
9597
+ maskCanvas.useGrayscaleAlpha(leaf.__nowWorld);
9571
9598
  case 'alpha':
9572
9599
  usePixelMask(leaf, canvas, contentCanvas, maskCanvas);
9573
9600
  break;
@@ -10272,15 +10299,12 @@ const canvas = LeaferCanvasBase.prototype;
10272
10299
  const debug = Debug.get('@leafer-ui/export');
10273
10300
  canvas.export = function (filename, options) {
10274
10301
  const { quality, blob } = FileHelper.getExportOptions(options);
10275
- if (filename.includes('.')) {
10302
+ if (filename.includes('.'))
10276
10303
  return this.saveAs(filename, quality);
10277
- }
10278
- else if (blob) {
10304
+ else if (blob)
10279
10305
  return this.toBlob(filename, quality);
10280
- }
10281
- else {
10306
+ else
10282
10307
  return this.toDataURL(filename, quality);
10283
- }
10284
10308
  };
10285
10309
  canvas.toBlob = function (type, quality) {
10286
10310
  return new Promise((resolve) => {