@leafer-draw/worker 2.0.0 → 2.0.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/dist/worker.js CHANGED
@@ -7,6 +7,42 @@ var LeaferUI = function(exports) {
7
7
  PathNodeHandleType[PathNodeHandleType["mirrorAngle"] = 3] = "mirrorAngle";
8
8
  PathNodeHandleType[PathNodeHandleType["mirror"] = 4] = "mirror";
9
9
  })(exports.PathNodeHandleType || (exports.PathNodeHandleType = {}));
10
+ function __decorate(decorators, target, key, desc) {
11
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
12
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
13
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
14
+ }
15
+ function __awaiter(thisArg, _arguments, P, generator) {
16
+ function adopt(value) {
17
+ return value instanceof P ? value : new P(function(resolve) {
18
+ resolve(value);
19
+ });
20
+ }
21
+ return new (P || (P = Promise))(function(resolve, reject) {
22
+ function fulfilled(value) {
23
+ try {
24
+ step(generator.next(value));
25
+ } catch (e) {
26
+ reject(e);
27
+ }
28
+ }
29
+ function rejected(value) {
30
+ try {
31
+ step(generator["throw"](value));
32
+ } catch (e) {
33
+ reject(e);
34
+ }
35
+ }
36
+ function step(result) {
37
+ result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);
38
+ }
39
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
40
+ });
41
+ }
42
+ typeof SuppressedError === "function" ? SuppressedError : function(error, suppressed, message) {
43
+ var e = new Error(message);
44
+ return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
45
+ };
10
46
  exports.Answer = void 0;
11
47
  (function(Answer) {
12
48
  Answer[Answer["No"] = 0] = "No";
@@ -1650,7 +1686,7 @@ var LeaferUI = function(exports) {
1650
1686
  resize(view, width, height, xGap, yGap, clip, smooth, opacity, _filters, interlace) {
1651
1687
  const realWidth = max$2(floor(width + (xGap || 0)), 1), realHeight = max$2(floor(height + (yGap || 0)), 1);
1652
1688
  let interlaceX, interlaceY, interlaceOffset;
1653
- if (interlace && (interlaceOffset = UnitConvertHelper.number(interlace.offset, (interlaceX = interlace.type === "x") ? width : height))) interlaceX || (interlaceY = true);
1689
+ if (interlace && (interlaceOffset = UnitConvertHelper.number(interlace.offset, interlace.type === "x" ? width : height))) interlace.type === "x" ? interlaceX = true : interlaceY = true;
1654
1690
  const canvas = Platform.origin.createCanvas(interlaceY ? realWidth * 2 : realWidth, interlaceX ? realHeight * 2 : realHeight);
1655
1691
  const ctx = canvas.getContext("2d");
1656
1692
  if (opacity) ctx.globalAlpha = opacity;
@@ -1803,7 +1839,10 @@ var LeaferUI = function(exports) {
1803
1839
  list$1[tag] = UI;
1804
1840
  },
1805
1841
  get(tag, data, x, y, width, height) {
1806
- if (!list$1[tag]) debug$d.error("not register " + tag);
1842
+ if (!list$1[tag]) {
1843
+ debug$d.warn("not register " + tag);
1844
+ return undefined;
1845
+ }
1807
1846
  const ui = new list$1[tag](data);
1808
1847
  if (!isUndefined(x)) {
1809
1848
  ui.x = x;
@@ -1888,42 +1927,6 @@ var LeaferUI = function(exports) {
1888
1927
  this.clear();
1889
1928
  }
1890
1929
  }
1891
- function __decorate(decorators, target, key, desc) {
1892
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
1893
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
1894
- return c > 3 && r && Object.defineProperty(target, key, r), r;
1895
- }
1896
- function __awaiter(thisArg, _arguments, P, generator) {
1897
- function adopt(value) {
1898
- return value instanceof P ? value : new P(function(resolve) {
1899
- resolve(value);
1900
- });
1901
- }
1902
- return new (P || (P = Promise))(function(resolve, reject) {
1903
- function fulfilled(value) {
1904
- try {
1905
- step(generator.next(value));
1906
- } catch (e) {
1907
- reject(e);
1908
- }
1909
- }
1910
- function rejected(value) {
1911
- try {
1912
- step(generator["throw"](value));
1913
- } catch (e) {
1914
- reject(e);
1915
- }
1916
- }
1917
- function step(result) {
1918
- result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);
1919
- }
1920
- step((generator = generator.apply(thisArg, _arguments || [])).next());
1921
- });
1922
- }
1923
- typeof SuppressedError === "function" ? SuppressedError : function(error, suppressed, message) {
1924
- var e = new Error(message);
1925
- return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
1926
- };
1927
1930
  function contextAttr(realName) {
1928
1931
  return (target, key) => {
1929
1932
  if (!realName) realName = key;
@@ -3114,10 +3117,10 @@ var LeaferUI = function(exports) {
3114
3117
  data.push(O$2, x, y, radius, startAngle, endAngle, anticlockwise ? 1 : 0);
3115
3118
  }
3116
3119
  },
3117
- arcTo(data, x1, y1, x2, y2, radius, lastX, lastY) {
3120
+ arcTo(data, x1, y1, x2, y2, radius, lastX, lastY, fullRadius) {
3118
3121
  if (!isUndefined(lastX)) {
3119
- const d = getMinDistanceFrom(lastX, lastY, x1, y1, x2, y2);
3120
- radius = min(radius, min(d / 2, d / 2 * abs$2(tan(getRadianFrom(lastX, lastY, x1, y1, x2, y2) / 2))));
3122
+ const r = getMinDistanceFrom(lastX, lastY, x1, y1, x2, y2) / (fullRadius ? 1 : 2);
3123
+ radius = min(radius, min(r, r * abs$2(tan(getRadianFrom(lastX, lastY, x1, y1, x2, y2) / 2))));
3121
3124
  }
3122
3125
  data.push(U$2, x1, y1, x2, y2, radius);
3123
3126
  },
@@ -3442,7 +3445,7 @@ var LeaferUI = function(exports) {
3442
3445
  let command, lastCommand, commandLen;
3443
3446
  let i = 0, x = 0, y = 0, startX = 0, startY = 0, secondX = 0, secondY = 0, lastX = 0, lastY = 0;
3444
3447
  if (isArray(cornerRadius)) cornerRadius = cornerRadius[0] || 0;
3445
- const len = data.length;
3448
+ const len = data.length, three = len === 9;
3446
3449
  const smooth = [];
3447
3450
  while (i < len) {
3448
3451
  command = data[i];
@@ -3454,7 +3457,7 @@ var LeaferUI = function(exports) {
3454
3457
  if (data[i] === L$1) {
3455
3458
  secondX = data[i + 1];
3456
3459
  secondY = data[i + 2];
3457
- smooth.push(M, getCenterX(startX, secondX), getCenterY(startY, secondY));
3460
+ three ? smooth.push(M, startX, startY) : smooth.push(M, getCenterX(startX, secondX), getCenterY(startY, secondY));
3458
3461
  } else {
3459
3462
  smooth.push(M, startX, startY);
3460
3463
  }
@@ -3466,11 +3469,11 @@ var LeaferUI = function(exports) {
3466
3469
  i += 3;
3467
3470
  switch (data[i]) {
3468
3471
  case L$1:
3469
- arcTo(smooth, x, y, data[i + 1], data[i + 2], cornerRadius, lastX, lastY);
3472
+ arcTo(smooth, x, y, data[i + 1], data[i + 2], cornerRadius, lastX, lastY, three);
3470
3473
  break;
3471
3474
 
3472
3475
  case Z:
3473
- arcTo(smooth, x, y, startX, startY, cornerRadius, lastX, lastY);
3476
+ arcTo(smooth, x, y, startX, startY, cornerRadius, lastX, lastY, three);
3474
3477
  break;
3475
3478
 
3476
3479
  default:
@@ -3482,7 +3485,7 @@ var LeaferUI = function(exports) {
3482
3485
 
3483
3486
  case Z:
3484
3487
  if (lastCommand !== Z) {
3485
- arcTo(smooth, startX, startY, secondX, secondY, cornerRadius, lastX, lastY);
3488
+ arcTo(smooth, startX, startY, secondX, secondY, cornerRadius, lastX, lastY, three);
3486
3489
  smooth.push(Z);
3487
3490
  }
3488
3491
  i += 1;
@@ -3523,10 +3526,10 @@ var LeaferUI = function(exports) {
3523
3526
  const FileHelper = {
3524
3527
  alphaPixelTypes: [ "png", "webp", "svg" ],
3525
3528
  upperCaseTypeMap: {},
3526
- mineType(type) {
3527
- if (!type || type.startsWith("image")) return type;
3529
+ mimeType(type, base = "image") {
3530
+ if (!type || type.startsWith(base)) return type;
3528
3531
  if (type === "jpg") type = "jpeg";
3529
- return "image/" + type;
3532
+ return base + "/" + type;
3530
3533
  },
3531
3534
  fileType(filename) {
3532
3535
  const l = filename.split(".");
@@ -3557,6 +3560,7 @@ var LeaferUI = function(exports) {
3557
3560
  }
3558
3561
  };
3559
3562
  const F = FileHelper;
3563
+ F.mineType = F.mimeType;
3560
3564
  F.alphaPixelTypes.forEach(type => F.upperCaseTypeMap[type] = type.toUpperCase());
3561
3565
  const debug$8 = Debug.get("TaskProcessor");
3562
3566
  class TaskItem {
@@ -3796,6 +3800,9 @@ var LeaferUI = function(exports) {
3796
3800
  const debug$7 = Debug.get("Resource");
3797
3801
  const Resource = {
3798
3802
  tasker: new TaskProcessor,
3803
+ queue: new TaskProcessor({
3804
+ parallel: 1
3805
+ }),
3799
3806
  map: {},
3800
3807
  get isComplete() {
3801
3808
  return R.tasker.isComplete;
@@ -3832,6 +3839,12 @@ var LeaferUI = function(exports) {
3832
3839
  R.set(key, value);
3833
3840
  return value;
3834
3841
  },
3842
+ loadFilm(_key, _format) {
3843
+ return undefined;
3844
+ },
3845
+ loadVideo(_key, _format) {
3846
+ return undefined;
3847
+ },
3835
3848
  destroy() {
3836
3849
  R.map = {};
3837
3850
  }
@@ -3840,12 +3853,10 @@ var LeaferUI = function(exports) {
3840
3853
  const ImageManager = {
3841
3854
  maxRecycled: 10,
3842
3855
  recycledList: [],
3843
- patternTasker: new TaskProcessor({
3844
- parallel: 1
3845
- }),
3846
- get(config) {
3856
+ patternTasker: Resource.queue,
3857
+ get(config, type) {
3847
3858
  let image = Resource.get(config.url);
3848
- if (!image) Resource.set(config.url, image = Creator.image(config));
3859
+ if (!image) Resource.set(config.url, image = type === "film" ? Creator.film(config) : Creator.image(config));
3849
3860
  image.use++;
3850
3861
  return image;
3851
3862
  },
@@ -3880,7 +3891,7 @@ var LeaferUI = function(exports) {
3880
3891
  if (config.format) return config.format === format;
3881
3892
  const {url: url} = config;
3882
3893
  if (url.startsWith("data:")) {
3883
- if (url.startsWith("data:" + FileHelper.mineType(format))) return true;
3894
+ if (url.startsWith("data:" + FileHelper.mimeType(format))) return true;
3884
3895
  } else {
3885
3896
  if (url.includes("." + format) || url.includes("." + FileHelper.upperCaseTypeMap[format])) return true; else if (format === "png" && !url.includes(".")) return true;
3886
3897
  }
@@ -3893,6 +3904,9 @@ var LeaferUI = function(exports) {
3893
3904
  const I = ImageManager;
3894
3905
  const {IMAGE: IMAGE, create: create$1} = IncrementId;
3895
3906
  class LeaferImage {
3907
+ get tag() {
3908
+ return "Image";
3909
+ }
3896
3910
  get url() {
3897
3911
  return this.config.url;
3898
3912
  }
@@ -3921,7 +3935,7 @@ var LeaferUI = function(exports) {
3921
3935
  if (!this.loading) {
3922
3936
  this.loading = true;
3923
3937
  Resource.tasker.add(() => __awaiter(this, void 0, void 0, function*() {
3924
- return yield Platform.origin.loadImage(this.getLoadUrl(thumbSize), this.crossOrigin, this).then(img => {
3938
+ return yield Platform.origin["load" + this.tag](this.getLoadUrl(thumbSize), this.crossOrigin, this).then(img => {
3925
3939
  if (thumbSize) this.setThumbView(img);
3926
3940
  this.setView(img);
3927
3941
  }).catch(e => {
@@ -3995,6 +4009,9 @@ var LeaferUI = function(exports) {
3995
4009
  Platform.image.setPatternTransform(pattern, transform, paint);
3996
4010
  return pattern;
3997
4011
  }
4012
+ render(canvas, x, y, width, height, _leaf, _paint, _imageScaleX, _imageScaleY) {
4013
+ canvas.drawImage(this.view, x, y, width, height);
4014
+ }
3998
4015
  getLoadUrl(_thumbSize) {
3999
4016
  return this.url;
4000
4017
  }
@@ -4020,6 +4037,16 @@ var LeaferUI = function(exports) {
4020
4037
  this.waitComplete.length = 0;
4021
4038
  }
4022
4039
  }
4040
+ class LeaferFilm extends LeaferImage {
4041
+ get tag() {
4042
+ return "Film";
4043
+ }
4044
+ }
4045
+ class LeaferVideo extends LeaferImage {
4046
+ get tag() {
4047
+ return "Video";
4048
+ }
4049
+ }
4023
4050
  function defineKey(target, key, descriptor, noConfigurable) {
4024
4051
  if (!noConfigurable) descriptor.configurable = descriptor.enumerable = true;
4025
4052
  Object.defineProperty(target, key, descriptor);
@@ -5758,9 +5785,11 @@ var LeaferUI = function(exports) {
5758
5785
  if (this.__hasMask) {
5759
5786
  this.__renderMask(canvas, options);
5760
5787
  } else {
5788
+ let child;
5761
5789
  const {children: children} = this;
5762
5790
  for (let i = 0, len = children.length; i < len; i++) {
5763
- excludeRenderBounds$1(children[i], options) || children[i].__render(canvas, options);
5791
+ child = children[i];
5792
+ excludeRenderBounds$1(child, options) || (child.__.complex ? child.__renderComplex(canvas, options) : child.__render(canvas, options));
5764
5793
  }
5765
5794
  }
5766
5795
  },
@@ -6233,6 +6262,7 @@ var LeaferUI = function(exports) {
6233
6262
  __drawHitPath(_canvas) {}
6234
6263
  __updateHitCanvas() {}
6235
6264
  __render(_canvas, _options) {}
6265
+ __renderComplex(_canvas, _options) {}
6236
6266
  __drawFast(_canvas, _options) {}
6237
6267
  __draw(_canvas, _options, _originCanvas) {}
6238
6268
  __clip(_canvas, _options) {}
@@ -6346,6 +6376,7 @@ var LeaferUI = function(exports) {
6346
6376
  this.add(item, index);
6347
6377
  noIndex || index++;
6348
6378
  }); else child = UICreator.get(child.tag, child);
6379
+ if (!child) return;
6349
6380
  }
6350
6381
  if (child.parent) child.parent.remove(child);
6351
6382
  child.parent = this;
@@ -6567,7 +6598,7 @@ var LeaferUI = function(exports) {
6567
6598
  this.levelMap = null;
6568
6599
  }
6569
6600
  }
6570
- const version = "2.0.0";
6601
+ const version = "2.0.2";
6571
6602
  class LeaferCanvas extends LeaferCanvasBase {
6572
6603
  get allowBackgroundColor() {
6573
6604
  return true;
@@ -6589,7 +6620,6 @@ var LeaferUI = function(exports) {
6589
6620
  }
6590
6621
  canvasPatch(OffscreenCanvasRenderingContext2D.prototype);
6591
6622
  canvasPatch(Path2D.prototype);
6592
- const {mineType: mineType} = FileHelper;
6593
6623
  Object.assign(Creator, {
6594
6624
  canvas: (options, manager) => new LeaferCanvas(options, manager),
6595
6625
  image: options => new LeaferImage(options)
@@ -6599,7 +6629,7 @@ var LeaferUI = function(exports) {
6599
6629
  createCanvas: (width, height) => new OffscreenCanvas(width, height),
6600
6630
  canvasToDataURL: (canvas, type, quality) => new Promise((resolve, reject) => {
6601
6631
  canvas.convertToBlob({
6602
- type: mineType(type),
6632
+ type: FileHelper.mimeType(type),
6603
6633
  quality: quality
6604
6634
  }).then(blob => {
6605
6635
  var reader = new FileReader;
@@ -6611,14 +6641,14 @@ var LeaferUI = function(exports) {
6611
6641
  });
6612
6642
  }),
6613
6643
  canvasToBolb: (canvas, type, quality) => canvas.convertToBlob({
6614
- type: mineType(type),
6644
+ type: FileHelper.mimeType(type),
6615
6645
  quality: quality
6616
6646
  }),
6617
6647
  canvasSaveAs: (_canvas, _filename, _quality) => new Promise(resolve => resolve()),
6618
6648
  download(_url, _filename) {
6619
6649
  return undefined;
6620
6650
  },
6621
- loadImage(src) {
6651
+ loadImage(src, _crossOrigin, _leaferImage) {
6622
6652
  return new Promise((resolve, reject) => {
6623
6653
  let req = new XMLHttpRequest;
6624
6654
  req.open("GET", Platform.image.getRealURL(src), true);
@@ -6633,6 +6663,13 @@ var LeaferUI = function(exports) {
6633
6663
  req.onerror = e => reject(e);
6634
6664
  req.send();
6635
6665
  });
6666
+ },
6667
+ loadContent(url_1) {
6668
+ return __awaiter(this, arguments, void 0, function*(url, responseType = "text") {
6669
+ const response = yield fetch(url);
6670
+ if (!response.ok) throw new Error(`${response.status}`);
6671
+ return yield response[responseType]();
6672
+ });
6636
6673
  }
6637
6674
  };
6638
6675
  Platform.canvas = Creator.canvas();
@@ -7111,7 +7148,7 @@ var LeaferUI = function(exports) {
7111
7148
  getCellList() {
7112
7149
  return undefined;
7113
7150
  }
7114
- addBlock(block) {
7151
+ addBlock(block, _leafList) {
7115
7152
  if (!this.updateBlocks) this.updateBlocks = [];
7116
7153
  this.updateBlocks.push(block);
7117
7154
  }
@@ -7159,7 +7196,8 @@ var LeaferUI = function(exports) {
7159
7196
  __onLayoutEnd(event) {
7160
7197
  if (event.data) event.data.map(item => {
7161
7198
  let empty;
7162
- if (item.updatedList) item.updatedList.list.some(leaf => {
7199
+ const {updatedList: updatedList} = item;
7200
+ if (updatedList) updatedList.list.some(leaf => {
7163
7201
  empty = !leaf.__world.width || !leaf.__world.height;
7164
7202
  if (empty) {
7165
7203
  if (!leaf.isLeafer) debug$2.tip(leaf.innerName, ": empty");
@@ -7167,7 +7205,7 @@ var LeaferUI = function(exports) {
7167
7205
  }
7168
7206
  return empty;
7169
7207
  });
7170
- this.addBlock(empty ? this.canvas.bounds : item.updatedBounds);
7208
+ this.addBlock(empty ? this.canvas.bounds : item.updatedBounds, updatedList);
7171
7209
  });
7172
7210
  }
7173
7211
  emitRender(type, bounds, options) {
@@ -7328,16 +7366,16 @@ var LeaferUI = function(exports) {
7328
7366
  return t.fill || t.stroke;
7329
7367
  }
7330
7368
  get __autoWidth() {
7331
- return !this._width;
7369
+ return this._width == null;
7332
7370
  }
7333
7371
  get __autoHeight() {
7334
- return !this._height;
7372
+ return this._height == null;
7335
7373
  }
7336
7374
  get __autoSide() {
7337
- return !this._width || !this._height;
7375
+ return this._width == null || this._height == null;
7338
7376
  }
7339
7377
  get __autoSize() {
7340
- return !this._width && !this._height;
7378
+ return this._width == null && this._height == null;
7341
7379
  }
7342
7380
  setVisible(value) {
7343
7381
  this._visible = value;
@@ -7534,13 +7572,16 @@ var LeaferUI = function(exports) {
7534
7572
  }
7535
7573
  }
7536
7574
  class ImageData extends RectData {
7575
+ get __urlType() {
7576
+ return "image";
7577
+ }
7537
7578
  setUrl(value) {
7538
7579
  this.__setImageFill(value);
7539
7580
  this._url = value;
7540
7581
  }
7541
7582
  __setImageFill(value) {
7542
7583
  this.fill = value ? {
7543
- type: "image",
7584
+ type: this.__urlType,
7544
7585
  mode: "stretch",
7545
7586
  url: value
7546
7587
  } : undefined;
@@ -7956,7 +7997,10 @@ var LeaferUI = function(exports) {
7956
7997
  }
7957
7998
  toJSON(options) {
7958
7999
  const data = super.toJSON(options);
7959
- if (!this.childlessJSON) data.children = this.children.map(child => child.toJSON(options));
8000
+ if (!this.childlessJSON) {
8001
+ const children = data.children = [];
8002
+ this.children.forEach(child => child.skipJSON || children.push(child.toJSON(options)));
8003
+ }
7960
8004
  return data;
7961
8005
  }
7962
8006
  pick(_hitPoint, _options) {
@@ -8098,12 +8142,12 @@ var LeaferUI = function(exports) {
8098
8142
  this.emitLeafer(LeaferEvent.STOP);
8099
8143
  }
8100
8144
  }
8101
- unlockLayout() {
8145
+ unlockLayout(updateLayout = true) {
8102
8146
  this.layouter.start();
8103
- this.updateLayout();
8147
+ if (updateLayout) this.updateLayout();
8104
8148
  }
8105
- lockLayout() {
8106
- this.updateLayout();
8149
+ lockLayout(updateLayout = true) {
8150
+ if (updateLayout) this.updateLayout();
8107
8151
  this.layouter.stop();
8108
8152
  }
8109
8153
  resize(size) {
@@ -9150,11 +9194,14 @@ var LeaferUI = function(exports) {
9150
9194
  function getLeafPaint(attrName, paint, ui) {
9151
9195
  if (!isObject(paint) || paint.visible === false || paint.opacity === 0) return undefined;
9152
9196
  let leafPaint;
9153
- const {boxBounds: boxBounds} = ui.__layout;
9154
- switch (paint.type) {
9197
+ const {boxBounds: boxBounds} = ui.__layout, {type: type} = paint;
9198
+ switch (type) {
9155
9199
  case "image":
9200
+ case "film":
9201
+ case "video":
9156
9202
  if (!paint.url) return undefined;
9157
9203
  leafPaint = PaintImage.image(ui, attrName, paint, boxBounds, !recycleMap || !recycleMap[paint.url]);
9204
+ if (type !== "image") PaintImage[type](leafPaint);
9158
9205
  break;
9159
9206
 
9160
9207
  case "linear":
@@ -9170,7 +9217,7 @@ var LeaferUI = function(exports) {
9170
9217
  break;
9171
9218
 
9172
9219
  case "solid":
9173
- const {type: type, color: color, opacity: opacity} = paint;
9220
+ const {color: color, opacity: opacity} = paint;
9174
9221
  leafPaint = {
9175
9222
  type: type,
9176
9223
  style: ColorConvert.string(color, opacity)
@@ -9210,7 +9257,7 @@ var LeaferUI = function(exports) {
9210
9257
  const {isSame: isSame} = BoundsHelper;
9211
9258
  function image(ui, attrName, paint, boxBounds, firstUse) {
9212
9259
  let leafPaint, event;
9213
- const image = ImageManager.get(paint);
9260
+ const image = ImageManager.get(paint, paint.type);
9214
9261
  if (cache && paint === cache.paint && isSame(boxBounds, cache.boxBounds)) {
9215
9262
  leafPaint = cache.leafPaint;
9216
9263
  } else {
@@ -9270,8 +9317,8 @@ var LeaferUI = function(exports) {
9270
9317
  return leafPaint;
9271
9318
  }
9272
9319
  function checkSizeAndCreateData(ui, attrName, paint, image, leafPaint, boxBounds) {
9273
- if (attrName === "fill" && !ui.__.__naturalWidth) {
9274
- const data = ui.__;
9320
+ const data = ui.__;
9321
+ if (attrName === "fill" && !data.__naturalWidth) {
9275
9322
  data.__naturalWidth = image.width / data.pixelRatio;
9276
9323
  data.__naturalHeight = image.height / data.pixelRatio;
9277
9324
  if (data.__autoSide) {
@@ -9283,7 +9330,12 @@ var LeaferUI = function(exports) {
9283
9330
  return false;
9284
9331
  }
9285
9332
  }
9286
- if (!leafPaint.data) PaintImage.createData(leafPaint, image, paint, boxBounds);
9333
+ if (!leafPaint.data) {
9334
+ PaintImage.createData(leafPaint, image, paint, boxBounds);
9335
+ const {transform: transform} = leafPaint.data, {opacity: opacity, blendMode: blendMode} = paint;
9336
+ const clip = transform && !transform.onlyScale || data.path || data.cornerRadius;
9337
+ if (clip || opacity && opacity < 1 || blendMode) leafPaint.complex = clip ? 2 : true;
9338
+ }
9287
9339
  return true;
9288
9340
  }
9289
9341
  function onLoad(ui, event) {
@@ -9315,7 +9367,7 @@ var LeaferUI = function(exports) {
9315
9367
  if (paint.padding) box = tempBox.set(box).shrink(paint.padding);
9316
9368
  if (paint.mode === "strench") paint.mode = "stretch";
9317
9369
  const {width: width, height: height} = image;
9318
- const {opacity: opacity, mode: mode, align: align, offset: offset, scale: scale, size: size, rotation: rotation, skew: skew, clipSize: clipSize, repeat: repeat, gap: gap, filters: filters, interlace: interlace} = paint;
9370
+ const {mode: mode, align: align, offset: offset, scale: scale, size: size, rotation: rotation, skew: skew, clipSize: clipSize, repeat: repeat, gap: gap, interlace: interlace} = paint;
9319
9371
  const sameBox = box.width === width && box.height === height;
9320
9372
  const data = {
9321
9373
  mode: mode
@@ -9378,8 +9430,6 @@ var LeaferUI = function(exports) {
9378
9430
  data.scaleX = scaleX;
9379
9431
  data.scaleY = scaleY;
9380
9432
  }
9381
- if (opacity && opacity < 1) data.opacity = opacity;
9382
- if (filters) data.filters = filters;
9383
9433
  if (repeat) data.repeat = isString(repeat) ? repeat === "x" ? "repeat-x" : "repeat-y" : "repeat";
9384
9434
  if (interlace) data.interlace = isNumber(interlace) || interlace.type === "percent" ? {
9385
9435
  type: "x",
@@ -9405,7 +9455,7 @@ var LeaferUI = function(exports) {
9405
9455
  const {get: get$2, set: set, rotateOfOuter: rotateOfOuter$1, translate: translate, scaleOfOuter: scaleOfOuter$1, multiplyParent: multiplyParent, scale: scaleHelper, rotate: rotate, skew: skewHelper} = MatrixHelper;
9406
9456
  function stretchMode(data, box, scaleX, scaleY) {
9407
9457
  const transform = get$2(), {x: x, y: y} = box;
9408
- if (x || y) translate(transform, x, y); else transform.onlyScale = true;
9458
+ if (x || y) translate(transform, x, y); else if (scaleX > 0 && scaleY > 0) transform.onlyScale = true;
9409
9459
  scaleHelper(transform, scaleX, scaleY);
9410
9460
  data.transform = transform;
9411
9461
  }
@@ -9486,10 +9536,10 @@ var LeaferUI = function(exports) {
9486
9536
  }
9487
9537
  }
9488
9538
  function createPattern(paint, ui, canvas, renderOptions) {
9489
- let {scaleX: scaleX, scaleY: scaleY} = PaintImage.getImageRenderScaleData(paint, ui, canvas, renderOptions), id = scaleX + "-" + scaleY;
9539
+ let {scaleX: scaleX, scaleY: scaleY} = PaintImage.getImageRenderScaleData(paint, ui, canvas, renderOptions), id = paint.film ? paint.nowIndex : scaleX + "-" + scaleY;
9490
9540
  if (paint.patternId !== id && !ui.destroyed) {
9491
9541
  if (!(Platform.image.isLarge(paint.image, scaleX, scaleY) && !paint.data.repeat)) {
9492
- const {image: image, data: data} = paint, {transform: transform, gap: gap} = data, fixScale = PaintImage.getPatternFixScale(paint, scaleX, scaleY);
9542
+ const {image: image, data: data} = paint, {opacity: opacity, filters: filters} = paint.originPaint, {transform: transform, gap: gap} = data, fixScale = PaintImage.getPatternFixScale(paint, scaleX, scaleY);
9493
9543
  let imageMatrix, xGap, yGap, {width: width, height: height} = image;
9494
9544
  if (fixScale) scaleX *= fixScale, scaleY *= fixScale;
9495
9545
  width *= scaleX;
@@ -9505,7 +9555,7 @@ var LeaferUI = function(exports) {
9505
9555
  if (transform) copy$1(imageMatrix, transform);
9506
9556
  scale(imageMatrix, 1 / scaleX, 1 / scaleY);
9507
9557
  }
9508
- const imageCanvas = image.getCanvas(width, height, data.opacity, data.filters, xGap, yGap, ui.leafer && ui.leafer.config.smooth, data.interlace);
9558
+ const imageCanvas = image.getCanvas(width, height, opacity, filters, xGap, yGap, ui.leafer && ui.leafer.config.smooth, data.interlace);
9509
9559
  const pattern = image.getPattern(imageCanvas, data.repeat || (Platform.origin.noRepeat || "no-repeat"), imageMatrix, paint);
9510
9560
  paint.style = pattern;
9511
9561
  paint.patternId = id;
@@ -9524,15 +9574,15 @@ var LeaferUI = function(exports) {
9524
9574
  return fixScale;
9525
9575
  }
9526
9576
  function checkImage(paint, drawImage, ui, canvas, renderOptions) {
9527
- const {scaleX: scaleX, scaleY: scaleY} = PaintImage.getImageRenderScaleData(paint, ui, canvas, renderOptions);
9577
+ const {scaleX: scaleX, scaleY: scaleY} = PaintImage.getImageRenderScaleData(paint, ui, canvas, renderOptions), id = paint.film ? paint.nowIndex : scaleX + "-" + scaleY;
9528
9578
  const {image: image, data: data, originPaint: originPaint} = paint, {exporting: exporting, snapshot: snapshot} = renderOptions;
9529
- if (!data || paint.patternId === scaleX + "-" + scaleY && !exporting || snapshot) {
9579
+ if (!data || paint.patternId === id && !exporting || snapshot) {
9530
9580
  return false;
9531
9581
  } else {
9532
9582
  if (drawImage) {
9533
9583
  if (data.repeat) {
9534
9584
  drawImage = false;
9535
- } else if (!(originPaint.changeful || Platform.name === "miniapp" && ResizeEvent.isResizing(ui) || exporting)) {
9585
+ } else if (!(originPaint.changeful || paint.film || Platform.name === "miniapp" && ResizeEvent.isResizing(ui) || exporting)) {
9536
9586
  drawImage = Platform.image.isLarge(image, scaleX, scaleY) || image.width * scaleX > 8096 || image.height * scaleY > 8096;
9537
9587
  }
9538
9588
  }
@@ -9549,20 +9599,21 @@ var LeaferUI = function(exports) {
9549
9599
  }
9550
9600
  }
9551
9601
  }
9552
- function drawImage(paint, _imageScaleX, _imageScaleY, ui, canvas, _renderOptions) {
9553
- const {data: data, image: image} = paint, {blendMode: blendMode} = paint.originPaint, {opacity: opacity, transform: transform} = data, view = image.getFull(data.filters), u = ui.__;
9554
- let {width: width, height: height} = image, clipUI;
9555
- if ((clipUI = transform && !transform.onlyScale || u.path || u.cornerRadius) || opacity || blendMode) {
9602
+ function drawImage(paint, imageScaleX, imageScaleY, ui, canvas, _renderOptions) {
9603
+ const {data: data, image: image, complex: complex} = paint;
9604
+ let {width: width, height: height} = image;
9605
+ if (complex) {
9606
+ const {blendMode: blendMode, opacity: opacity} = paint.originPaint, {transform: transform} = data;
9556
9607
  canvas.save();
9557
- clipUI && canvas.clipUI(ui);
9608
+ complex === 2 && canvas.clipUI(ui);
9558
9609
  blendMode && (canvas.blendMode = blendMode);
9559
9610
  opacity && (canvas.opacity *= opacity);
9560
9611
  transform && canvas.transform(transform);
9561
- canvas.drawImage(view, 0, 0, width, height);
9612
+ image.render(canvas, 0, 0, width, height, ui, paint, imageScaleX, imageScaleY);
9562
9613
  canvas.restore();
9563
9614
  } else {
9564
9615
  if (data.scaleX) width *= data.scaleX, height *= data.scaleY;
9565
- canvas.drawImage(view, 0, 0, width, height);
9616
+ image.render(canvas, 0, 0, width, height, ui, paint, imageScaleX, imageScaleY);
9566
9617
  }
9567
9618
  }
9568
9619
  function getImageRenderScaleData(paint, ui, canvas, _renderOptions) {
@@ -10198,7 +10249,7 @@ var LeaferUI = function(exports) {
10198
10249
  let {x: x, y: y, width: width, height: height} = bounds, realHeight = __lineHeight * countRows + (paraSpacing ? paraSpacing * (drawData.paraNumber - 1) : 0);
10199
10250
  let starY = __baseLine;
10200
10251
  if (__clipText && realHeight > height) {
10201
- realHeight = Math.max(height, __lineHeight);
10252
+ realHeight = Math.max(style.__autoHeight ? realHeight : height, __lineHeight);
10202
10253
  if (countRows > 1) drawData.overflow = countRows;
10203
10254
  } else if (height || autoSizeAlign) {
10204
10255
  switch (verticalAlign) {
@@ -10254,10 +10305,10 @@ var LeaferUI = function(exports) {
10254
10305
  bounds.height = realHeight;
10255
10306
  }
10256
10307
  function clipText(drawData, style, x, width) {
10257
- if (!width) return;
10258
10308
  const {rows: rows, overflow: overflow} = drawData;
10259
10309
  let {textOverflow: textOverflow} = style;
10260
- rows.splice(overflow);
10310
+ if (overflow) rows.splice(overflow);
10311
+ if (!width) return;
10261
10312
  if (textOverflow && textOverflow !== "show") {
10262
10313
  if (textOverflow === "hide") textOverflow = ""; else if (textOverflow === "ellipsis") textOverflow = "...";
10263
10314
  let char, charRight;
@@ -10449,7 +10500,9 @@ var LeaferUI = function(exports) {
10449
10500
  exports.LeaferCanvasBase = LeaferCanvasBase;
10450
10501
  exports.LeaferData = LeaferData;
10451
10502
  exports.LeaferEvent = LeaferEvent;
10503
+ exports.LeaferFilm = LeaferFilm;
10452
10504
  exports.LeaferImage = LeaferImage;
10505
+ exports.LeaferVideo = LeaferVideo;
10453
10506
  exports.LineData = LineData;
10454
10507
  exports.MathHelper = MathHelper;
10455
10508
  exports.Matrix = Matrix;