leafer-game 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/web.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$3(floor$1(width + (xGap || 0)), 1), realHeight = max$3(floor$1(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$f.error("not register " + tag);
1842
+ if (!list$1[tag]) {
1843
+ debug$f.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$1(radius, min$1(d / 2, d / 2 * abs$4(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$1(radius, min$1(r, r * abs$4(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$2) {
3455
3458
  secondX = data[i + 1];
3456
3459
  secondY = data[i + 2];
3457
- smooth.push(M$1, getCenterX(startX, secondX), getCenterY(startY, secondY));
3460
+ three ? smooth.push(M$1, startX, startY) : smooth.push(M$1, getCenterX(startX, secondX), getCenterY(startY, secondY));
3458
3461
  } else {
3459
3462
  smooth.push(M$1, 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$2:
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$1:
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$1:
3484
3487
  if (lastCommand !== Z$1) {
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$1);
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$a = Debug.get("TaskProcessor");
3562
3566
  class TaskItem {
@@ -3796,6 +3800,9 @@ var LeaferUI = function(exports) {
3796
3800
  const debug$9 = 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$1 = 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
  const debug$5 = Debug.get("LeaferCanvas");
6572
6603
  class LeaferCanvas extends LeaferCanvasBase {
6573
6604
  set zIndex(zIndex) {
@@ -6767,7 +6798,6 @@ var LeaferUI = function(exports) {
6767
6798
  }
6768
6799
  canvasPatch(CanvasRenderingContext2D.prototype);
6769
6800
  canvasPatch(Path2D.prototype);
6770
- const {mineType: mineType, fileType: fileType} = FileHelper;
6771
6801
  Object.assign(Creator, {
6772
6802
  canvas: (options, manager) => new LeaferCanvas(options, manager),
6773
6803
  image: options => new LeaferImage(options)
@@ -6781,29 +6811,27 @@ var LeaferUI = function(exports) {
6781
6811
  return canvas;
6782
6812
  },
6783
6813
  canvasToDataURL: (canvas, type, quality) => {
6784
- const imageType = mineType(type), url = canvas.toDataURL(imageType, quality);
6814
+ const imageType = FileHelper.mimeType(type), url = canvas.toDataURL(imageType, quality);
6785
6815
  return imageType === "image/bmp" ? url.replace("image/png;", "image/bmp;") : url;
6786
6816
  },
6787
- canvasToBolb: (canvas, type, quality) => new Promise(resolve => canvas.toBlob(resolve, mineType(type), quality)),
6817
+ canvasToBolb: (canvas, type, quality) => new Promise(resolve => canvas.toBlob(resolve, FileHelper.mimeType(type), quality)),
6788
6818
  canvasSaveAs: (canvas, filename, quality) => {
6789
- const url = canvas.toDataURL(mineType(fileType(filename)), quality);
6819
+ const url = canvas.toDataURL(FileHelper.mimeType(FileHelper.fileType(filename)), quality);
6790
6820
  return Platform.origin.download(url, filename);
6791
6821
  },
6792
6822
  download(url, filename) {
6793
- return new Promise(resolve => {
6823
+ return __awaiter(this, void 0, void 0, function*() {
6794
6824
  let el = document.createElement("a");
6795
6825
  el.href = url;
6796
6826
  el.download = filename;
6797
6827
  document.body.appendChild(el);
6798
6828
  el.click();
6799
6829
  document.body.removeChild(el);
6800
- resolve();
6801
6830
  });
6802
6831
  },
6803
- loadImage(src) {
6832
+ loadImage(src, crossOrigin, _leaferImage) {
6804
6833
  return new Promise((resolve, reject) => {
6805
6834
  const img = new Platform.origin.Image;
6806
- const {crossOrigin: crossOrigin} = Platform.image;
6807
6835
  if (crossOrigin) {
6808
6836
  img.setAttribute("crossOrigin", crossOrigin);
6809
6837
  img.crossOrigin = crossOrigin;
@@ -6817,6 +6845,13 @@ var LeaferUI = function(exports) {
6817
6845
  img.src = Platform.image.getRealURL(src);
6818
6846
  });
6819
6847
  },
6848
+ loadContent(url_1) {
6849
+ return __awaiter(this, arguments, void 0, function*(url, responseType = "text") {
6850
+ const response = yield fetch(url);
6851
+ if (!response.ok) throw new Error(`${response.status}`);
6852
+ return yield response[responseType]();
6853
+ });
6854
+ },
6820
6855
  Image: Image,
6821
6856
  PointerEvent: PointerEvent,
6822
6857
  DragEvent: DragEvent
@@ -7308,7 +7343,7 @@ var LeaferUI = function(exports) {
7308
7343
  getCellList() {
7309
7344
  return undefined;
7310
7345
  }
7311
- addBlock(block) {
7346
+ addBlock(block, _leafList) {
7312
7347
  if (!this.updateBlocks) this.updateBlocks = [];
7313
7348
  this.updateBlocks.push(block);
7314
7349
  }
@@ -7356,7 +7391,8 @@ var LeaferUI = function(exports) {
7356
7391
  __onLayoutEnd(event) {
7357
7392
  if (event.data) event.data.map(item => {
7358
7393
  let empty;
7359
- if (item.updatedList) item.updatedList.list.some(leaf => {
7394
+ const {updatedList: updatedList} = item;
7395
+ if (updatedList) updatedList.list.some(leaf => {
7360
7396
  empty = !leaf.__world.width || !leaf.__world.height;
7361
7397
  if (empty) {
7362
7398
  if (!leaf.isLeafer) debug$3.tip(leaf.innerName, ": empty");
@@ -7364,7 +7400,7 @@ var LeaferUI = function(exports) {
7364
7400
  }
7365
7401
  return empty;
7366
7402
  });
7367
- this.addBlock(empty ? this.canvas.bounds : item.updatedBounds);
7403
+ this.addBlock(empty ? this.canvas.bounds : item.updatedBounds, updatedList);
7368
7404
  });
7369
7405
  }
7370
7406
  emitRender(type, bounds, options) {
@@ -7720,16 +7756,16 @@ var LeaferUI = function(exports) {
7720
7756
  return t.fill || t.stroke;
7721
7757
  }
7722
7758
  get __autoWidth() {
7723
- return !this._width;
7759
+ return this._width == null;
7724
7760
  }
7725
7761
  get __autoHeight() {
7726
- return !this._height;
7762
+ return this._height == null;
7727
7763
  }
7728
7764
  get __autoSide() {
7729
- return !this._width || !this._height;
7765
+ return this._width == null || this._height == null;
7730
7766
  }
7731
7767
  get __autoSize() {
7732
- return !this._width && !this._height;
7768
+ return this._width == null && this._height == null;
7733
7769
  }
7734
7770
  setVisible(value) {
7735
7771
  this._visible = value;
@@ -7926,13 +7962,16 @@ var LeaferUI = function(exports) {
7926
7962
  }
7927
7963
  }
7928
7964
  class ImageData extends RectData {
7965
+ get __urlType() {
7966
+ return "image";
7967
+ }
7929
7968
  setUrl(value) {
7930
7969
  this.__setImageFill(value);
7931
7970
  this._url = value;
7932
7971
  }
7933
7972
  __setImageFill(value) {
7934
7973
  this.fill = value ? {
7935
- type: "image",
7974
+ type: this.__urlType,
7936
7975
  mode: "stretch",
7937
7976
  url: value
7938
7977
  } : undefined;
@@ -8348,7 +8387,10 @@ var LeaferUI = function(exports) {
8348
8387
  }
8349
8388
  toJSON(options) {
8350
8389
  const data = super.toJSON(options);
8351
- if (!this.childlessJSON) data.children = this.children.map(child => child.toJSON(options));
8390
+ if (!this.childlessJSON) {
8391
+ const children = data.children = [];
8392
+ this.children.forEach(child => child.skipJSON || children.push(child.toJSON(options)));
8393
+ }
8352
8394
  return data;
8353
8395
  }
8354
8396
  pick(_hitPoint, _options) {
@@ -8490,12 +8532,12 @@ var LeaferUI = function(exports) {
8490
8532
  this.emitLeafer(LeaferEvent.STOP);
8491
8533
  }
8492
8534
  }
8493
- unlockLayout() {
8535
+ unlockLayout(updateLayout = true) {
8494
8536
  this.layouter.start();
8495
- this.updateLayout();
8537
+ if (updateLayout) this.updateLayout();
8496
8538
  }
8497
- lockLayout() {
8498
- this.updateLayout();
8539
+ lockLayout(updateLayout = true) {
8540
+ if (updateLayout) this.updateLayout();
8499
8541
  this.layouter.stop();
8500
8542
  }
8501
8543
  resize(size) {
@@ -10074,6 +10116,7 @@ var LeaferUI = function(exports) {
10074
10116
  this.checkPath(data, useDefaultPath);
10075
10117
  this.downTime = Date.now();
10076
10118
  this.emit(exports.PointerEvent.BEFORE_DOWN, data);
10119
+ if (data.path.needUpdate) this.updateDownData(data);
10077
10120
  this.emit(exports.PointerEvent.DOWN, data);
10078
10121
  if (PointerButton.left(data)) {
10079
10122
  this.tapWait();
@@ -11247,11 +11290,14 @@ var LeaferUI = function(exports) {
11247
11290
  function getLeafPaint(attrName, paint, ui) {
11248
11291
  if (!isObject(paint) || paint.visible === false || paint.opacity === 0) return undefined;
11249
11292
  let leafPaint;
11250
- const {boxBounds: boxBounds} = ui.__layout;
11251
- switch (paint.type) {
11293
+ const {boxBounds: boxBounds} = ui.__layout, {type: type} = paint;
11294
+ switch (type) {
11252
11295
  case "image":
11296
+ case "film":
11297
+ case "video":
11253
11298
  if (!paint.url) return undefined;
11254
11299
  leafPaint = PaintImage.image(ui, attrName, paint, boxBounds, !recycleMap || !recycleMap[paint.url]);
11300
+ if (type !== "image") PaintImage[type](leafPaint);
11255
11301
  break;
11256
11302
 
11257
11303
  case "linear":
@@ -11267,7 +11313,7 @@ var LeaferUI = function(exports) {
11267
11313
  break;
11268
11314
 
11269
11315
  case "solid":
11270
- const {type: type, color: color, opacity: opacity} = paint;
11316
+ const {color: color, opacity: opacity} = paint;
11271
11317
  leafPaint = {
11272
11318
  type: type,
11273
11319
  style: ColorConvert.string(color, opacity)
@@ -11307,7 +11353,7 @@ var LeaferUI = function(exports) {
11307
11353
  const {isSame: isSame} = BoundsHelper;
11308
11354
  function image(ui, attrName, paint, boxBounds, firstUse) {
11309
11355
  let leafPaint, event;
11310
- const image = ImageManager.get(paint);
11356
+ const image = ImageManager.get(paint, paint.type);
11311
11357
  if (cache$1 && paint === cache$1.paint && isSame(boxBounds, cache$1.boxBounds)) {
11312
11358
  leafPaint = cache$1.leafPaint;
11313
11359
  } else {
@@ -11367,8 +11413,8 @@ var LeaferUI = function(exports) {
11367
11413
  return leafPaint;
11368
11414
  }
11369
11415
  function checkSizeAndCreateData(ui, attrName, paint, image, leafPaint, boxBounds) {
11370
- if (attrName === "fill" && !ui.__.__naturalWidth) {
11371
- const data = ui.__;
11416
+ const data = ui.__;
11417
+ if (attrName === "fill" && !data.__naturalWidth) {
11372
11418
  data.__naturalWidth = image.width / data.pixelRatio;
11373
11419
  data.__naturalHeight = image.height / data.pixelRatio;
11374
11420
  if (data.__autoSide) {
@@ -11380,7 +11426,12 @@ var LeaferUI = function(exports) {
11380
11426
  return false;
11381
11427
  }
11382
11428
  }
11383
- if (!leafPaint.data) PaintImage.createData(leafPaint, image, paint, boxBounds);
11429
+ if (!leafPaint.data) {
11430
+ PaintImage.createData(leafPaint, image, paint, boxBounds);
11431
+ const {transform: transform} = leafPaint.data, {opacity: opacity, blendMode: blendMode} = paint;
11432
+ const clip = transform && !transform.onlyScale || data.path || data.cornerRadius;
11433
+ if (clip || opacity && opacity < 1 || blendMode) leafPaint.complex = clip ? 2 : true;
11434
+ }
11384
11435
  return true;
11385
11436
  }
11386
11437
  function onLoad(ui, event) {
@@ -11412,7 +11463,7 @@ var LeaferUI = function(exports) {
11412
11463
  if (paint.padding) box = tempBox.set(box).shrink(paint.padding);
11413
11464
  if (paint.mode === "strench") paint.mode = "stretch";
11414
11465
  const {width: width, height: height} = image;
11415
- 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;
11466
+ const {mode: mode, align: align, offset: offset, scale: scale, size: size, rotation: rotation, skew: skew, clipSize: clipSize, repeat: repeat, gap: gap, interlace: interlace} = paint;
11416
11467
  const sameBox = box.width === width && box.height === height;
11417
11468
  const data = {
11418
11469
  mode: mode
@@ -11475,8 +11526,6 @@ var LeaferUI = function(exports) {
11475
11526
  data.scaleX = scaleX;
11476
11527
  data.scaleY = scaleY;
11477
11528
  }
11478
- if (opacity && opacity < 1) data.opacity = opacity;
11479
- if (filters) data.filters = filters;
11480
11529
  if (repeat) data.repeat = isString(repeat) ? repeat === "x" ? "repeat-x" : "repeat-y" : "repeat";
11481
11530
  if (interlace) data.interlace = isNumber(interlace) || interlace.type === "percent" ? {
11482
11531
  type: "x",
@@ -11502,7 +11551,7 @@ var LeaferUI = function(exports) {
11502
11551
  const {get: get$2, set: set, rotateOfOuter: rotateOfOuter$1, translate: translate, scaleOfOuter: scaleOfOuter$1, multiplyParent: multiplyParent, scale: scaleHelper, rotate: rotate, skew: skewHelper} = MatrixHelper;
11503
11552
  function stretchMode(data, box, scaleX, scaleY) {
11504
11553
  const transform = get$2(), {x: x, y: y} = box;
11505
- if (x || y) translate(transform, x, y); else transform.onlyScale = true;
11554
+ if (x || y) translate(transform, x, y); else if (scaleX > 0 && scaleY > 0) transform.onlyScale = true;
11506
11555
  scaleHelper(transform, scaleX, scaleY);
11507
11556
  data.transform = transform;
11508
11557
  }
@@ -11583,10 +11632,10 @@ var LeaferUI = function(exports) {
11583
11632
  }
11584
11633
  }
11585
11634
  function createPattern(paint, ui, canvas, renderOptions) {
11586
- let {scaleX: scaleX, scaleY: scaleY} = PaintImage.getImageRenderScaleData(paint, ui, canvas, renderOptions), id = scaleX + "-" + scaleY;
11635
+ let {scaleX: scaleX, scaleY: scaleY} = PaintImage.getImageRenderScaleData(paint, ui, canvas, renderOptions), id = paint.film ? paint.nowIndex : scaleX + "-" + scaleY;
11587
11636
  if (paint.patternId !== id && !ui.destroyed) {
11588
11637
  if (!(Platform.image.isLarge(paint.image, scaleX, scaleY) && !paint.data.repeat)) {
11589
- const {image: image, data: data} = paint, {transform: transform, gap: gap} = data, fixScale = PaintImage.getPatternFixScale(paint, scaleX, scaleY);
11638
+ const {image: image, data: data} = paint, {opacity: opacity, filters: filters} = paint.originPaint, {transform: transform, gap: gap} = data, fixScale = PaintImage.getPatternFixScale(paint, scaleX, scaleY);
11590
11639
  let imageMatrix, xGap, yGap, {width: width, height: height} = image;
11591
11640
  if (fixScale) scaleX *= fixScale, scaleY *= fixScale;
11592
11641
  width *= scaleX;
@@ -11602,7 +11651,7 @@ var LeaferUI = function(exports) {
11602
11651
  if (transform) copy$1(imageMatrix, transform);
11603
11652
  scale(imageMatrix, 1 / scaleX, 1 / scaleY);
11604
11653
  }
11605
- const imageCanvas = image.getCanvas(width, height, data.opacity, data.filters, xGap, yGap, ui.leafer && ui.leafer.config.smooth, data.interlace);
11654
+ const imageCanvas = image.getCanvas(width, height, opacity, filters, xGap, yGap, ui.leafer && ui.leafer.config.smooth, data.interlace);
11606
11655
  const pattern = image.getPattern(imageCanvas, data.repeat || (Platform.origin.noRepeat || "no-repeat"), imageMatrix, paint);
11607
11656
  paint.style = pattern;
11608
11657
  paint.patternId = id;
@@ -11621,15 +11670,15 @@ var LeaferUI = function(exports) {
11621
11670
  return fixScale;
11622
11671
  }
11623
11672
  function checkImage(paint, drawImage, ui, canvas, renderOptions) {
11624
- const {scaleX: scaleX, scaleY: scaleY} = PaintImage.getImageRenderScaleData(paint, ui, canvas, renderOptions);
11673
+ const {scaleX: scaleX, scaleY: scaleY} = PaintImage.getImageRenderScaleData(paint, ui, canvas, renderOptions), id = paint.film ? paint.nowIndex : scaleX + "-" + scaleY;
11625
11674
  const {image: image, data: data, originPaint: originPaint} = paint, {exporting: exporting, snapshot: snapshot} = renderOptions;
11626
- if (!data || paint.patternId === scaleX + "-" + scaleY && !exporting || snapshot) {
11675
+ if (!data || paint.patternId === id && !exporting || snapshot) {
11627
11676
  return false;
11628
11677
  } else {
11629
11678
  if (drawImage) {
11630
11679
  if (data.repeat) {
11631
11680
  drawImage = false;
11632
- } else if (!(originPaint.changeful || Platform.name === "miniapp" && ResizeEvent.isResizing(ui) || exporting)) {
11681
+ } else if (!(originPaint.changeful || paint.film || Platform.name === "miniapp" && ResizeEvent.isResizing(ui) || exporting)) {
11633
11682
  drawImage = Platform.image.isLarge(image, scaleX, scaleY) || image.width * scaleX > 8096 || image.height * scaleY > 8096;
11634
11683
  }
11635
11684
  }
@@ -11646,20 +11695,21 @@ var LeaferUI = function(exports) {
11646
11695
  }
11647
11696
  }
11648
11697
  }
11649
- function drawImage(paint, _imageScaleX, _imageScaleY, ui, canvas, _renderOptions) {
11650
- const {data: data, image: image} = paint, {blendMode: blendMode} = paint.originPaint, {opacity: opacity, transform: transform} = data, view = image.getFull(data.filters), u = ui.__;
11651
- let {width: width, height: height} = image, clipUI;
11652
- if ((clipUI = transform && !transform.onlyScale || u.path || u.cornerRadius) || opacity || blendMode) {
11698
+ function drawImage(paint, imageScaleX, imageScaleY, ui, canvas, _renderOptions) {
11699
+ const {data: data, image: image, complex: complex} = paint;
11700
+ let {width: width, height: height} = image;
11701
+ if (complex) {
11702
+ const {blendMode: blendMode, opacity: opacity} = paint.originPaint, {transform: transform} = data;
11653
11703
  canvas.save();
11654
- clipUI && canvas.clipUI(ui);
11704
+ complex === 2 && canvas.clipUI(ui);
11655
11705
  blendMode && (canvas.blendMode = blendMode);
11656
11706
  opacity && (canvas.opacity *= opacity);
11657
11707
  transform && canvas.transform(transform);
11658
- canvas.drawImage(view, 0, 0, width, height);
11708
+ image.render(canvas, 0, 0, width, height, ui, paint, imageScaleX, imageScaleY);
11659
11709
  canvas.restore();
11660
11710
  } else {
11661
11711
  if (data.scaleX) width *= data.scaleX, height *= data.scaleY;
11662
- canvas.drawImage(view, 0, 0, width, height);
11712
+ image.render(canvas, 0, 0, width, height, ui, paint, imageScaleX, imageScaleY);
11663
11713
  }
11664
11714
  }
11665
11715
  function getImageRenderScaleData(paint, ui, canvas, _renderOptions) {
@@ -12295,7 +12345,7 @@ var LeaferUI = function(exports) {
12295
12345
  let {x: x, y: y, width: width, height: height} = bounds, realHeight = __lineHeight * countRows + (paraSpacing ? paraSpacing * (drawData.paraNumber - 1) : 0);
12296
12346
  let starY = __baseLine;
12297
12347
  if (__clipText && realHeight > height) {
12298
- realHeight = Math.max(height, __lineHeight);
12348
+ realHeight = Math.max(style.__autoHeight ? realHeight : height, __lineHeight);
12299
12349
  if (countRows > 1) drawData.overflow = countRows;
12300
12350
  } else if (height || autoSizeAlign) {
12301
12351
  switch (verticalAlign) {
@@ -12351,10 +12401,10 @@ var LeaferUI = function(exports) {
12351
12401
  bounds.height = realHeight;
12352
12402
  }
12353
12403
  function clipText(drawData, style, x, width) {
12354
- if (!width) return;
12355
12404
  const {rows: rows, overflow: overflow} = drawData;
12356
12405
  let {textOverflow: textOverflow} = style;
12357
- rows.splice(overflow);
12406
+ if (overflow) rows.splice(overflow);
12407
+ if (!width) return;
12358
12408
  if (textOverflow && textOverflow !== "show") {
12359
12409
  if (textOverflow === "hide") textOverflow = ""; else if (textOverflow === "ellipsis") textOverflow = "...";
12360
12410
  let char, charRight;
@@ -12524,6 +12574,9 @@ var LeaferUI = function(exports) {
12524
12574
  constructor(data) {
12525
12575
  super(data);
12526
12576
  }
12577
+ togglePlay() {
12578
+ this.running ? this.pause() : this.play();
12579
+ }
12527
12580
  play() {
12528
12581
  this.running = true;
12529
12582
  }
@@ -14489,7 +14542,9 @@ var LeaferUI = function(exports) {
14489
14542
  exports.LeaferCanvasBase = LeaferCanvasBase;
14490
14543
  exports.LeaferData = LeaferData;
14491
14544
  exports.LeaferEvent = LeaferEvent;
14545
+ exports.LeaferFilm = LeaferFilm;
14492
14546
  exports.LeaferImage = LeaferImage;
14547
+ exports.LeaferVideo = LeaferVideo;
14493
14548
  exports.LineData = LineData;
14494
14549
  exports.MathHelper = MathHelper;
14495
14550
  exports.Matrix = Matrix;