@visactor/vrender-core 0.16.0-alpha.0 → 0.16.0-alpha.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.
Files changed (155) hide show
  1. package/cjs/animate/animate.js +8 -2
  2. package/cjs/animate/animate.js.map +1 -1
  3. package/cjs/core/constants.d.ts +3 -0
  4. package/cjs/core/constants.js +4 -2
  5. package/cjs/core/constants.js.map +1 -1
  6. package/cjs/core/contributions/layerHandler/canvas2d-contribution.d.ts +3 -1
  7. package/cjs/core/contributions/layerHandler/canvas2d-contribution.js +1 -1
  8. package/cjs/core/contributions/layerHandler/canvas2d-contribution.js.map +1 -1
  9. package/cjs/core/contributions/layerHandler/empty-contribution.d.ts +24 -0
  10. package/cjs/core/contributions/layerHandler/empty-contribution.js +57 -0
  11. package/cjs/core/contributions/layerHandler/empty-contribution.js.map +1 -0
  12. package/cjs/core/contributions/layerHandler/modules.js +4 -2
  13. package/cjs/core/contributions/layerHandler/modules.js.map +1 -1
  14. package/cjs/core/contributions/layerHandler/offscreen2d-contribution.d.ts +3 -1
  15. package/cjs/core/contributions/layerHandler/offscreen2d-contribution.js +1 -1
  16. package/cjs/core/contributions/layerHandler/offscreen2d-contribution.js.map +1 -1
  17. package/cjs/core/layer-service.d.ts +5 -2
  18. package/cjs/core/layer-service.js +22 -3
  19. package/cjs/core/layer-service.js.map +1 -1
  20. package/cjs/core/layer.d.ts +4 -3
  21. package/cjs/core/layer.js +13 -8
  22. package/cjs/core/layer.js.map +1 -1
  23. package/cjs/core/stage.d.ts +8 -7
  24. package/cjs/core/stage.js +30 -36
  25. package/cjs/core/stage.js.map +1 -1
  26. package/cjs/graphic/config.d.ts +2 -1
  27. package/cjs/graphic/config.js +11 -6
  28. package/cjs/graphic/config.js.map +1 -1
  29. package/cjs/graphic/graphic-service/graphic-service.d.ts +2 -0
  30. package/cjs/graphic/graphic-service/graphic-service.js +4 -0
  31. package/cjs/graphic/graphic-service/graphic-service.js.map +1 -1
  32. package/cjs/graphic/graphic.js +3 -2
  33. package/cjs/graphic/graphic.js.map +1 -1
  34. package/cjs/graphic/node-tree.d.ts +1 -1
  35. package/cjs/graphic/node-tree.js +2 -2
  36. package/cjs/graphic/node-tree.js.map +1 -1
  37. package/cjs/graphic/text.d.ts +12 -0
  38. package/cjs/graphic/text.js +31 -5
  39. package/cjs/graphic/text.js.map +1 -1
  40. package/cjs/interface/core.d.ts +2 -1
  41. package/cjs/interface/core.js.map +1 -1
  42. package/cjs/interface/graphic/text.d.ts +3 -0
  43. package/cjs/interface/graphic/text.js.map +1 -1
  44. package/cjs/interface/graphic-service.d.ts +2 -0
  45. package/cjs/interface/graphic-service.js.map +1 -1
  46. package/cjs/interface/graphic.d.ts +6 -1
  47. package/cjs/interface/graphic.js.map +1 -1
  48. package/cjs/interface/layer.d.ts +9 -2
  49. package/cjs/interface/layer.js.map +1 -1
  50. package/cjs/interface/picker.d.ts +5 -5
  51. package/cjs/interface/picker.js.map +1 -1
  52. package/cjs/interface/render.d.ts +1 -1
  53. package/cjs/interface/render.js.map +1 -1
  54. package/cjs/interface/stage.d.ts +3 -8
  55. package/cjs/interface/stage.js.map +1 -1
  56. package/cjs/picker/global-picker-service.d.ts +1 -1
  57. package/cjs/picker/global-picker-service.js +14 -4
  58. package/cjs/picker/global-picker-service.js.map +1 -1
  59. package/cjs/picker/pick-interceptor.d.ts +3 -3
  60. package/cjs/picker/pick-interceptor.js +4 -4
  61. package/cjs/picker/pick-interceptor.js.map +1 -1
  62. package/cjs/picker/picker-service.d.ts +1 -1
  63. package/cjs/picker/picker-service.js +5 -4
  64. package/cjs/picker/picker-service.js.map +1 -1
  65. package/cjs/plugins/builtin-plugin/html-attribute-plugin.d.ts +1 -0
  66. package/cjs/plugins/builtin-plugin/html-attribute-plugin.js +7 -0
  67. package/cjs/plugins/builtin-plugin/html-attribute-plugin.js.map +1 -1
  68. package/cjs/render/contributions/render/draw-interceptor.d.ts +10 -0
  69. package/cjs/render/contributions/render/draw-interceptor.js +63 -1
  70. package/cjs/render/contributions/render/draw-interceptor.js.map +1 -1
  71. package/cjs/render/contributions/render/module.js +4 -0
  72. package/cjs/render/contributions/render/module.js.map +1 -1
  73. package/cjs/render/contributions/render/text-render.js +9 -2
  74. package/cjs/render/contributions/render/text-render.js.map +1 -1
  75. package/cjs/render/contributions/render/utils.js +1 -1
  76. package/cjs/render/contributions/render/utils.js.map +1 -1
  77. package/dist/index.js +351 -66
  78. package/dist/index.min.js +1 -1
  79. package/es/animate/animate.js +8 -2
  80. package/es/animate/animate.js.map +1 -1
  81. package/es/core/constants.d.ts +3 -0
  82. package/es/core/constants.js +6 -0
  83. package/es/core/constants.js.map +1 -1
  84. package/es/core/contributions/layerHandler/canvas2d-contribution.d.ts +3 -1
  85. package/es/core/contributions/layerHandler/canvas2d-contribution.js +1 -1
  86. package/es/core/contributions/layerHandler/canvas2d-contribution.js.map +1 -1
  87. package/es/core/contributions/layerHandler/empty-contribution.d.ts +24 -0
  88. package/es/core/contributions/layerHandler/empty-contribution.js +53 -0
  89. package/es/core/contributions/layerHandler/empty-contribution.js.map +1 -0
  90. package/es/core/contributions/layerHandler/modules.js +6 -2
  91. package/es/core/contributions/layerHandler/modules.js.map +1 -1
  92. package/es/core/contributions/layerHandler/offscreen2d-contribution.d.ts +3 -1
  93. package/es/core/contributions/layerHandler/offscreen2d-contribution.js +1 -1
  94. package/es/core/contributions/layerHandler/offscreen2d-contribution.js.map +1 -1
  95. package/es/core/layer-service.d.ts +5 -2
  96. package/es/core/layer-service.js +25 -2
  97. package/es/core/layer-service.js.map +1 -1
  98. package/es/core/layer.d.ts +4 -3
  99. package/es/core/layer.js +11 -7
  100. package/es/core/layer.js.map +1 -1
  101. package/es/core/stage.d.ts +8 -7
  102. package/es/core/stage.js +30 -36
  103. package/es/core/stage.js.map +1 -1
  104. package/es/graphic/config.d.ts +2 -1
  105. package/es/graphic/config.js +10 -4
  106. package/es/graphic/config.js.map +1 -1
  107. package/es/graphic/graphic-service/graphic-service.d.ts +2 -0
  108. package/es/graphic/graphic-service/graphic-service.js +4 -0
  109. package/es/graphic/graphic-service/graphic-service.js.map +1 -1
  110. package/es/graphic/graphic.js +3 -2
  111. package/es/graphic/graphic.js.map +1 -1
  112. package/es/graphic/node-tree.d.ts +1 -1
  113. package/es/graphic/node-tree.js +2 -2
  114. package/es/graphic/node-tree.js.map +1 -1
  115. package/es/graphic/text.d.ts +12 -0
  116. package/es/graphic/text.js +31 -5
  117. package/es/graphic/text.js.map +1 -1
  118. package/es/interface/core.d.ts +2 -1
  119. package/es/interface/core.js.map +1 -1
  120. package/es/interface/graphic/text.d.ts +3 -0
  121. package/es/interface/graphic/text.js.map +1 -1
  122. package/es/interface/graphic-service.d.ts +2 -0
  123. package/es/interface/graphic-service.js.map +1 -1
  124. package/es/interface/graphic.d.ts +6 -1
  125. package/es/interface/graphic.js.map +1 -1
  126. package/es/interface/layer.d.ts +9 -2
  127. package/es/interface/layer.js.map +1 -1
  128. package/es/interface/picker.d.ts +5 -5
  129. package/es/interface/picker.js.map +1 -1
  130. package/es/interface/render.d.ts +1 -1
  131. package/es/interface/render.js.map +1 -1
  132. package/es/interface/stage.d.ts +3 -8
  133. package/es/interface/stage.js.map +1 -1
  134. package/es/picker/global-picker-service.d.ts +1 -1
  135. package/es/picker/global-picker-service.js +14 -4
  136. package/es/picker/global-picker-service.js.map +1 -1
  137. package/es/picker/pick-interceptor.d.ts +3 -3
  138. package/es/picker/pick-interceptor.js +4 -4
  139. package/es/picker/pick-interceptor.js.map +1 -1
  140. package/es/picker/picker-service.d.ts +1 -1
  141. package/es/picker/picker-service.js +4 -4
  142. package/es/picker/picker-service.js.map +1 -1
  143. package/es/plugins/builtin-plugin/html-attribute-plugin.d.ts +1 -0
  144. package/es/plugins/builtin-plugin/html-attribute-plugin.js +7 -0
  145. package/es/plugins/builtin-plugin/html-attribute-plugin.js.map +1 -1
  146. package/es/render/contributions/render/draw-interceptor.d.ts +10 -0
  147. package/es/render/contributions/render/draw-interceptor.js +64 -0
  148. package/es/render/contributions/render/draw-interceptor.js.map +1 -1
  149. package/es/render/contributions/render/module.js +3 -1
  150. package/es/render/contributions/render/module.js.map +1 -1
  151. package/es/render/contributions/render/text-render.js +9 -2
  152. package/es/render/contributions/render/text-render.js.map +1 -1
  153. package/es/render/contributions/render/utils.js +1 -1
  154. package/es/render/contributions/render/utils.js.map +1 -1
  155. package/package.json +3 -3
@@ -1,4 +1,4 @@
1
- import type { ILayer, IStage, IGlobal, ILayerParams } from '../interface';
1
+ import type { ILayer, IStage, IGlobal, ILayerParams, LayerMode, ILayerHandlerContribution } from '../interface';
2
2
  import type { ILayerService } from '../interface/core';
3
3
  export declare class DefaultLayerService implements ILayerService {
4
4
  readonly global: IGlobal;
@@ -9,7 +9,10 @@ export declare class DefaultLayerService implements ILayerService {
9
9
  constructor(global: IGlobal);
10
10
  tryInit(): void;
11
11
  getStageLayer(stage: IStage): ILayer[];
12
- createLayer(stage: IStage, options?: ILayerParams): ILayer;
12
+ getRecommendedLayerType(layerMode?: LayerMode): LayerMode;
13
+ getLayerHandler(layerMode: LayerMode): ILayerHandlerContribution;
14
+ createLayer(stage: IStage, options?: Partial<ILayerParams>): ILayer;
15
+ prepareStageLayer(stage: IStage): void;
13
16
  releaseLayer(stage: IStage, layer: ILayer): void;
14
17
  layerCount(stage: IStage): number;
15
18
  restLayerCount(stage: IStage): number;
@@ -16,7 +16,7 @@ Object.defineProperty(exports, "__esModule", {
16
16
  value: !0
17
17
  }), exports.DefaultLayerService = void 0;
18
18
 
19
- const inversify_lite_1 = require("../common/inversify-lite"), layer_1 = require("./layer"), constants_1 = require("../constants");
19
+ const inversify_lite_1 = require("../common/inversify-lite"), layer_1 = require("./layer"), constants_1 = require("../constants"), container_1 = require("../container"), constants_2 = require("./constants");
20
20
 
21
21
  let DefaultLayerService = class {
22
22
  constructor(global) {
@@ -29,16 +29,35 @@ let DefaultLayerService = class {
29
29
  getStageLayer(stage) {
30
30
  return this.layerMap.get(stage);
31
31
  }
32
+ getRecommendedLayerType(layerMode) {
33
+ return layerMode || (0 !== this.staticLayerCountInEnv ? "static" : 0 !== this.dynamicLayerCountInEnv ? "dynamic" : "virtual");
34
+ }
35
+ getLayerHandler(layerMode) {
36
+ let layerHandler;
37
+ return layerHandler = "static" === layerMode ? container_1.container.get(constants_2.StaticLayerHandlerContribution) : "dynamic" === layerMode ? container_1.container.get(constants_2.DynamicLayerHandlerContribution) : container_1.container.get(constants_2.VirtualLayerHandlerContribution),
38
+ layerHandler;
39
+ }
32
40
  createLayer(stage, options = {
33
41
  main: !1
34
42
  }) {
35
43
  this.tryInit();
36
- const layer = new layer_1.Layer(stage, this.global, stage.window, Object.assign(Object.assign({}, options), {
37
- virtual: 0 === this.staticLayerCountInEnv
44
+ const layerMode = this.getRecommendedLayerType(options.layerMode), layerHandler = this.getLayerHandler(layerMode), layer = new layer_1.Layer(stage, this.global, stage.window, Object.assign(Object.assign({
45
+ main: !1
46
+ }, options), {
47
+ layerMode: layerMode,
48
+ layerHandler: layerHandler
38
49
  })), stageLayers = this.layerMap.get(stage) || [];
39
50
  return stageLayers.push(layer), this.layerMap.set(stage, stageLayers), this.staticLayerCountInEnv--,
40
51
  layer;
41
52
  }
53
+ prepareStageLayer(stage) {
54
+ let mainHandler;
55
+ stage.forEachChildren((l => {
56
+ const handler = l.getNativeHandler();
57
+ "virtual" === handler.type ? (handler.mainHandler = mainHandler, mainHandler.secondaryHandlers.push(handler)) : (mainHandler = handler,
58
+ mainHandler.secondaryHandlers = []);
59
+ }));
60
+ }
42
61
  releaseLayer(stage, layer) {
43
62
  layer.release();
44
63
  const stageLayers = this.layerMap.get(stage) || [];
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/core/layer-service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,6DAA8D;AAE9D,mCAAgC;AAEhC,4CAAuC;AAGhC,IAAM,mBAAmB,GAAzB,MAAM,mBAAmB;IAK9B,YAA6C,MAAe;QAAf,WAAM,GAAN,MAAM,CAAS;QAC1D,IAAI,CAAC,QAAQ,GAAG,IAAI,GAAG,EAAE,CAAC;IAC5B,CAAC;IAED,OAAO;QACL,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YAChB,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,MAAM,CAAC,oBAAoB,EAAE,CAAC;YAChE,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,MAAM,CAAC,qBAAqB,EAAE,CAAC;YAClE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;SACpB;IACH,CAAC;IAED,aAAa,CAAC,KAAa;QACzB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAClC,CAAC;IAED,WAAW,CAAC,KAAa,EAAE,UAAwB,EAAE,IAAI,EAAE,KAAK,EAAE;QAChE,IAAI,CAAC,OAAO,EAAE,CAAC;QACf,MAAM,KAAK,GAAG,IAAI,aAAK,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,kCACnD,OAAO,KACV,OAAO,EAAE,IAAI,CAAC,qBAAqB,KAAK,CAAC,IACzC,CAAC;QACH,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QACnD,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACxB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;QACtC,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC7B,OAAO,KAAK,CAAC;IACf,CAAC;IACD,YAAY,CAAC,KAAa,EAAE,KAAa;QACvC,KAAK,CAAC,OAAO,EAAE,CAAC;QAChB,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QACnD,IAAI,CAAC,QAAQ,CAAC,GAAG,CACf,KAAK,EACL,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,KAAK,CAAC,CACrC,CAAC;IACJ,CAAC;IAED,UAAU,CAAC,KAAa;QACtB,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;IACjD,CAAC;IACD,cAAc,CAAC,KAAa;QAE1B,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,KAAK,SAAS,EAAE;YACjC,OAAO,EAAE,CAAC;SACX;QACD,OAAO,CAAC,CAAC;IACX,CAAC;CACF,CAAA;AApDY,mBAAmB;IAD/B,IAAA,2BAAU,GAAE;IAME,WAAA,IAAA,uBAAM,EAAC,mBAAO,CAAC,CAAA;;GALjB,mBAAmB,CAoD/B;AApDY,kDAAmB","file":"layer-service.js","sourcesContent":["import { inject, injectable } from '../common/inversify-lite';\nimport type { ILayer, IStage, IGlobal, ILayerParams } from '../interface';\nimport { Layer } from './layer';\nimport type { ILayerService } from '../interface/core';\nimport { VGlobal } from '../constants';\n\n@injectable()\nexport class DefaultLayerService implements ILayerService {\n declare layerMap: Map<IStage, ILayer[]>;\n declare staticLayerCountInEnv: number;\n declare dynamicLayerCountInEnv: number;\n declare inited: boolean;\n constructor(@inject(VGlobal) public readonly global: IGlobal) {\n this.layerMap = new Map();\n }\n\n tryInit() {\n if (!this.inited) {\n this.staticLayerCountInEnv = this.global.getStaticCanvasCount();\n this.dynamicLayerCountInEnv = this.global.getDynamicCanvasCount();\n this.inited = true;\n }\n }\n\n getStageLayer(stage: IStage) {\n return this.layerMap.get(stage);\n }\n\n createLayer(stage: IStage, options: ILayerParams = { main: false }): ILayer {\n this.tryInit();\n const layer = new Layer(stage, this.global, stage.window, {\n ...options,\n virtual: this.staticLayerCountInEnv === 0\n });\n const stageLayers = this.layerMap.get(stage) || [];\n stageLayers.push(layer);\n this.layerMap.set(stage, stageLayers);\n this.staticLayerCountInEnv--;\n return layer;\n }\n releaseLayer(stage: IStage, layer: ILayer): void {\n layer.release();\n const stageLayers = this.layerMap.get(stage) || [];\n this.layerMap.set(\n stage,\n stageLayers.filter(l => l !== layer)\n );\n }\n\n layerCount(stage: IStage): number {\n return (this.layerMap.get(stage) || []).length;\n }\n restLayerCount(stage: IStage): number {\n // TODO: 设置精确的值\n if (this.global.env === 'browser') {\n return 10;\n }\n return 0;\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/core/layer-service.ts"],"names":[],"mappings":"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","file":"layer-service.js","sourcesContent":["import { inject, injectable } from '../common/inversify-lite';\nimport type { ILayer, IStage, IGlobal, ILayerParams, LayerMode, ILayerHandlerContribution } from '../interface';\nimport { Layer } from './layer';\nimport type { ILayerService } from '../interface/core';\nimport { VGlobal } from '../constants';\nimport { container } from '../container';\nimport {\n DynamicLayerHandlerContribution,\n StaticLayerHandlerContribution,\n VirtualLayerHandlerContribution\n} from './constants';\n\n@injectable()\nexport class DefaultLayerService implements ILayerService {\n declare layerMap: Map<IStage, ILayer[]>;\n declare staticLayerCountInEnv: number;\n declare dynamicLayerCountInEnv: number;\n declare inited: boolean;\n constructor(@inject(VGlobal) public readonly global: IGlobal) {\n this.layerMap = new Map();\n }\n\n tryInit() {\n if (!this.inited) {\n this.staticLayerCountInEnv = this.global.getStaticCanvasCount();\n this.dynamicLayerCountInEnv = this.global.getDynamicCanvasCount();\n this.inited = true;\n }\n }\n\n getStageLayer(stage: IStage) {\n return this.layerMap.get(stage);\n }\n\n getRecommendedLayerType(layerMode?: LayerMode): LayerMode {\n if (layerMode) {\n return layerMode;\n }\n // 默认推荐实体canvas,不行就推荐离屏canvas,最次才是virtual\n if (this.staticLayerCountInEnv !== 0) {\n return 'static';\n } else if (this.dynamicLayerCountInEnv !== 0) {\n return 'dynamic';\n }\n return 'virtual';\n }\n\n getLayerHandler(layerMode: LayerMode) {\n let layerHandler: ILayerHandlerContribution;\n if (layerMode === 'static') {\n layerHandler = container.get<ILayerHandlerContribution>(StaticLayerHandlerContribution);\n } else if (layerMode === 'dynamic') {\n layerHandler = container.get<ILayerHandlerContribution>(DynamicLayerHandlerContribution);\n } else {\n layerHandler = container.get<ILayerHandlerContribution>(VirtualLayerHandlerContribution);\n }\n return layerHandler;\n }\n\n createLayer(stage: IStage, options: Partial<ILayerParams> = { main: false }): ILayer {\n this.tryInit();\n const layerMode = this.getRecommendedLayerType(options.layerMode);\n const layerHandler = this.getLayerHandler(layerMode);\n const layer = new Layer(stage, this.global, stage.window, {\n main: false,\n ...options,\n layerMode,\n layerHandler\n });\n const stageLayers = this.layerMap.get(stage) || [];\n stageLayers.push(layer);\n this.layerMap.set(stage, stageLayers);\n this.staticLayerCountInEnv--;\n return layer;\n }\n\n prepareStageLayer(stage: IStage) {\n let mainHandler: ILayerHandlerContribution;\n stage.forEachChildren((l: ILayer) => {\n const handler = l.getNativeHandler();\n if (handler.type === 'virtual') {\n handler.mainHandler = mainHandler;\n mainHandler.secondaryHandlers.push(handler);\n } else {\n mainHandler = handler;\n mainHandler.secondaryHandlers = [];\n }\n });\n }\n\n releaseLayer(stage: IStage, layer: ILayer): void {\n layer.release();\n const stageLayers = this.layerMap.get(stage) || [];\n this.layerMap.set(\n stage,\n stageLayers.filter(l => l !== layer)\n );\n }\n\n layerCount(stage: IStage): number {\n return (this.layerMap.get(stage) || []).length;\n }\n restLayerCount(stage: IStage): number {\n // TODO: 设置精确的值\n if (this.global.env === 'browser') {\n return 10;\n }\n return 0;\n }\n}\n"]}
@@ -1,13 +1,12 @@
1
1
  import type { AABBBounds, IBoundsLike } from '@visactor/vutils';
2
- import type { IDrawToParams, IGraphic, IGroup, ILayer, ILayerDrawParams, IStage, IGlobal, ILayerHandlerContribution, IDrawContext, ILayerHandlerDrawParams, IDrawContribution, IWindow, ILayerParams } from '../interface';
2
+ import type { IDrawToParams, IGraphic, IGroup, ILayer, ILayerDrawParams, IStage, IGlobal, ILayerHandlerContribution, IDrawContext, ILayerHandlerDrawParams, IDrawContribution, IWindow, ILayerParams, LayerMode } from '../interface';
3
3
  import { Group } from '../graphic/group';
4
- export declare const LayerHandlerContribution: unique symbol;
5
4
  type BlendMode = 'normal';
6
5
  export declare class Layer extends Group implements ILayer {
7
6
  parent: any;
8
7
  _dpr: number;
9
8
  main: boolean;
10
- readonly virtual: boolean;
9
+ renderCount: number;
11
10
  afterDrawCbs: ((l: this) => void)[];
12
11
  imageData?: ImageData;
13
12
  blendMode: BlendMode;
@@ -21,6 +20,7 @@ export declare class Layer extends Group implements ILayer {
21
20
  drawContribution?: IDrawContribution;
22
21
  }>;
23
22
  get offscreen(): boolean;
23
+ get layerMode(): LayerMode;
24
24
  get width(): number;
25
25
  get height(): number;
26
26
  get viewWidth(): number;
@@ -40,6 +40,7 @@ export declare class Layer extends Group implements ILayer {
40
40
  graphic?: IGraphic;
41
41
  group?: IGroup;
42
42
  } | false;
43
+ protected tryRenderSecondaryLayer(params: ILayerDrawParams, userParams?: Partial<IDrawContext>): void;
43
44
  render(params: ILayerDrawParams, userParams?: Partial<IDrawContext>): void;
44
45
  resize(w: number, h: number): void;
45
46
  resizeView(w: number, h: number): void;
package/cjs/core/layer.js CHANGED
@@ -2,16 +2,17 @@
2
2
 
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: !0
5
- }), exports.Layer = exports.LayerHandlerContribution = void 0;
5
+ }), exports.Layer = void 0;
6
6
 
7
- const application_1 = require("../application"), container_1 = require("../container"), theme_1 = require("../graphic/theme"), group_1 = require("../graphic/group");
8
-
9
- exports.LayerHandlerContribution = Symbol.for("LayerHandlerContribution");
7
+ const application_1 = require("../application"), theme_1 = require("../graphic/theme"), group_1 = require("../graphic/group");
10
8
 
11
9
  class Layer extends group_1.Group {
12
10
  get offscreen() {
13
11
  return this.layerHandler.offscreen;
14
12
  }
13
+ get layerMode() {
14
+ return this.layerHandler.type;
15
+ }
15
16
  get width() {
16
17
  return this.stage ? this.stage.width : 0;
17
18
  }
@@ -33,15 +34,14 @@ class Layer extends group_1.Group {
33
34
  constructor(stage, global, window, params) {
34
35
  var _a;
35
36
  super({}), this.stage = stage, this.global = global, this.window = window, this.main = params.main,
36
- this.layerHandler = container_1.container.get(exports.LayerHandlerContribution),
37
- this.layerHandler.init(this, window, {
37
+ this.layerHandler = params.layerHandler, this.layerHandler.init(this, window, {
38
38
  main: params.main,
39
39
  canvasId: params.canvasId,
40
40
  width: this.viewWidth,
41
41
  height: this.viewHeight,
42
42
  zIndex: null !== (_a = params.zIndex) && void 0 !== _a ? _a : 0
43
43
  }), this.layer = this, this.subLayers = new Map, this.theme = new theme_1.Theme,
44
- this.background = "rgba(0, 0, 0, 0)", this.virtual = !!params.virtual, this.afterDrawCbs = [];
44
+ this.background = "rgba(0, 0, 0, 0)", this.afterDrawCbs = [];
45
45
  }
46
46
  combineSubLayer(removeIncrementalKey = !0) {
47
47
  const subLayers = Array.from(this.subLayers.values()).sort(((a, b) => a.zIndex - b.zIndex));
@@ -61,6 +61,11 @@ class Layer extends group_1.Group {
61
61
  pick(x, y) {
62
62
  throw new Error("暂不支持");
63
63
  }
64
+ tryRenderSecondaryLayer(params, userParams) {
65
+ this.layerHandler.secondaryHandlers && this.layerHandler.secondaryHandlers.length && this.layerHandler.secondaryHandlers.forEach((h => {
66
+ h.layer.renderCount = this.renderCount, h.layer.render(params, userParams);
67
+ }));
68
+ }
64
69
  render(params, userParams) {
65
70
  var _a;
66
71
  const stage = this.stage;
@@ -74,7 +79,7 @@ class Layer extends group_1.Group {
74
79
  layer: this,
75
80
  background: null !== (_a = params.background) && void 0 !== _a ? _a : this.background,
76
81
  updateBounds: params.updateBounds
77
- }, userParams), this.afterDrawCbs.forEach((c => c(this)));
82
+ }, userParams), this.afterDrawCbs.forEach((c => c(this))), this.tryRenderSecondaryLayer(params, userParams);
78
83
  }
79
84
  resize(w, h) {
80
85
  this.layerHandler.resize(w, h);
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/core/layer.ts"],"names":[],"mappings":"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","file":"layer.js","sourcesContent":["import type { AABBBounds, IBoundsLike } from '@visactor/vutils';\nimport { application } from '../application';\nimport { container } from '../container';\nimport type {\n IDrawToParams,\n IGraphic,\n IGroup,\n ILayer,\n ILayerDrawParams,\n IStage,\n IGlobal,\n ILayerHandlerContribution,\n IDrawContext,\n ILayerHandlerDrawParams,\n IDrawContribution,\n IWindow,\n ILayerParams\n} from '../interface';\nimport { Theme } from '../graphic/theme';\nimport { Group } from '../graphic/group';\n\nexport const LayerHandlerContribution = Symbol.for('LayerHandlerContribution');\n\ntype BlendMode = 'normal';\n\n// layer需要有多个,对于Canvas来说,layer可以绑定一个canvas或一个ImageData\n// 对于WebGL来说,layer对应一个FrameBuffer\n// 对于Native来说,layer保留一个FrameBufferHandler\nexport class Layer extends Group implements ILayer {\n declare parent: any;\n\n declare _dpr: number;\n declare main: boolean;\n\n declare readonly virtual: boolean;\n declare afterDrawCbs: ((l: this) => void)[];\n\n declare imageData?: ImageData;\n // 混合模式,用于多图层混合\n declare blendMode: BlendMode;\n\n declare background: string;\n declare opacity: number;\n\n declare layer: this;\n declare subLayers: Map<\n number,\n { layer: ILayer; group?: IGroup; zIndex: number; drawContribution?: IDrawContribution }\n >;\n\n get offscreen(): boolean {\n return this.layerHandler.offscreen;\n }\n\n // stage控制\n // width: number;\n // height: number;\n get width(): number {\n if (!this.stage) {\n return 0;\n }\n return this.stage.width;\n }\n get height(): number {\n if (!this.stage) {\n return 0;\n }\n return this.stage.height;\n }\n get viewWidth(): number {\n if (!this.stage) {\n return 0;\n }\n return this.stage.viewWidth;\n }\n get viewHeight(): number {\n if (!this.stage) {\n return 0;\n }\n return this.stage.viewHeight;\n }\n declare pickable: boolean;\n\n get dirtyBound(): AABBBounds {\n // this.getRootNode<any>();\n throw new Error('暂不支持');\n }\n\n get dpr(): number {\n return this._dpr;\n }\n\n declare stage?: IStage;\n protected declare global: IGlobal;\n protected declare window: IWindow;\n protected declare layerHandler: ILayerHandlerContribution;\n\n constructor(stage: IStage, global: IGlobal, window: IWindow, params: ILayerParams) {\n super({});\n this.stage = stage;\n this.global = global;\n this.window = window;\n this.main = params.main;\n this.layerHandler = container.get<ILayerHandlerContribution>(LayerHandlerContribution);\n this.layerHandler.init(this, window, {\n main: params.main,\n canvasId: params.canvasId,\n width: this.viewWidth,\n height: this.viewHeight,\n zIndex: params.zIndex ?? 0\n });\n this.layer = this;\n this.subLayers = new Map();\n this.theme = new Theme();\n this.background = 'rgba(0, 0, 0, 0)';\n this.virtual = !!params.virtual;\n this.afterDrawCbs = [];\n }\n\n combineSubLayer(removeIncrementalKey: boolean = true) {\n const subLayers = Array.from(this.subLayers.values()).sort((a, b) => {\n return a.zIndex - b.zIndex;\n });\n this.layerHandler.merge(\n subLayers.map(l => {\n if (l.layer.subLayers.size) {\n l.layer.combineSubLayer(removeIncrementalKey);\n }\n return l.layer.getNativeHandler();\n })\n );\n if (removeIncrementalKey) {\n subLayers.forEach(l => {\n l.group && (l.group.incremental = 0);\n });\n }\n subLayers.forEach(l => {\n // l.layer.release();\n application.layerService.releaseLayer(this.stage, l.layer);\n });\n this.subLayers.clear();\n }\n\n getNativeHandler(): ILayerHandlerContribution {\n return this.layerHandler;\n }\n\n setStage(stage?: IStage, layer?: ILayer) {\n super.setStage(stage, this);\n }\n\n // 选中图层中的节点\n pick(x: number, y: number): { graphic?: IGraphic; group?: IGroup } | false {\n throw new Error('暂不支持');\n }\n // 绘制图层\n render(params: ILayerDrawParams, userParams?: Partial<IDrawContext>) {\n const stage = this.stage;\n this.layerHandler.render(\n [this],\n {\n renderService: params.renderService,\n x: stage.x,\n y: stage.y,\n width: this.viewWidth,\n height: this.viewHeight,\n stage: this.stage,\n layer: this,\n // TODO: 多图层时不应该再用默认background\n background: params.background ?? this.background,\n updateBounds: params.updateBounds\n },\n userParams\n );\n this.afterDrawCbs.forEach(c => c(this));\n }\n resize(w: number, h: number) {\n this.layerHandler.resize(w, h);\n }\n resizeView(w: number, h: number) {\n this.layerHandler.resizeView(w, h);\n }\n setDpr(dpr: number) {\n this.layerHandler.setDpr(dpr);\n }\n afterDraw(cb: (l: this) => void) {\n this.afterDrawCbs.push(cb);\n }\n\n // 动画相关\n startAnimate(t: number) {\n throw new Error('暂不支持');\n }\n\n setToFrame(t: number) {\n throw new Error('暂不支持');\n }\n\n prepare(dirtyBounds: IBoundsLike, params: ILayerHandlerDrawParams) {\n return;\n }\n\n // 合并到某个target上\n combineTo(target: IWindow, params: IDrawToParams) {\n if (this.offscreen) {\n this.layerHandler.drawTo(target, [this], {\n // TODO: 多图层时不应该再用默认background\n background: params.background ?? this.background,\n renderService: params.renderService,\n x: params.x ?? this.stage.x,\n y: params.y ?? this.stage.y,\n width: this.viewWidth,\n height: this.viewHeight,\n stage: this.stage,\n layer: this,\n ...params\n });\n this.afterDrawCbs.forEach(c => c(this));\n }\n }\n\n release(): void {\n super.release();\n this.layerHandler.release();\n if (this.subLayers) {\n this.subLayers.forEach(l => {\n // l.layer.release();\n application.layerService.releaseLayer(this.stage, l.layer);\n });\n }\n }\n\n drawTo(target: IWindow, params: IDrawToParams) {\n this.layerHandler.drawTo(target, [this], {\n // TODO: 多图层时不应该再用默认background\n background: params.background ?? this.background,\n renderService: params.renderService,\n x: params.x ?? this.stage.x,\n y: params.y ?? this.stage.y,\n width: this.viewWidth,\n height: this.viewHeight,\n stage: this.stage,\n layer: this,\n ...params\n });\n this.afterDrawCbs.forEach(c => c(this));\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/core/layer.ts"],"names":[],"mappings":"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","file":"layer.js","sourcesContent":["import type { AABBBounds, IBoundsLike } from '@visactor/vutils';\nimport { application } from '../application';\nimport { container } from '../container';\nimport type {\n IDrawToParams,\n IGraphic,\n IGroup,\n ILayer,\n ILayerDrawParams,\n IStage,\n IGlobal,\n ILayerHandlerContribution,\n IDrawContext,\n ILayerHandlerDrawParams,\n IDrawContribution,\n IWindow,\n ILayerParams,\n LayerMode\n} from '../interface';\nimport { Theme } from '../graphic/theme';\nimport { Group } from '../graphic/group';\n\ntype BlendMode = 'normal';\n\n// layer需要有多个,对于Canvas来说,layer可以绑定一个canvas或一个ImageData\n// 对于WebGL来说,layer对应一个FrameBuffer\n// 对于Native来说,layer保留一个FrameBufferHandler\nexport class Layer extends Group implements ILayer {\n declare parent: any;\n\n declare _dpr: number;\n declare main: boolean;\n declare renderCount: number;\n\n declare afterDrawCbs: ((l: this) => void)[];\n\n declare imageData?: ImageData;\n // 混合模式,用于多图层混合\n declare blendMode: BlendMode;\n\n declare background: string;\n declare opacity: number;\n\n declare layer: this;\n declare subLayers: Map<\n number,\n { layer: ILayer; group?: IGroup; zIndex: number; drawContribution?: IDrawContribution }\n >;\n\n get offscreen(): boolean {\n return this.layerHandler.offscreen;\n }\n\n get layerMode(): LayerMode {\n return this.layerHandler.type;\n }\n\n // stage控制\n // width: number;\n // height: number;\n get width(): number {\n if (!this.stage) {\n return 0;\n }\n return this.stage.width;\n }\n get height(): number {\n if (!this.stage) {\n return 0;\n }\n return this.stage.height;\n }\n get viewWidth(): number {\n if (!this.stage) {\n return 0;\n }\n return this.stage.viewWidth;\n }\n get viewHeight(): number {\n if (!this.stage) {\n return 0;\n }\n return this.stage.viewHeight;\n }\n declare pickable: boolean;\n\n get dirtyBound(): AABBBounds {\n // this.getRootNode<any>();\n throw new Error('暂不支持');\n }\n\n get dpr(): number {\n return this._dpr;\n }\n\n declare stage?: IStage;\n protected declare global: IGlobal;\n protected declare window: IWindow;\n protected declare layerHandler: ILayerHandlerContribution;\n\n constructor(stage: IStage, global: IGlobal, window: IWindow, params: ILayerParams) {\n super({});\n this.stage = stage;\n this.global = global;\n this.window = window;\n this.main = params.main;\n this.layerHandler = params.layerHandler;\n // this.layerHandler = container.get<ILayerHandlerContribution>(LayerHandlerContribution);\n this.layerHandler.init(this, window, {\n main: params.main,\n canvasId: params.canvasId,\n width: this.viewWidth,\n height: this.viewHeight,\n zIndex: params.zIndex ?? 0\n });\n this.layer = this;\n this.subLayers = new Map();\n this.theme = new Theme();\n this.background = 'rgba(0, 0, 0, 0)';\n this.afterDrawCbs = [];\n }\n\n combineSubLayer(removeIncrementalKey: boolean = true) {\n const subLayers = Array.from(this.subLayers.values()).sort((a, b) => {\n return a.zIndex - b.zIndex;\n });\n this.layerHandler.merge(\n subLayers.map(l => {\n if (l.layer.subLayers.size) {\n l.layer.combineSubLayer(removeIncrementalKey);\n }\n return l.layer.getNativeHandler();\n })\n );\n if (removeIncrementalKey) {\n subLayers.forEach(l => {\n l.group && (l.group.incremental = 0);\n });\n }\n subLayers.forEach(l => {\n // l.layer.release();\n application.layerService.releaseLayer(this.stage, l.layer);\n });\n this.subLayers.clear();\n }\n\n getNativeHandler(): ILayerHandlerContribution {\n return this.layerHandler;\n }\n\n setStage(stage?: IStage, layer?: ILayer) {\n super.setStage(stage, this);\n }\n\n // 选中图层中的节点\n pick(x: number, y: number): { graphic?: IGraphic; group?: IGroup } | false {\n throw new Error('暂不支持');\n }\n // 绘制依赖的副layer\n protected tryRenderSecondaryLayer(params: ILayerDrawParams, userParams?: Partial<IDrawContext>) {\n if (this.layerHandler.secondaryHandlers && this.layerHandler.secondaryHandlers.length) {\n this.layerHandler.secondaryHandlers.forEach(h => {\n h.layer.renderCount = this.renderCount;\n h.layer.render(params, userParams);\n });\n }\n }\n // 绘制图层\n render(params: ILayerDrawParams, userParams?: Partial<IDrawContext>) {\n const stage = this.stage;\n this.layerHandler.render(\n [this],\n {\n renderService: params.renderService,\n x: stage.x,\n y: stage.y,\n width: this.viewWidth,\n height: this.viewHeight,\n stage: this.stage,\n layer: this,\n // TODO: 多图层时不应该再用默认background\n background: params.background ?? this.background,\n updateBounds: params.updateBounds\n },\n userParams\n );\n this.afterDrawCbs.forEach(c => c(this));\n this.tryRenderSecondaryLayer(params, userParams);\n }\n resize(w: number, h: number) {\n this.layerHandler.resize(w, h);\n }\n resizeView(w: number, h: number) {\n this.layerHandler.resizeView(w, h);\n }\n setDpr(dpr: number) {\n this.layerHandler.setDpr(dpr);\n }\n afterDraw(cb: (l: this) => void) {\n this.afterDrawCbs.push(cb);\n }\n\n // 动画相关\n startAnimate(t: number) {\n throw new Error('暂不支持');\n }\n\n setToFrame(t: number) {\n throw new Error('暂不支持');\n }\n\n prepare(dirtyBounds: IBoundsLike, params: ILayerHandlerDrawParams) {\n return;\n }\n\n // 合并到某个target上\n combineTo(target: IWindow, params: IDrawToParams) {\n if (this.offscreen) {\n this.layerHandler.drawTo(target, [this], {\n // TODO: 多图层时不应该再用默认background\n background: params.background ?? this.background,\n renderService: params.renderService,\n x: params.x ?? this.stage.x,\n y: params.y ?? this.stage.y,\n width: this.viewWidth,\n height: this.viewHeight,\n stage: this.stage,\n layer: this,\n ...params\n });\n this.afterDrawCbs.forEach(c => c(this));\n }\n }\n\n release(): void {\n super.release();\n this.layerHandler.release();\n if (this.subLayers) {\n this.subLayers.forEach(l => {\n // l.layer.release();\n application.layerService.releaseLayer(this.stage, l.layer);\n });\n }\n }\n\n drawTo(target: IWindow, params: IDrawToParams) {\n this.layerHandler.drawTo(target, [this], {\n // TODO: 多图层时不应该再用默认background\n background: params.background ?? this.background,\n renderService: params.renderService,\n x: params.x ?? this.stage.x,\n y: params.y ?? this.stage.y,\n width: this.viewWidth,\n height: this.viewHeight,\n stage: this.stage,\n layer: this,\n ...params\n });\n this.afterDrawCbs.forEach(c => c(this));\n }\n}\n"]}
@@ -1,10 +1,12 @@
1
1
  import type { IAABBBounds, IBounds, IBoundsLike, IMatrix } from '@visactor/vutils';
2
2
  import { AABBBounds } from '@visactor/vutils';
3
- import type { IGraphic, IGroup, IExportType, IStage, IStageParams, ILayer, IColor, IOption3D, ICamera, vec3, IDirectionLight, ITicker, IRenderService, IPickerService, IPluginService, ISyncHook, IDrawContext, IWindow, ILayerService, ITimeline, IOptimizeType } from '../interface';
3
+ import type { IExportType, IStage, IStageParams, ILayer, IColor, IOption3D, ICamera, vec3, IDirectionLight, ITicker, IRenderService, IPickerService, IPluginService, ISyncHook, IDrawContext, IWindow, ILayerService, ITimeline, IOptimizeType, LayerMode, PickResult } from '../interface';
4
4
  import type { Layer } from './layer';
5
5
  import { Group } from '../graphic';
6
+ type IStageState = 'rendering' | 'normal';
6
7
  export declare class Stage extends Group implements IStage {
7
8
  parent: IStage | null;
9
+ state: IStageState;
8
10
  protected _viewBox: AABBBounds;
9
11
  private _background;
10
12
  private _subView;
@@ -108,15 +110,16 @@ export declare class Stage extends Group implements IStage {
108
110
  disableHtmlAttribute(): void;
109
111
  protected tryUpdateAABBBounds(): AABBBounds;
110
112
  combineLayer(ILayer1: ILayer, ILayer2: ILayer): ILayer;
111
- createLayer(canvasId?: string): ILayer;
113
+ createLayer(layerMode?: LayerMode): ILayer;
112
114
  sortLayer(cb: (ILayer1: ILayer, layer2: ILayer) => number): void;
113
115
  removeLayer(ILayerId: number): ILayer | false;
114
116
  tryInitInteractiveLayer(): void;
115
117
  clearViewBox(color?: string): void;
116
118
  render(layers?: ILayer[], params?: Partial<IDrawContext>): void;
117
119
  protected combineLayersToWindow(): void;
118
- renderNextFrame(layers?: ILayer[]): void;
120
+ renderNextFrame(layers?: ILayer[], force?: boolean): void;
119
121
  _doRenderInThisFrame(): void;
122
+ protected renderLayerList(layerList: ILayer[], params?: Partial<IDrawContext>): void;
120
123
  resizeWindow(w: number, h: number, rerender?: boolean): void;
121
124
  resize(w: number, h: number, rerender?: boolean): void;
122
125
  resizeView(w: number, h: number, rerender?: boolean): void;
@@ -125,10 +128,7 @@ export declare class Stage extends Group implements IStage {
125
128
  setDpr(dpr: number, rerender?: boolean): void;
126
129
  setOrigin(x: number, y: number): void;
127
130
  export(type: IExportType): HTMLCanvasElement | ImageData;
128
- pick(x: number, y: number): {
129
- graphic: IGraphic | null;
130
- group: IGroup | null;
131
- } | false;
131
+ pick(x: number, y: number): PickResult | false;
132
132
  startAnimate(t: number): void;
133
133
  setToFrame(t: number): void;
134
134
  release(): void;
@@ -146,3 +146,4 @@ export declare class Stage extends Group implements IStage {
146
146
  setCursor(mode?: string): void;
147
147
  getCursor(): string;
148
148
  }
149
+ export {};
package/cjs/core/stage.js CHANGED
@@ -93,7 +93,7 @@ class Stage extends graphic_1.Group {
93
93
  title: params.title || "",
94
94
  canvas: params.canvas
95
95
  }), this._viewBox = new vutils_1.AABBBounds, params.viewBox ? this._viewBox.setValue(params.viewBox.x1, params.viewBox.y1, params.viewBox.x2, params.viewBox.y2) : this._viewBox.setValue(0, 0, this.width, this.height),
96
- this.renderCount = 0, this._subView = !(this._viewBox.width() === this.width && this._viewBox.height() === this.height),
96
+ this.state = "normal", this.renderCount = 0, this._subView = !(this._viewBox.width() === this.width && this._viewBox.height() === this.height),
97
97
  this._background = null !== (_a = params.background) && void 0 !== _a ? _a : DefaultConfig.BACKGROUND,
98
98
  this.appendChild(this.layerService.createLayer(this, {
99
99
  main: !0
@@ -249,10 +249,10 @@ class Stage extends graphic_1.Group {
249
249
  combineLayer(ILayer1, ILayer2) {
250
250
  throw new Error("暂不支持");
251
251
  }
252
- createLayer(canvasId) {
252
+ createLayer(layerMode) {
253
253
  const layer = this.layerService.createLayer(this, {
254
254
  main: !1,
255
- canvasId: canvasId
255
+ layerMode: layerMode
256
256
  });
257
257
  return this.appendChild(layer), layer;
258
258
  }
@@ -273,51 +273,45 @@ class Stage extends graphic_1.Group {
273
273
  this.window.clearViewBox(this._viewBox, color);
274
274
  }
275
275
  render(layers, params) {
276
- this.ticker.start(), this.timeline.resume(), this._skipRender || (this.lastRenderparams = params,
277
- this.hooks.beforeRender.call(this), (layers || this).forEach(((layer, i) => {
278
- layer.render({
279
- renderService: this.renderService,
280
- background: layer === this.defaultLayer ? this.background : void 0,
281
- updateBounds: !!this.dirtyBounds
282
- }, Object.assign({
283
- renderStyle: this.renderStyle
284
- }, params));
285
- })), this.combineLayersToWindow(), this.nextFrameRenderLayerSet.clear(), this.hooks.afterRender.call(this)),
276
+ this.ticker.start(), this.timeline.resume();
277
+ const state = this.state;
278
+ this.state = "rendering", this.layerService.prepareStageLayer(this), this._skipRender || (this.lastRenderparams = params,
279
+ this.hooks.beforeRender.call(this), this.renderLayerList(this.children), this.combineLayersToWindow(),
280
+ this.nextFrameRenderLayerSet.clear(), this.hooks.afterRender.call(this)), this.state = state,
286
281
  this._skipRender && this._skipRender++;
287
282
  }
288
- combineLayersToWindow() {
289
- this.forEach(((layer, i) => {
290
- layer.combineTo(this.window, {
291
- clear: 0 === i,
292
- x: this.x,
293
- y: this.y,
294
- width: this.viewWidth,
295
- height: this.viewHeight,
296
- renderService: this.renderService,
297
- background: layer === this.defaultLayer ? this.background : void 0,
298
- updateBounds: !!this.dirtyBounds
299
- });
300
- }));
301
- }
302
- renderNextFrame(layers) {
303
- this.nextFrameRenderLayerSet.size !== this.childrenCount && (layers || this).forEach((layer => {
283
+ combineLayersToWindow() {}
284
+ renderNextFrame(layers, force) {
285
+ ("rendering" !== this.state || force) && (this.nextFrameRenderLayerSet.size !== this.childrenCount && (layers || this).forEach((layer => {
304
286
  this.nextFrameRenderLayerSet.add(layer);
305
287
  })), this.willNextFrameRender || (this.willNextFrameRender = !0, this.global.getRequestAnimationFrame()((() => {
306
288
  this._doRenderInThisFrame(), this.willNextFrameRender = !1;
307
- })));
289
+ }))));
308
290
  }
309
291
  _doRenderInThisFrame() {
310
- this.timeline.resume(), this.ticker.start(), this.nextFrameRenderLayerSet.size && !this._skipRender && (this.hooks.beforeRender.call(this),
311
- this.forEach((layer => {
312
- this.nextFrameRenderLayerSet.has(layer) && layer.render({
292
+ this.timeline.resume(), this.ticker.start();
293
+ const state = this.state;
294
+ this.state = "rendering", this.layerService.prepareStageLayer(this), this.nextFrameRenderLayerSet.size && !this._skipRender && (this.hooks.beforeRender.call(this),
295
+ this.renderLayerList(Array.from(this.nextFrameRenderLayerSet.values()), this.lastRenderparams || {}),
296
+ this.combineLayersToWindow(), this.hooks.afterRender.call(this), this.nextFrameRenderLayerSet.clear()),
297
+ this.state = state, this._skipRender && this._skipRender++;
298
+ }
299
+ renderLayerList(layerList, params) {
300
+ const list = [];
301
+ for (let i = 0; i < layerList.length; i++) {
302
+ let l = layerList[i];
303
+ "virtual" === l.layerMode && (l = l.getNativeHandler().mainHandler.layer), list.includes(l) || list.push(l);
304
+ }
305
+ list.forEach((layer => {
306
+ layer.renderCount > this.renderCount || (layer.renderCount = this.renderCount + 1,
307
+ layer.render({
313
308
  renderService: this.renderService,
314
309
  background: layer === this.defaultLayer ? this.background : void 0,
315
310
  updateBounds: !!this.dirtyBounds
316
311
  }, Object.assign({
317
312
  renderStyle: this.renderStyle
318
- }, this.lastRenderparams || {}));
319
- })), this.combineLayersToWindow(), this.hooks.afterRender.call(this), this.nextFrameRenderLayerSet.clear()),
320
- this._skipRender && this._skipRender++;
313
+ }, params)));
314
+ }));
321
315
  }
322
316
  resizeWindow(w, h, rerender = !0) {
323
317
  this.window.resize(w, h), rerender && this.render();