@visactor/vrender-core 0.23.0-alpha.2 → 0.23.0-alpha.3

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.
Files changed (96) hide show
  1. package/cjs/canvas/empty-context.d.ts +1 -0
  2. package/cjs/canvas/empty-context.js +4 -0
  3. package/cjs/canvas/empty-context.js.map +1 -1
  4. package/cjs/color-string/index.js +2 -1
  5. package/cjs/common/enums.js +1 -2
  6. package/cjs/common/path-svg.js +2 -1
  7. package/cjs/common/performance-raf.d.ts +2 -0
  8. package/cjs/common/performance-raf.js +8 -3
  9. package/cjs/common/performance-raf.js.map +1 -1
  10. package/cjs/common/store.js +1 -2
  11. package/cjs/core/global.d.ts +3 -0
  12. package/cjs/core/global.js +13 -3
  13. package/cjs/core/global.js.map +1 -1
  14. package/cjs/core/stage.d.ts +1 -0
  15. package/cjs/core/stage.js +7 -6
  16. package/cjs/core/stage.js.map +1 -1
  17. package/cjs/graphic/graphic.js.map +1 -1
  18. package/cjs/interface/context.d.ts +1 -0
  19. package/cjs/interface/context.js.map +1 -1
  20. package/cjs/interface/global.d.ts +2 -0
  21. package/cjs/interface/global.js.map +1 -1
  22. package/cjs/interface/graphic.d.ts +1 -1
  23. package/cjs/interface/graphic.js.map +1 -1
  24. package/cjs/interface/render.d.ts +6 -0
  25. package/cjs/interface/render.js.map +1 -1
  26. package/cjs/interface/stage.d.ts +1 -1
  27. package/cjs/interface/stage.js.map +1 -1
  28. package/cjs/render/contributions/render/arc-render.d.ts +4 -2
  29. package/cjs/render/contributions/render/arc-render.js +19 -17
  30. package/cjs/render/contributions/render/arc-render.js.map +1 -1
  31. package/cjs/render/contributions/render/base-render.d.ts +2 -2
  32. package/cjs/render/contributions/render/base-render.js +2 -2
  33. package/cjs/render/contributions/render/base-render.js.map +1 -1
  34. package/cjs/render/contributions/render/draw-contribution.d.ts +1 -0
  35. package/cjs/render/contributions/render/draw-contribution.js +23 -19
  36. package/cjs/render/contributions/render/draw-contribution.js.map +1 -1
  37. package/cjs/render/contributions/render/draw-interceptor.js +1 -0
  38. package/cjs/render/contributions/render/draw-interceptor.js.map +1 -1
  39. package/cjs/render/contributions/render/group-render.d.ts +2 -2
  40. package/cjs/render/contributions/render/group-render.js +14 -10
  41. package/cjs/render/contributions/render/group-render.js.map +1 -1
  42. package/cjs/render/contributions/render/rect-render.d.ts +3 -1
  43. package/cjs/render/contributions/render/rect-render.js +17 -15
  44. package/cjs/render/contributions/render/rect-render.js.map +1 -1
  45. package/cjs/render/contributions/render/symbol-render.d.ts +4 -2
  46. package/cjs/render/contributions/render/symbol-render.js +16 -11
  47. package/cjs/render/contributions/render/symbol-render.js.map +1 -1
  48. package/dist/index.es.js +222 -172
  49. package/es/canvas/empty-context.d.ts +1 -0
  50. package/es/canvas/empty-context.js +4 -0
  51. package/es/canvas/empty-context.js.map +1 -1
  52. package/es/color-string/index.js +2 -1
  53. package/es/common/enums.js +1 -2
  54. package/es/common/path-svg.js +2 -1
  55. package/es/common/performance-raf.d.ts +2 -0
  56. package/es/common/performance-raf.js +8 -3
  57. package/es/common/performance-raf.js.map +1 -1
  58. package/es/common/store.js +1 -2
  59. package/es/core/global.d.ts +3 -0
  60. package/es/core/global.js +14 -2
  61. package/es/core/global.js.map +1 -1
  62. package/es/core/stage.d.ts +1 -0
  63. package/es/core/stage.js +7 -6
  64. package/es/core/stage.js.map +1 -1
  65. package/es/graphic/graphic.js.map +1 -1
  66. package/es/interface/context.d.ts +1 -0
  67. package/es/interface/context.js.map +1 -1
  68. package/es/interface/global.d.ts +2 -0
  69. package/es/interface/global.js.map +1 -1
  70. package/es/interface/graphic.d.ts +1 -1
  71. package/es/interface/graphic.js.map +1 -1
  72. package/es/interface/render.d.ts +6 -0
  73. package/es/interface/render.js.map +1 -1
  74. package/es/interface/stage.d.ts +1 -1
  75. package/es/interface/stage.js.map +1 -1
  76. package/es/render/contributions/render/arc-render.d.ts +4 -2
  77. package/es/render/contributions/render/arc-render.js +19 -17
  78. package/es/render/contributions/render/arc-render.js.map +1 -1
  79. package/es/render/contributions/render/base-render.d.ts +2 -2
  80. package/es/render/contributions/render/base-render.js +2 -2
  81. package/es/render/contributions/render/base-render.js.map +1 -1
  82. package/es/render/contributions/render/draw-contribution.d.ts +1 -0
  83. package/es/render/contributions/render/draw-contribution.js +23 -19
  84. package/es/render/contributions/render/draw-contribution.js.map +1 -1
  85. package/es/render/contributions/render/draw-interceptor.js +1 -0
  86. package/es/render/contributions/render/draw-interceptor.js.map +1 -1
  87. package/es/render/contributions/render/group-render.d.ts +2 -2
  88. package/es/render/contributions/render/group-render.js +14 -10
  89. package/es/render/contributions/render/group-render.js.map +1 -1
  90. package/es/render/contributions/render/rect-render.d.ts +3 -1
  91. package/es/render/contributions/render/rect-render.js +17 -14
  92. package/es/render/contributions/render/rect-render.js.map +1 -1
  93. package/es/render/contributions/render/symbol-render.d.ts +4 -2
  94. package/es/render/contributions/render/symbol-render.js +16 -11
  95. package/es/render/contributions/render/symbol-render.js.map +1 -1
  96. package/package.json +3 -3
package/dist/index.es.js CHANGED
@@ -852,6 +852,41 @@ const EnvContribution = Symbol.for('EnvContribution');
852
852
  const VGlobal = Symbol.for('VGlobal');
853
853
  const DEFAULT_TEXT_FONT_FAMILY = 'PingFang SC,Helvetica Neue,Microsoft Yahei,system-ui,-apple-system,segoe ui,Roboto,Helvetica,Arial,sans-serif,apple color emoji,segoe ui emoji,segoe ui symbol';
854
854
 
855
+ class PerformanceRAF {
856
+ constructor() {
857
+ this.nextAnimationFrameCbs = [];
858
+ this._rafHandle = null;
859
+ this.runAnimationFrame = (time) => {
860
+ this._rafHandle = null;
861
+ const cbs = this.nextAnimationFrameCbs;
862
+ this.nextAnimationFrameCbs = [];
863
+ for (let i = 0; i < cbs.length; i++) {
864
+ if (cbs[i]) {
865
+ cbs[i](time);
866
+ }
867
+ }
868
+ };
869
+ this.tryRunAnimationFrameNextFrame = () => {
870
+ if (this._rafHandle !== null || this.nextAnimationFrameCbs.length === 0) {
871
+ return;
872
+ }
873
+ this._rafHandle = vglobal.getRequestAnimationFrame()(this.runAnimationFrame);
874
+ };
875
+ }
876
+ addAnimationFrameCb(callback) {
877
+ this.nextAnimationFrameCbs.push(callback);
878
+ this.tryRunAnimationFrameNextFrame();
879
+ return this.nextAnimationFrameCbs.length - 1;
880
+ }
881
+ removeAnimationFrameCb(index) {
882
+ if (index >= 0 && index < this.nextAnimationFrameCbs.length) {
883
+ this.nextAnimationFrameCbs[index] = null;
884
+ return true;
885
+ }
886
+ return false;
887
+ }
888
+ }
889
+
855
890
  const defaultEnv = 'browser';
856
891
  let DefaultGlobal = class DefaultGlobal {
857
892
  get env() {
@@ -932,6 +967,7 @@ let DefaultGlobal = class DefaultGlobal {
932
967
  constructor(contributions) {
933
968
  this.contributions = contributions;
934
969
  this._isImageAnonymous = true;
970
+ this._performanceRAFList = [];
935
971
  this.id = Generator.GenAutoIncrementId();
936
972
  this.hooks = {
937
973
  onSetEnv: new SyncHook(['lastEnv', 'env', 'global'])
@@ -1031,6 +1067,30 @@ let DefaultGlobal = class DefaultGlobal {
1031
1067
  }
1032
1068
  return this.envContribution.getRequestAnimationFrame();
1033
1069
  }
1070
+ getSpecifiedRequestAnimationFrame(id) {
1071
+ if (!this._env) {
1072
+ this.setEnv(defaultEnv);
1073
+ }
1074
+ if (!this._performanceRAFList[id]) {
1075
+ this._performanceRAFList[id] = new PerformanceRAF();
1076
+ }
1077
+ const performanceRAF = this._performanceRAFList[id];
1078
+ return (callback) => {
1079
+ return performanceRAF.addAnimationFrameCb(callback);
1080
+ };
1081
+ }
1082
+ getSpecifiedCancelAnimationFrame(id) {
1083
+ if (!this._env) {
1084
+ this.setEnv(defaultEnv);
1085
+ }
1086
+ if (!this._performanceRAFList[id]) {
1087
+ return () => false;
1088
+ }
1089
+ const performanceRAF = this._performanceRAFList[id];
1090
+ return (handle) => {
1091
+ return performanceRAF.removeAnimationFrameCb(handle);
1092
+ };
1093
+ }
1034
1094
  getCancelAnimationFrame() {
1035
1095
  if (!this._env) {
1036
1096
  this.setEnv(defaultEnv);
@@ -17672,7 +17732,7 @@ class BaseRender {
17672
17732
  context.translate(-p.x, -p.y, false);
17673
17733
  context.setTransformForCurrent();
17674
17734
  }
17675
- _draw(graphic, defaultAttr, computed3dMatrix, drawContext, params) {
17735
+ _draw(graphic, defaultAttr, computed3dMatrix, drawContext, params, themeAttribute) {
17676
17736
  const { context } = drawContext;
17677
17737
  if (!context) {
17678
17738
  return;
@@ -17689,7 +17749,7 @@ class BaseRender {
17689
17749
  context.highPerformanceRestore();
17690
17750
  return;
17691
17751
  }
17692
- this.drawShape(graphic, context, x, y, drawContext, params);
17752
+ this.drawShape(graphic, context, x, y, drawContext, params, null, null, themeAttribute);
17693
17753
  this.z = 0;
17694
17754
  if (context.modelMatrix !== lastModelMatrix) {
17695
17755
  mat4Allocate.free(context.modelMatrix);
@@ -17773,8 +17833,8 @@ let DefaultCanvasArcRender = class DefaultCanvasArcRender extends BaseRender {
17773
17833
  }
17774
17834
  return collapsedToLine;
17775
17835
  }
17776
- drawShape(arc, context, x, y, drawContext, params, fillCb, strokeCb) {
17777
- const arcAttribute = getTheme(arc, params === null || params === void 0 ? void 0 : params.theme).arc;
17836
+ drawShape(arc, context, x, y, drawContext, params, fillCb, strokeCb, arcAttribute) {
17837
+ arcAttribute = arcAttribute !== null && arcAttribute !== void 0 ? arcAttribute : getTheme(arc, params === null || params === void 0 ? void 0 : params.theme).arc;
17778
17838
  const { fill = arcAttribute.fill, stroke = arcAttribute.stroke, x: originX = arcAttribute.x, y: originY = arcAttribute.y, fillStrokeOrder = arcAttribute.fillStrokeOrder } = arc.attribute;
17779
17839
  const data = this.valid(arc, arcAttribute, fillCb, strokeCb);
17780
17840
  if (!data) {
@@ -17803,35 +17863,13 @@ let DefaultCanvasArcRender = class DefaultCanvasArcRender extends BaseRender {
17803
17863
  beforeRenderContribitionsRuned = true;
17804
17864
  context.setShadowBlendStyle && context.setShadowBlendStyle(arc, arc.attribute, arcAttribute);
17805
17865
  this.beforeRenderStep(arc, context, x, y, doFill, doStroke, fVisible, sVisible, arcAttribute, drawContext, fillCb, strokeCb);
17806
- const _runFill = () => {
17807
- if (doFill) {
17808
- if (fillCb) {
17809
- fillCb(context, arc.attribute, arcAttribute);
17810
- }
17811
- else if (fVisible) {
17812
- context.setCommonStyle(arc, arc.attribute, originX - x, originY - y, arcAttribute);
17813
- context.fill();
17814
- }
17815
- }
17816
- };
17817
- const _runStroke = () => {
17818
- if (doStroke && isFullStroke) {
17819
- if (strokeCb) {
17820
- strokeCb(context, arc.attribute, arcAttribute);
17821
- }
17822
- else if (sVisible) {
17823
- context.setStrokeStyle(arc, arc.attribute, originX - x, originY - y, arcAttribute);
17824
- context.stroke();
17825
- }
17826
- }
17827
- };
17828
17866
  if (!fillStrokeOrder) {
17829
- _runFill();
17830
- _runStroke();
17867
+ this._runFill(arc, context, x, y, arcAttribute, doFill, fVisible, originX, originY, fillCb);
17868
+ this._runStroke(arc, context, x, y, arcAttribute, doStroke, sVisible, strokeCb);
17831
17869
  }
17832
17870
  else {
17833
- _runStroke();
17834
- _runFill();
17871
+ this._runStroke(arc, context, x, y, arcAttribute, doStroke, sVisible, strokeCb);
17872
+ this._runFill(arc, context, x, y, arcAttribute, doFill, fVisible, originX, originY, fillCb);
17835
17873
  }
17836
17874
  }
17837
17875
  if (!isFullStroke && doStroke) {
@@ -17900,9 +17938,29 @@ let DefaultCanvasArcRender = class DefaultCanvasArcRender extends BaseRender {
17900
17938
  fill.endAngle += conicalOffset;
17901
17939
  }
17902
17940
  }
17941
+ _runFill(arc, context, x, y, arcAttribute, doFill, fVisible, originX, originY, fillCb) {
17942
+ if (doFill) {
17943
+ if (fillCb) {
17944
+ fillCb(context, arc.attribute, arcAttribute);
17945
+ }
17946
+ else if (fVisible) {
17947
+ context.setCommonStyle(arc, arc.attribute, originX - x, originY - y, arcAttribute);
17948
+ context.fill();
17949
+ }
17950
+ }
17951
+ }
17952
+ _runStroke(arc, context, x, y, arcAttribute, doStroke, sVisible, strokeCb) {
17953
+ if (doStroke) {
17954
+ if (strokeCb) ;
17955
+ else if (sVisible) {
17956
+ context.setStrokeStyle(arc, arc.attribute, x, y, arcAttribute);
17957
+ context.stroke();
17958
+ }
17959
+ }
17960
+ }
17903
17961
  draw(arc, renderService, drawContext, params) {
17904
17962
  const arcAttribute = getTheme(arc, params === null || params === void 0 ? void 0 : params.theme).arc;
17905
- this._draw(arc, arcAttribute, false, drawContext, params);
17963
+ this._draw(arc, arcAttribute, false, drawContext, params, arcAttribute);
17906
17964
  }
17907
17965
  };
17908
17966
  DefaultCanvasArcRender = __decorate([
@@ -18923,9 +18981,8 @@ let DefaultCanvasRectRender = class DefaultCanvasRectRender extends BaseRender {
18923
18981
  ];
18924
18982
  this.init(rectRenderContribitions);
18925
18983
  }
18926
- drawShape(rect, context, x, y, drawContext, params, fillCb, strokeCb) {
18927
- var _a;
18928
- const rectAttribute = (_a = this.tempTheme) !== null && _a !== void 0 ? _a : getTheme(rect, params === null || params === void 0 ? void 0 : params.theme).rect;
18984
+ drawShape(rect, context, x, y, drawContext, params, fillCb, strokeCb, rectAttribute) {
18985
+ rectAttribute = rectAttribute !== null && rectAttribute !== void 0 ? rectAttribute : getTheme(rect, params === null || params === void 0 ? void 0 : params.theme).rect;
18929
18986
  const { fill = rectAttribute.fill, background, stroke = rectAttribute.stroke, cornerRadius = rectAttribute.cornerRadius, cornerType = rectAttribute.cornerType, opacity = rectAttribute.opacity, fillOpacity = rectAttribute.fillOpacity, lineWidth = rectAttribute.lineWidth, strokeOpacity = rectAttribute.strokeOpacity, visible = rectAttribute.visible, x1, y1, x: originX = rectAttribute.x, y: originY = rectAttribute.y, fillStrokeOrder = rectAttribute.fillStrokeOrder } = rect.attribute;
18930
18987
  let { width, height } = rect.attribute;
18931
18988
  width = (width !== null && width !== void 0 ? width : x1 - originX) || 0;
@@ -18957,43 +19014,41 @@ let DefaultCanvasRectRender = class DefaultCanvasRectRender extends BaseRender {
18957
19014
  };
18958
19015
  context.setShadowBlendStyle && context.setShadowBlendStyle(rect, rect.attribute, rectAttribute);
18959
19016
  this.beforeRenderStep(rect, context, x, y, doFill, doStroke, fVisible, sVisible, rectAttribute, drawContext, fillCb, strokeCb, doFillOrStroke);
18960
- const _runFill = () => {
18961
- if (doFillOrStroke.doFill) {
18962
- if (fillCb) {
18963
- fillCb(context, rect.attribute, rectAttribute);
18964
- }
18965
- else if (fVisible) {
18966
- context.setCommonStyle(rect, rect.attribute, originX - x, originY - y, rectAttribute);
18967
- context.fill();
18968
- }
18969
- }
18970
- };
18971
- const _runStroke = () => {
18972
- if (doFillOrStroke.doStroke) {
18973
- if (strokeCb) {
18974
- strokeCb(context, rect.attribute, rectAttribute);
18975
- }
18976
- else if (sVisible) {
18977
- context.setStrokeStyle(rect, rect.attribute, originX - x, originY - y, rectAttribute);
18978
- context.stroke();
18979
- }
18980
- }
18981
- };
18982
19017
  if (!fillStrokeOrder) {
18983
- _runFill();
18984
- _runStroke();
19018
+ this._runFill(rect, context, x, y, rectAttribute, doFillOrStroke, fVisible, originX, originY, fillCb);
19019
+ this._runStroke(rect, context, x, y, rectAttribute, doFillOrStroke, sVisible, originX, originY, strokeCb);
18985
19020
  }
18986
19021
  else {
18987
- _runStroke();
18988
- _runFill();
19022
+ this._runStroke(rect, context, x, y, rectAttribute, doFillOrStroke, sVisible, originX, originY, strokeCb);
19023
+ this._runFill(rect, context, x, y, rectAttribute, doFillOrStroke, fVisible, originX, originY, fillCb);
18989
19024
  }
18990
19025
  this.afterRenderStep(rect, context, x, y, doFill, doStroke, fVisible, sVisible, rectAttribute, drawContext, fillCb, strokeCb);
18991
19026
  }
19027
+ _runFill(rect, context, x, y, rectAttribute, doFillOrStroke, fVisible, originX, originY, fillCb) {
19028
+ if (doFillOrStroke.doFill) {
19029
+ if (fillCb) {
19030
+ fillCb(context, rect.attribute, rectAttribute);
19031
+ }
19032
+ else if (fVisible) {
19033
+ context.setCommonStyle(rect, rect.attribute, originX - x, originY - y, rectAttribute);
19034
+ context.fill();
19035
+ }
19036
+ }
19037
+ }
19038
+ _runStroke(rect, context, x, y, rectAttribute, doFillOrStroke, sVisible, originX, originY, strokeCb) {
19039
+ if (doFillOrStroke.doStroke) {
19040
+ if (strokeCb) {
19041
+ strokeCb(context, rect.attribute, rectAttribute);
19042
+ }
19043
+ else if (sVisible) {
19044
+ context.setStrokeStyle(rect, rect.attribute, originX - x, originY - y, rectAttribute);
19045
+ context.stroke();
19046
+ }
19047
+ }
19048
+ }
18992
19049
  draw(rect, renderService, drawContext, params) {
18993
19050
  const rectAttribute = getTheme(rect, params === null || params === void 0 ? void 0 : params.theme).rect;
18994
- this.tempTheme = rectAttribute;
18995
- this._draw(rect, rectAttribute, false, drawContext, params);
18996
- this.tempTheme = null;
19051
+ this._draw(rect, rectAttribute, false, drawContext, params, rectAttribute);
18997
19052
  }
18998
19053
  };
18999
19054
  DefaultCanvasRectRender = __decorate([
@@ -19016,9 +19071,9 @@ let DefaultCanvasSymbolRender = class DefaultCanvasSymbolRender extends BaseRend
19016
19071
  ];
19017
19072
  this.init(symbolRenderContribitions);
19018
19073
  }
19019
- drawShape(symbol, context, x, y, drawContext, params, fillCb, strokeCb) {
19074
+ drawShape(symbol, context, x, y, drawContext, params, fillCb, strokeCb, symbolAttribute) {
19020
19075
  var _a;
19021
- const symbolAttribute = getTheme(symbol, params === null || params === void 0 ? void 0 : params.theme).symbol;
19076
+ symbolAttribute = symbolAttribute !== null && symbolAttribute !== void 0 ? symbolAttribute : getTheme(symbol, params === null || params === void 0 ? void 0 : params.theme).symbol;
19022
19077
  const { size = symbolAttribute.size, x: originX = symbolAttribute.x, y: originY = symbolAttribute.y, scaleX = symbolAttribute.scaleX, scaleY = symbolAttribute.scaleY, fillStrokeOrder = symbolAttribute.fillStrokeOrder, clipRange = symbolAttribute.clipRange } = symbol.attribute;
19023
19078
  const data = this.valid(symbol, symbolAttribute, fillCb, strokeCb);
19024
19079
  if (!data) {
@@ -19092,38 +19147,38 @@ let DefaultCanvasSymbolRender = class DefaultCanvasSymbolRender extends BaseRend
19092
19147
  context.camera = camera;
19093
19148
  context.setShadowBlendStyle && context.setShadowBlendStyle(symbol, symbol.attribute, symbolAttribute);
19094
19149
  this.beforeRenderStep(symbol, context, x, y, doFill, doStroke, fVisible, sVisible, symbolAttribute, drawContext, fillCb, strokeCb);
19095
- const _runFill = () => {
19096
- if (doFill && !parsedPath.isSvg) {
19097
- if (fillCb) {
19098
- fillCb(context, symbol.attribute, symbolAttribute);
19099
- }
19100
- else if (fVisible) {
19101
- context.setCommonStyle(symbol, symbol.attribute, originX - x, originY - y, symbolAttribute);
19102
- context.fill();
19103
- }
19104
- }
19105
- };
19106
- const _runStroke = () => {
19107
- if (doStroke && !parsedPath.isSvg) {
19108
- if (strokeCb) {
19109
- strokeCb(context, symbol.attribute, symbolAttribute);
19110
- }
19111
- else if (sVisible && clipRange >= 1) {
19112
- context.setStrokeStyle(symbol, symbol.attribute, (originX - x) / scaleX, (originY - y) / scaleY, symbolAttribute);
19113
- context.stroke();
19114
- }
19115
- }
19116
- };
19117
19150
  if (!fillStrokeOrder) {
19118
- _runFill();
19119
- _runStroke();
19151
+ this._runFill(symbol, context, x, y, symbolAttribute, doFill, fVisible, originX, originY, parsedPath, fillCb);
19152
+ this._runStroke(symbol, context, x, y, symbolAttribute, doStroke, sVisible, originX, originY, parsedPath, clipRange, scaleX, scaleY, strokeCb);
19120
19153
  }
19121
19154
  else {
19122
- _runStroke();
19123
- _runFill();
19155
+ this._runStroke(symbol, context, x, y, symbolAttribute, doStroke, sVisible, originX, originY, parsedPath, clipRange, scaleX, scaleY, strokeCb);
19156
+ this._runFill(symbol, context, x, y, symbolAttribute, doFill, fVisible, originX, originY, parsedPath, fillCb);
19124
19157
  }
19125
19158
  this.afterRenderStep(symbol, context, x, y, doFill, doStroke, fVisible, sVisible, symbolAttribute, drawContext, fillCb, strokeCb);
19126
19159
  }
19160
+ _runFill(symbol, context, x, y, symbolAttribute, doFill, fVisible, originX, originY, parsedPath, fillCb) {
19161
+ if (doFill && !parsedPath.isSvg) {
19162
+ if (fillCb) {
19163
+ fillCb(context, symbol.attribute, symbolAttribute);
19164
+ }
19165
+ else if (fVisible) {
19166
+ context.setCommonStyle(symbol, symbol.attribute, originX - x, originY - y, symbolAttribute);
19167
+ context.fill();
19168
+ }
19169
+ }
19170
+ }
19171
+ _runStroke(symbol, context, x, y, symbolAttribute, doStroke, sVisible, originX, originY, parsedPath, clipRange, scaleX, scaleY, strokeCb) {
19172
+ if (doStroke && !parsedPath.isSvg) {
19173
+ if (strokeCb) {
19174
+ strokeCb(context, symbol.attribute, symbolAttribute);
19175
+ }
19176
+ else if (sVisible && clipRange >= 1) {
19177
+ context.setStrokeStyle(symbol, symbol.attribute, (originX - x) / scaleX, (originY - y) / scaleY, symbolAttribute);
19178
+ context.stroke();
19179
+ }
19180
+ }
19181
+ }
19127
19182
  draw(symbol, renderService, drawContext, params) {
19128
19183
  const symbolAttribute = getTheme(symbol, params === null || params === void 0 ? void 0 : params.theme).symbol;
19129
19184
  this._draw(symbol, symbolAttribute, false, drawContext, params);
@@ -19619,9 +19674,13 @@ let DefaultCanvasGroupRender = class DefaultCanvasGroupRender {
19619
19674
  this.groupRenderContribitions = groupRenderContribitions;
19620
19675
  this.numberType = GROUP_NUMBER_TYPE;
19621
19676
  }
19622
- drawShape(group, context, x, y, drawContext, params, fillCb, strokeCb) {
19623
- const groupAttribute = getTheme(group, params === null || params === void 0 ? void 0 : params.theme).group;
19624
- const { fill = groupAttribute.fill, background, stroke = groupAttribute.stroke, opacity = groupAttribute.opacity, width = groupAttribute.width, height = groupAttribute.height, clip = groupAttribute.clip, fillOpacity = groupAttribute.fillOpacity, strokeOpacity = groupAttribute.strokeOpacity, cornerRadius = groupAttribute.cornerRadius, path = groupAttribute.path, lineWidth = groupAttribute.lineWidth, visible = groupAttribute.visible, fillStrokeOrder = groupAttribute.fillStrokeOrder, cornerType = groupAttribute.cornerType, x: originX = groupAttribute.x, y: originY = groupAttribute.y } = group.attribute;
19677
+ drawShape(group, context, x, y, drawContext, params, fillCb, strokeCb, groupAttribute) {
19678
+ const { clip, fill, stroke, background } = group.attribute;
19679
+ if (!(clip || fill || stroke || background)) {
19680
+ return;
19681
+ }
19682
+ groupAttribute = groupAttribute !== null && groupAttribute !== void 0 ? groupAttribute : getTheme(group, params === null || params === void 0 ? void 0 : params.theme).group;
19683
+ const { opacity = groupAttribute.opacity, width = groupAttribute.width, height = groupAttribute.height, fillOpacity = groupAttribute.fillOpacity, strokeOpacity = groupAttribute.strokeOpacity, cornerRadius = groupAttribute.cornerRadius, path = groupAttribute.path, lineWidth = groupAttribute.lineWidth, visible = groupAttribute.visible, fillStrokeOrder = groupAttribute.fillStrokeOrder, cornerType = groupAttribute.cornerType, x: originX = groupAttribute.x, y: originY = groupAttribute.y } = group.attribute;
19625
19684
  const fVisible = rectFillVisible(opacity, fillOpacity, width, height, fill);
19626
19685
  const sVisible = rectStrokeVisible(opacity, strokeOpacity, width, height);
19627
19686
  const doFill = runFill(fill, background);
@@ -19714,14 +19773,16 @@ let DefaultCanvasGroupRender = class DefaultCanvasGroupRender {
19714
19773
  });
19715
19774
  }
19716
19775
  draw(group, renderService, drawContext, params) {
19776
+ var _a;
19717
19777
  const { context } = drawContext;
19718
19778
  if (!context) {
19719
19779
  return;
19720
19780
  }
19721
- const { clip, baseOpacity = 1, drawMode, x, y, width, height } = group.attribute;
19781
+ const { clip, baseOpacity = 1, drawMode } = group.attribute;
19722
19782
  const lastNativeContext = context.nativeContext;
19723
19783
  const lastNativeCanvas = context.canvas.nativeCanvas;
19724
19784
  if (drawMode > 0) {
19785
+ const { x, y, width, height } = group.attribute;
19725
19786
  const canvas = context.canvas;
19726
19787
  const newCanvas = vglobal.createCanvas({ width: canvas.width, height: canvas.height, dpr: 1 });
19727
19788
  const newContext = newCanvas.getContext('2d');
@@ -19747,10 +19808,10 @@ let DefaultCanvasGroupRender = class DefaultCanvasGroupRender {
19747
19808
  }
19748
19809
  const baseGlobalAlpha = context.baseGlobalAlpha;
19749
19810
  context.baseGlobalAlpha *= baseOpacity;
19750
- const groupAttribute = getTheme(group, params === null || params === void 0 ? void 0 : params.theme).group;
19751
19811
  const lastModelMatrix = context.modelMatrix;
19752
19812
  const camera = context.camera;
19753
19813
  if (camera) {
19814
+ const groupAttribute = getTheme(group, params === null || params === void 0 ? void 0 : params.theme).group;
19754
19815
  const nextModelMatrix = mat4Allocate.allocate();
19755
19816
  const modelMatrix = mat4Allocate.allocate();
19756
19817
  getModelMatrix(modelMatrix, group, groupAttribute);
@@ -19772,15 +19833,15 @@ let DefaultCanvasGroupRender = class DefaultCanvasGroupRender {
19772
19833
  this.drawShape(group, context, 0, 0, drawContext, params, () => false, () => false);
19773
19834
  }
19774
19835
  else {
19775
- this.drawShape(group, context, 0, 0, drawContext);
19836
+ this.drawShape(group, context, 0, 0, drawContext, null, null, null);
19776
19837
  }
19777
- const { scrollX = groupAttribute.scrollX, scrollY = groupAttribute.scrollY } = group.attribute;
19838
+ const { scrollX, scrollY } = group.attribute;
19778
19839
  if (scrollX || scrollY) {
19779
19840
  context.translate(scrollX, scrollY);
19780
19841
  }
19781
19842
  let p;
19782
- if (params && params.drawingCb) {
19783
- p = params.drawingCb();
19843
+ if (params && params.renderInGroup) {
19844
+ p = params.renderInGroup(params.skipDraw, group, drawContext, (_a = params.renderInGroupParams) === null || _a === void 0 ? void 0 : _a.nextM);
19784
19845
  }
19785
19846
  if (context.modelMatrix !== lastModelMatrix) {
19786
19847
  mat4Allocate.free(context.modelMatrix);
@@ -19788,6 +19849,7 @@ let DefaultCanvasGroupRender = class DefaultCanvasGroupRender {
19788
19849
  context.modelMatrix = lastModelMatrix;
19789
19850
  context.baseGlobalAlpha = baseGlobalAlpha;
19790
19851
  if (drawMode > 0) {
19852
+ const { x, y, width, height } = group.attribute;
19791
19853
  const newContext = context.nativeContext;
19792
19854
  const newCanvas = context.canvas.nativeCanvas;
19793
19855
  lastNativeContext.save();
@@ -20169,6 +20231,11 @@ let CommonDrawItemInterceptorContribution = class CommonDrawItemInterceptorContr
20169
20231
  ];
20170
20232
  }
20171
20233
  afterDrawItem(graphic, renderService, drawContext, drawContribution, params) {
20234
+ if ((!graphic.in3dMode || drawContext.in3dInterceptor) &&
20235
+ !graphic.shadowRoot &&
20236
+ !(graphic.baseGraphic || graphic.attribute.globalZIndex || graphic.interactiveGraphic)) {
20237
+ return false;
20238
+ }
20172
20239
  for (let i = 0; i < this.interceptors.length; i++) {
20173
20240
  if (this.interceptors[i].afterDrawItem &&
20174
20241
  this.interceptors[i].afterDrawItem(graphic, renderService, drawContext, drawContribution, params)) {
@@ -20871,6 +20938,32 @@ let DefaultDrawContribution = class DefaultDrawContribution {
20871
20938
  constructor(contributions, drawItemInterceptorContributions) {
20872
20939
  this.contributions = contributions;
20873
20940
  this.drawItemInterceptorContributions = drawItemInterceptorContributions;
20941
+ this._renderInGroup = (skipSort, group, drawContext, nextM) => {
20942
+ var _a;
20943
+ skipSort
20944
+ ? group.forEachChildren((item) => {
20945
+ if (drawContext.break) {
20946
+ return;
20947
+ }
20948
+ if (item.isContainer) {
20949
+ this.renderGroup(item, drawContext, nextM);
20950
+ }
20951
+ else {
20952
+ this.renderItem(item, drawContext);
20953
+ }
20954
+ })
20955
+ : foreach(group, DefaultAttribute.zIndex, (item) => {
20956
+ if (drawContext.break) {
20957
+ return;
20958
+ }
20959
+ if (item.isContainer) {
20960
+ this.renderGroup(item, drawContext, nextM);
20961
+ }
20962
+ else {
20963
+ this.renderItem(item, drawContext);
20964
+ }
20965
+ }, false, !!((_a = drawContext.context) === null || _a === void 0 ? void 0 : _a.camera));
20966
+ };
20874
20967
  this.currentRenderMap = new Map();
20875
20968
  this.defaultRenderMap = new Map();
20876
20969
  this.styleRenderMap = new Map();
@@ -20931,10 +21024,10 @@ let DefaultDrawContribution = class DefaultDrawContribution {
20931
21024
  dirtyBounds.y2 = Math.ceil(dirtyBounds.y2 * context.dpr) / context.dpr;
20932
21025
  }
20933
21026
  this.backupDirtyBounds.copy(dirtyBounds);
20934
- context.inuse = true;
21027
+ context.save();
21028
+ context.reset(false);
20935
21029
  context.setClearMatrix(transMatrix.a, transMatrix.b, transMatrix.c, transMatrix.d, transMatrix.e, transMatrix.f);
20936
- context.clearMatrix();
20937
- context.setTransformForCurrent(true);
21030
+ context.clearMatrix(false);
20938
21031
  context.translate(viewBox.x1, viewBox.y1, true);
20939
21032
  context.beginPath();
20940
21033
  context.rect(dirtyBounds.x1, dirtyBounds.y1, dirtyBounds.width(), dirtyBounds.height());
@@ -20944,7 +21037,6 @@ let DefaultDrawContribution = class DefaultDrawContribution {
20944
21037
  this.backupDirtyBounds.setValue(-Infinity, -Infinity, Infinity, Infinity);
20945
21038
  }
20946
21039
  this.clearScreen(renderService, context, drawContext);
20947
- context.save();
20948
21040
  renderService.renderTreeRoots
20949
21041
  .sort((a, b) => {
20950
21042
  var _a, _b;
@@ -20956,8 +21048,6 @@ let DefaultDrawContribution = class DefaultDrawContribution {
20956
21048
  : this.renderItem(group, drawContext);
20957
21049
  });
20958
21050
  context.restore();
20959
- context.setClearMatrix(1, 0, 0, 1, 0, 0);
20960
- context.inuse = false;
20961
21051
  context.draw();
20962
21052
  }
20963
21053
  doRegister() {
@@ -20998,33 +21088,13 @@ let DefaultDrawContribution = class DefaultDrawContribution {
20998
21088
  nextM = matrixAllocate.allocateByObj(parentMatrix).multiply(gm.a, gm.b, gm.c, gm.d, gm.e, gm.f);
20999
21089
  this.dirtyBounds.copy(this.backupDirtyBounds).transformWithMatrix(nextM.getInverse());
21000
21090
  }
21091
+ drawContext.isGroupScroll = !!(group.attribute.scrollX || group.attribute.scrollY);
21001
21092
  this.renderItem(group, drawContext, {
21002
- drawingCb: () => {
21003
- var _a;
21004
- skipSort
21005
- ? group.forEachChildren((item) => {
21006
- if (drawContext.break) {
21007
- return;
21008
- }
21009
- if (item.isContainer) {
21010
- this.renderGroup(item, drawContext, nextM);
21011
- }
21012
- else {
21013
- this.renderItem(item, drawContext);
21014
- }
21015
- })
21016
- : foreach(group, DefaultAttribute.zIndex, (item) => {
21017
- if (drawContext.break) {
21018
- return;
21019
- }
21020
- if (item.isContainer) {
21021
- this.renderGroup(item, drawContext, nextM);
21022
- }
21023
- else {
21024
- this.renderItem(item, drawContext);
21025
- }
21026
- }, false, !!((_a = drawContext.context) === null || _a === void 0 ? void 0 : _a.camera));
21027
- }
21093
+ renderInGroupParams: {
21094
+ skipSort,
21095
+ nextM
21096
+ },
21097
+ renderInGroup: this._renderInGroup
21028
21098
  });
21029
21099
  if (this.useDirtyBounds) {
21030
21100
  this.dirtyBounds.copy(tempBounds);
@@ -21093,17 +21163,15 @@ let DefaultDrawContribution = class DefaultDrawContribution {
21093
21163
  if (!renderer) {
21094
21164
  return;
21095
21165
  }
21096
- let retrans = this.scrollMatrix && (this.scrollMatrix.e !== 0 || this.scrollMatrix.f !== 0);
21166
+ let retrans = false;
21097
21167
  let tempBounds;
21098
- if (graphic.parent) {
21168
+ if (drawContext.isGroupScroll) {
21099
21169
  const { scrollX = 0, scrollY = 0 } = graphic.parent.attribute;
21100
- if (!!(scrollX || scrollY)) {
21101
- retrans = true;
21102
- if (!this.scrollMatrix) {
21103
- this.scrollMatrix = matrixAllocate.allocate(1, 0, 0, 1, 0, 0);
21104
- }
21105
- this.scrollMatrix.translate(-scrollX, -scrollY);
21170
+ retrans = true;
21171
+ if (!this.scrollMatrix) {
21172
+ this.scrollMatrix = matrixAllocate.allocate(1, 0, 0, 1, 0, 0);
21106
21173
  }
21174
+ this.scrollMatrix.translate(-scrollX, -scrollY);
21107
21175
  }
21108
21176
  if (retrans) {
21109
21177
  tempBounds = this.dirtyBounds.clone().transformWithMatrix(this.scrollMatrix);
@@ -21923,7 +21991,7 @@ class Stage extends Group {
21923
21991
  return this._eventSystem;
21924
21992
  }
21925
21993
  constructor(params = {}) {
21926
- var _a;
21994
+ var _a, _b;
21927
21995
  super({});
21928
21996
  this.tickedBeforeRender = true;
21929
21997
  this._onVisibleChange = (visible) => {
@@ -21955,12 +22023,8 @@ class Stage extends Group {
21955
22023
  this.tickedBeforeRender = false;
21956
22024
  };
21957
22025
  this.afterTickCb = () => {
21958
- var _a;
21959
22026
  this.tickedBeforeRender = true;
21960
- if (((_a = this.params.optimize) === null || _a === void 0 ? void 0 : _a.tickRenderMode) === 'performance') ;
21961
- else {
21962
- this.state !== 'rendering' && this.render();
21963
- }
22027
+ this.state !== 'rendering' && this.render();
21964
22028
  };
21965
22029
  this.params = params;
21966
22030
  this.theme = new Theme();
@@ -22019,7 +22083,7 @@ class Stage extends Group {
22019
22083
  this.supportInteractiveLayer = params.interactiveLayer !== false;
22020
22084
  if (!params.optimize) {
22021
22085
  params.optimize = {
22022
- animateMode: 'performance'
22086
+ tickRenderMode: 'performance'
22023
22087
  };
22024
22088
  }
22025
22089
  this.optmize(params.optimize);
@@ -22027,10 +22091,15 @@ class Stage extends Group {
22027
22091
  this.setAttributes({ background: this._background });
22028
22092
  }
22029
22093
  this.initAnimate(params);
22094
+ this.rafId = (_b = params.rafId) !== null && _b !== void 0 ? _b : Math.floor(Math.random() * 6);
22030
22095
  }
22031
22096
  initAnimate(params) {
22097
+ var _a;
22032
22098
  if (this.createTicker && this.createTimeline) {
22033
22099
  this.ticker = params.ticker || this.createTicker(this);
22100
+ if (((_a = this.params.optimize) === null || _a === void 0 ? void 0 : _a.tickRenderMode) !== 'effect') {
22101
+ this.ticker.setFPS(30);
22102
+ }
22034
22103
  this.timeline = this.createTimeline();
22035
22104
  this.ticker.addTimeline(this.timeline);
22036
22105
  this.ticker.on('tick', this.afterTickCb);
@@ -22390,7 +22459,7 @@ class Stage extends Group {
22390
22459
  }
22391
22460
  if (!this.willNextFrameRender) {
22392
22461
  this.willNextFrameRender = true;
22393
- this.global.getRequestAnimationFrame()(() => {
22462
+ this.global.getSpecifiedRequestAnimationFrame(this.rafId)(() => {
22394
22463
  this._doRenderInThisFrame(), (this.willNextFrameRender = false);
22395
22464
  });
22396
22465
  }
@@ -22698,6 +22767,11 @@ let EmptyContext2d = class EmptyContext2d {
22698
22767
  this.resetTransform();
22699
22768
  this.restore();
22700
22769
  }
22770
+ reset() {
22771
+ this.matrix.setValue(1, 0, 0, 1, 0, 0);
22772
+ this.applyedMatrix = new Matrix(1, 0, 0, 1, 0, 0);
22773
+ this.stack.length = 0;
22774
+ }
22701
22775
  restore() {
22702
22776
  if (this.stack.length > 0) {
22703
22777
  matrixAllocate.free(this.matrix);
@@ -24383,30 +24457,6 @@ const splitPath = (path, count) => {
24383
24457
  return res;
24384
24458
  };
24385
24459
 
24386
- class PerformanceRAF {
24387
- constructor() {
24388
- this.nextAnimationFrameCbs = [];
24389
- this.runAnimationFrame = (time) => {
24390
- const cbs = this.nextAnimationFrameCbs;
24391
- this.nextAnimationFrameCbs = [];
24392
- for (let i = 0; i < cbs.length; i++) {
24393
- cbs[i](time);
24394
- }
24395
- };
24396
- this.tryRunAnimationFrameNextFrame = () => {
24397
- if (!(this.nextAnimationFrameCbs && this.nextAnimationFrameCbs.length === 1)) {
24398
- return;
24399
- }
24400
- vglobal.getRequestAnimationFrame()(this.runAnimationFrame);
24401
- };
24402
- }
24403
- addAnimationFrameCb(callback) {
24404
- this.nextAnimationFrameCbs.push(callback);
24405
- this.tryRunAnimationFrameNextFrame();
24406
- return this.nextAnimationFrameCbs.length - 1;
24407
- }
24408
- }
24409
-
24410
24460
  function getDefaultCharacterConfig(attribute) {
24411
24461
  const { fill = 'black', stroke = false, fontWeight = 'normal', lineHeight, fontFamily = 'Arial', textAlign } = attribute;
24412
24462
  let { fontSize = 12 } = attribute;
@@ -33,6 +33,7 @@ export declare class EmptyContext2d implements IContext2d {
33
33
  get currentMatrix(): Matrix;
34
34
  cloneMatrix(m: Matrix): IMatrix;
35
35
  clear(): void;
36
+ reset(): void;
36
37
  restore(): void;
37
38
  highPerformanceRestore(): void;
38
39
  rotate(rad: number, setTransform?: boolean): void;
@@ -49,6 +49,10 @@ let EmptyContext2d = class {
49
49
  clear() {
50
50
  this.save(), this.resetTransform(), this.restore();
51
51
  }
52
+ reset() {
53
+ this.matrix.setValue(1, 0, 0, 1, 0, 0), this.applyedMatrix = new Matrix(1, 0, 0, 1, 0, 0),
54
+ this.stack.length = 0;
55
+ }
52
56
  restore() {
53
57
  this.stack.length > 0 && (matrixAllocate.free(this.matrix), this.matrix = this.stack.pop(),
54
58
  this.setTransformForCurrent());