@visactor/vrender-core 0.16.0-alpha.0 → 0.16.0-alpha.12

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 (269) hide show
  1. package/cjs/animate/animate.js +8 -2
  2. package/cjs/animate/animate.js.map +1 -1
  3. package/cjs/core/application.js +1 -1
  4. package/cjs/core/camera.js +1 -1
  5. package/cjs/core/constants.d.ts +3 -0
  6. package/cjs/core/constants.js +5 -3
  7. package/cjs/core/constants.js.map +1 -1
  8. package/cjs/core/contributions/layerHandler/canvas2d-contribution.d.ts +3 -1
  9. package/cjs/core/contributions/layerHandler/canvas2d-contribution.js +1 -1
  10. package/cjs/core/contributions/layerHandler/canvas2d-contribution.js.map +1 -1
  11. package/cjs/core/contributions/layerHandler/empty-contribution.d.ts +24 -0
  12. package/cjs/core/contributions/layerHandler/empty-contribution.js +57 -0
  13. package/cjs/core/contributions/layerHandler/empty-contribution.js.map +1 -0
  14. package/cjs/core/contributions/layerHandler/modules.js +4 -2
  15. package/cjs/core/contributions/layerHandler/modules.js.map +1 -1
  16. package/cjs/core/contributions/layerHandler/offscreen2d-contribution.d.ts +3 -1
  17. package/cjs/core/contributions/layerHandler/offscreen2d-contribution.js +1 -1
  18. package/cjs/core/contributions/layerHandler/offscreen2d-contribution.js.map +1 -1
  19. package/cjs/core/core-modules.js +1 -1
  20. package/cjs/core/global-module.js +2 -0
  21. package/cjs/core/layer-service.d.ts +5 -2
  22. package/cjs/core/layer-service.js +23 -3
  23. package/cjs/core/layer-service.js.map +1 -1
  24. package/cjs/core/layer.d.ts +4 -3
  25. package/cjs/core/layer.js +13 -8
  26. package/cjs/core/layer.js.map +1 -1
  27. package/cjs/core/stage.d.ts +8 -7
  28. package/cjs/core/stage.js +33 -34
  29. package/cjs/core/stage.js.map +1 -1
  30. package/cjs/event/constant.js +1 -1
  31. package/cjs/event/event-manager.js +1 -1
  32. package/cjs/event/event-system.js +1 -1
  33. package/cjs/event/event-target.js +1 -1
  34. package/cjs/event/index.js +1 -1
  35. package/cjs/graphic/config.d.ts +2 -1
  36. package/cjs/graphic/config.js +13 -6
  37. package/cjs/graphic/config.js.map +1 -1
  38. package/cjs/graphic/graphic-service/common-contribution.js +1 -1
  39. package/cjs/graphic/graphic-service/common-contribution.js.map +1 -1
  40. package/cjs/graphic/graphic-service/graphic-service.d.ts +2 -0
  41. package/cjs/graphic/graphic-service/graphic-service.js +4 -0
  42. package/cjs/graphic/graphic-service/graphic-service.js.map +1 -1
  43. package/cjs/graphic/graphic-service/symbol-contribution.js +1 -1
  44. package/cjs/graphic/graphic-service/symbol-contribution.js.map +1 -1
  45. package/cjs/graphic/graphic.d.ts +3 -0
  46. package/cjs/graphic/graphic.js +48 -21
  47. package/cjs/graphic/graphic.js.map +1 -1
  48. package/cjs/graphic/node-tree.d.ts +1 -1
  49. package/cjs/graphic/node-tree.js +2 -2
  50. package/cjs/graphic/node-tree.js.map +1 -1
  51. package/cjs/graphic/text.d.ts +12 -0
  52. package/cjs/graphic/text.js +31 -5
  53. package/cjs/graphic/text.js.map +1 -1
  54. package/cjs/interface/context.d.ts +2 -1
  55. package/cjs/interface/context.js.map +1 -1
  56. package/cjs/interface/core.d.ts +2 -1
  57. package/cjs/interface/core.js.map +1 -1
  58. package/cjs/interface/event.d.ts +1 -0
  59. package/cjs/interface/event.js.map +1 -1
  60. package/cjs/interface/graphic/text.d.ts +3 -0
  61. package/cjs/interface/graphic/text.js.map +1 -1
  62. package/cjs/interface/graphic-service.d.ts +2 -0
  63. package/cjs/interface/graphic-service.js.map +1 -1
  64. package/cjs/interface/graphic.d.ts +9 -2
  65. package/cjs/interface/graphic.js.map +1 -1
  66. package/cjs/interface/layer.d.ts +9 -2
  67. package/cjs/interface/layer.js.map +1 -1
  68. package/cjs/interface/picker.d.ts +5 -5
  69. package/cjs/interface/picker.js.map +1 -1
  70. package/cjs/interface/render.d.ts +1 -1
  71. package/cjs/interface/render.js.map +1 -1
  72. package/cjs/interface/stage.d.ts +6 -10
  73. package/cjs/interface/stage.js.map +1 -1
  74. package/cjs/picker/global-picker-service.d.ts +1 -1
  75. package/cjs/picker/global-picker-service.js +14 -4
  76. package/cjs/picker/global-picker-service.js.map +1 -1
  77. package/cjs/picker/pick-interceptor.d.ts +9 -3
  78. package/cjs/picker/pick-interceptor.js +26 -5
  79. package/cjs/picker/pick-interceptor.js.map +1 -1
  80. package/cjs/picker/pick-modules.js +2 -0
  81. package/cjs/picker/pick-modules.js.map +1 -1
  82. package/cjs/picker/picker-service.d.ts +1 -1
  83. package/cjs/picker/picker-service.js +5 -4
  84. package/cjs/picker/picker-service.js.map +1 -1
  85. package/cjs/plugins/builtin-plugin/html-attribute-plugin.d.ts +1 -0
  86. package/cjs/plugins/builtin-plugin/html-attribute-plugin.js +7 -0
  87. package/cjs/plugins/builtin-plugin/html-attribute-plugin.js.map +1 -1
  88. package/cjs/render/contributions/render/arc-render.js +2 -2
  89. package/cjs/render/contributions/render/arc-render.js.map +1 -1
  90. package/cjs/render/contributions/render/arc3d-render.js +2 -2
  91. package/cjs/render/contributions/render/arc3d-render.js.map +1 -1
  92. package/cjs/render/contributions/render/area-render.js +1 -1
  93. package/cjs/render/contributions/render/area-render.js.map +1 -1
  94. package/cjs/render/contributions/render/base-render.js.map +1 -1
  95. package/cjs/render/contributions/render/circle-render.js +1 -1
  96. package/cjs/render/contributions/render/circle-render.js.map +1 -1
  97. package/cjs/render/contributions/render/contributions/arc-contribution-render.js +2 -2
  98. package/cjs/render/contributions/render/contributions/arc-contribution-render.js.map +1 -1
  99. package/cjs/render/contributions/render/contributions/circle-contribution-render.js +2 -2
  100. package/cjs/render/contributions/render/contributions/circle-contribution-render.js.map +1 -1
  101. package/cjs/render/contributions/render/contributions/rect-contribution-render.js +2 -2
  102. package/cjs/render/contributions/render/contributions/rect-contribution-render.js.map +1 -1
  103. package/cjs/render/contributions/render/contributions/symbol-contribution-render.js +2 -2
  104. package/cjs/render/contributions/render/contributions/symbol-contribution-render.js.map +1 -1
  105. package/cjs/render/contributions/render/draw-contribution.js +11 -2
  106. package/cjs/render/contributions/render/draw-contribution.js.map +1 -1
  107. package/cjs/render/contributions/render/draw-interceptor.d.ts +15 -1
  108. package/cjs/render/contributions/render/draw-interceptor.js +82 -1
  109. package/cjs/render/contributions/render/draw-interceptor.js.map +1 -1
  110. package/cjs/render/contributions/render/group-render.js +1 -1
  111. package/cjs/render/contributions/render/group-render.js.map +1 -1
  112. package/cjs/render/contributions/render/image-render.js +3 -2
  113. package/cjs/render/contributions/render/image-render.js.map +1 -1
  114. package/cjs/render/contributions/render/incremental-area-render.js +1 -1
  115. package/cjs/render/contributions/render/incremental-area-render.js.map +1 -1
  116. package/cjs/render/contributions/render/incremental-line-render.js +1 -1
  117. package/cjs/render/contributions/render/incremental-line-render.js.map +1 -1
  118. package/cjs/render/contributions/render/line-render.js +1 -1
  119. package/cjs/render/contributions/render/line-render.js.map +1 -1
  120. package/cjs/render/contributions/render/module.js +4 -0
  121. package/cjs/render/contributions/render/module.js.map +1 -1
  122. package/cjs/render/contributions/render/path-render.js +1 -1
  123. package/cjs/render/contributions/render/path-render.js.map +1 -1
  124. package/cjs/render/contributions/render/polygon-render.js +2 -2
  125. package/cjs/render/contributions/render/polygon-render.js.map +1 -1
  126. package/cjs/render/contributions/render/rect-render.js +1 -1
  127. package/cjs/render/contributions/render/rect-render.js.map +1 -1
  128. package/cjs/render/contributions/render/symbol-render.js +1 -1
  129. package/cjs/render/contributions/render/symbol-render.js.map +1 -1
  130. package/cjs/render/contributions/render/text-render.js +11 -4
  131. package/cjs/render/contributions/render/text-render.js.map +1 -1
  132. package/cjs/render/contributions/render/utils.js +2 -2
  133. package/cjs/render/contributions/render/utils.js.map +1 -1
  134. package/dist/index.js +945 -2430
  135. package/dist/index.min.js +1 -1
  136. package/es/animate/animate.js +8 -2
  137. package/es/animate/animate.js.map +1 -1
  138. package/es/core/application.js +1 -1
  139. package/es/core/camera.js +1 -1
  140. package/es/core/constants.d.ts +3 -0
  141. package/es/core/constants.js +7 -1
  142. package/es/core/constants.js.map +1 -1
  143. package/es/core/contributions/layerHandler/canvas2d-contribution.d.ts +3 -1
  144. package/es/core/contributions/layerHandler/canvas2d-contribution.js +1 -1
  145. package/es/core/contributions/layerHandler/canvas2d-contribution.js.map +1 -1
  146. package/es/core/contributions/layerHandler/empty-contribution.d.ts +24 -0
  147. package/es/core/contributions/layerHandler/empty-contribution.js +53 -0
  148. package/es/core/contributions/layerHandler/empty-contribution.js.map +1 -0
  149. package/es/core/contributions/layerHandler/modules.js +6 -2
  150. package/es/core/contributions/layerHandler/modules.js.map +1 -1
  151. package/es/core/contributions/layerHandler/offscreen2d-contribution.d.ts +3 -1
  152. package/es/core/contributions/layerHandler/offscreen2d-contribution.js +1 -1
  153. package/es/core/contributions/layerHandler/offscreen2d-contribution.js.map +1 -1
  154. package/es/core/core-modules.js +1 -1
  155. package/es/core/global-module.js +2 -0
  156. package/es/core/layer-service.d.ts +5 -2
  157. package/es/core/layer-service.js +26 -2
  158. package/es/core/layer-service.js.map +1 -1
  159. package/es/core/layer.d.ts +4 -3
  160. package/es/core/layer.js +11 -7
  161. package/es/core/layer.js.map +1 -1
  162. package/es/core/stage.d.ts +8 -7
  163. package/es/core/stage.js +33 -34
  164. package/es/core/stage.js.map +1 -1
  165. package/es/event/constant.js +1 -1
  166. package/es/event/event-manager.js +1 -1
  167. package/es/event/event-system.js +1 -1
  168. package/es/event/event-target.js +1 -1
  169. package/es/event/index.js +1 -1
  170. package/es/graphic/config.d.ts +2 -1
  171. package/es/graphic/config.js +12 -4
  172. package/es/graphic/config.js.map +1 -1
  173. package/es/graphic/graphic-service/common-contribution.js +1 -1
  174. package/es/graphic/graphic-service/common-contribution.js.map +1 -1
  175. package/es/graphic/graphic-service/graphic-service.d.ts +2 -0
  176. package/es/graphic/graphic-service/graphic-service.js +4 -0
  177. package/es/graphic/graphic-service/graphic-service.js.map +1 -1
  178. package/es/graphic/graphic-service/symbol-contribution.js +1 -1
  179. package/es/graphic/graphic-service/symbol-contribution.js.map +1 -1
  180. package/es/graphic/graphic.d.ts +3 -0
  181. package/es/graphic/graphic.js +47 -21
  182. package/es/graphic/graphic.js.map +1 -1
  183. package/es/graphic/node-tree.d.ts +1 -1
  184. package/es/graphic/node-tree.js +2 -2
  185. package/es/graphic/node-tree.js.map +1 -1
  186. package/es/graphic/text.d.ts +12 -0
  187. package/es/graphic/text.js +31 -5
  188. package/es/graphic/text.js.map +1 -1
  189. package/es/interface/context.d.ts +2 -1
  190. package/es/interface/context.js.map +1 -1
  191. package/es/interface/core.d.ts +2 -1
  192. package/es/interface/core.js.map +1 -1
  193. package/es/interface/event.d.ts +1 -0
  194. package/es/interface/event.js.map +1 -1
  195. package/es/interface/graphic/text.d.ts +3 -0
  196. package/es/interface/graphic/text.js.map +1 -1
  197. package/es/interface/graphic-service.d.ts +2 -0
  198. package/es/interface/graphic-service.js.map +1 -1
  199. package/es/interface/graphic.d.ts +9 -2
  200. package/es/interface/graphic.js.map +1 -1
  201. package/es/interface/layer.d.ts +9 -2
  202. package/es/interface/layer.js.map +1 -1
  203. package/es/interface/picker.d.ts +5 -5
  204. package/es/interface/picker.js.map +1 -1
  205. package/es/interface/render.d.ts +1 -1
  206. package/es/interface/render.js.map +1 -1
  207. package/es/interface/stage.d.ts +6 -10
  208. package/es/interface/stage.js.map +1 -1
  209. package/es/picker/global-picker-service.d.ts +1 -1
  210. package/es/picker/global-picker-service.js +14 -4
  211. package/es/picker/global-picker-service.js.map +1 -1
  212. package/es/picker/pick-interceptor.d.ts +9 -3
  213. package/es/picker/pick-interceptor.js +26 -4
  214. package/es/picker/pick-interceptor.js.map +1 -1
  215. package/es/picker/pick-modules.js +2 -1
  216. package/es/picker/pick-modules.js.map +1 -1
  217. package/es/picker/picker-service.d.ts +1 -1
  218. package/es/picker/picker-service.js +4 -4
  219. package/es/picker/picker-service.js.map +1 -1
  220. package/es/plugins/builtin-plugin/html-attribute-plugin.d.ts +1 -0
  221. package/es/plugins/builtin-plugin/html-attribute-plugin.js +7 -0
  222. package/es/plugins/builtin-plugin/html-attribute-plugin.js.map +1 -1
  223. package/es/render/contributions/render/arc-render.js +2 -2
  224. package/es/render/contributions/render/arc-render.js.map +1 -1
  225. package/es/render/contributions/render/arc3d-render.js +2 -2
  226. package/es/render/contributions/render/arc3d-render.js.map +1 -1
  227. package/es/render/contributions/render/area-render.js +1 -1
  228. package/es/render/contributions/render/area-render.js.map +1 -1
  229. package/es/render/contributions/render/base-render.js.map +1 -1
  230. package/es/render/contributions/render/circle-render.js +1 -1
  231. package/es/render/contributions/render/circle-render.js.map +1 -1
  232. package/es/render/contributions/render/contributions/arc-contribution-render.js +2 -2
  233. package/es/render/contributions/render/contributions/arc-contribution-render.js.map +1 -1
  234. package/es/render/contributions/render/contributions/circle-contribution-render.js +2 -2
  235. package/es/render/contributions/render/contributions/circle-contribution-render.js.map +1 -1
  236. package/es/render/contributions/render/contributions/rect-contribution-render.js +2 -2
  237. package/es/render/contributions/render/contributions/rect-contribution-render.js.map +1 -1
  238. package/es/render/contributions/render/contributions/symbol-contribution-render.js +2 -2
  239. package/es/render/contributions/render/contributions/symbol-contribution-render.js.map +1 -1
  240. package/es/render/contributions/render/draw-contribution.js +11 -2
  241. package/es/render/contributions/render/draw-contribution.js.map +1 -1
  242. package/es/render/contributions/render/draw-interceptor.d.ts +15 -1
  243. package/es/render/contributions/render/draw-interceptor.js +84 -1
  244. package/es/render/contributions/render/draw-interceptor.js.map +1 -1
  245. package/es/render/contributions/render/group-render.js +1 -1
  246. package/es/render/contributions/render/group-render.js.map +1 -1
  247. package/es/render/contributions/render/image-render.js +3 -2
  248. package/es/render/contributions/render/image-render.js.map +1 -1
  249. package/es/render/contributions/render/incremental-area-render.js +1 -1
  250. package/es/render/contributions/render/incremental-area-render.js.map +1 -1
  251. package/es/render/contributions/render/incremental-line-render.js +1 -1
  252. package/es/render/contributions/render/incremental-line-render.js.map +1 -1
  253. package/es/render/contributions/render/line-render.js +1 -1
  254. package/es/render/contributions/render/line-render.js.map +1 -1
  255. package/es/render/contributions/render/module.js +3 -1
  256. package/es/render/contributions/render/module.js.map +1 -1
  257. package/es/render/contributions/render/path-render.js +1 -1
  258. package/es/render/contributions/render/path-render.js.map +1 -1
  259. package/es/render/contributions/render/polygon-render.js +2 -2
  260. package/es/render/contributions/render/polygon-render.js.map +1 -1
  261. package/es/render/contributions/render/rect-render.js +1 -1
  262. package/es/render/contributions/render/rect-render.js.map +1 -1
  263. package/es/render/contributions/render/symbol-render.js +1 -1
  264. package/es/render/contributions/render/symbol-render.js.map +1 -1
  265. package/es/render/contributions/render/text-render.js +11 -4
  266. package/es/render/contributions/render/text-render.js.map +1 -1
  267. package/es/render/contributions/render/utils.js +2 -2
  268. package/es/render/contributions/render/utils.js.map +1 -1
  269. package/package.json +3 -3
@@ -13,4 +13,4 @@ exports.default = new inversify_lite_1.ContainerModule((bind => {
13
13
  bind(graphic_utils_1.DefaultTransformUtil).toSelf().inSingletonScope(), bind(constants_1.TransformUtil).toService(graphic_utils_1.DefaultTransformUtil),
14
14
  bind(layer_service_1.DefaultLayerService).toSelf().inSingletonScope(), bind(constants_1.LayerService).toService(layer_service_1.DefaultLayerService);
15
15
  }));
16
- //# sourceMappingURL=core-modules.js.map
16
+ //# sourceMappingURL=core-modules.js.map
@@ -1 +1,3 @@
1
+
2
+
1
3
  //# sourceMappingURL=global-module.js.map
@@ -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,36 @@ 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: options.canvasId ? "static" : layerMode,
48
+ canvasId: options.canvasId,
49
+ layerHandler: layerHandler
38
50
  })), stageLayers = this.layerMap.get(stage) || [];
39
51
  return stageLayers.push(layer), this.layerMap.set(stage, stageLayers), this.staticLayerCountInEnv--,
40
52
  layer;
41
53
  }
54
+ prepareStageLayer(stage) {
55
+ let mainHandler;
56
+ stage.forEachChildren((l => {
57
+ const handler = l.getNativeHandler();
58
+ "virtual" === handler.type ? (handler.mainHandler = mainHandler, mainHandler.secondaryHandlers.push(handler)) : (mainHandler = handler,
59
+ mainHandler.secondaryHandlers = []);
60
+ }));
61
+ }
42
62
  releaseLayer(stage, layer) {
43
63
  layer.release();
44
64
  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: options.canvasId ? 'static' : layerMode,\n canvasId: options.canvasId,\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(canvasId?: string, 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(canvasId, 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,33 +273,15 @@ 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) {
283
+ combineLayersToWindow() {}
284
+ renderNextFrame(layers, force) {
303
285
  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()((() => {
@@ -307,17 +289,34 @@ class Stage extends graphic_1.Group {
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
+ })), this.interactiveLayer && !layerList.includes(this.interactiveLayer) && this.interactiveLayer.render({
315
+ renderService: this.renderService,
316
+ updateBounds: !!this.dirtyBounds
317
+ }, Object.assign({
318
+ renderStyle: this.renderStyle
319
+ }, params));
321
320
  }
322
321
  resizeWindow(w, h, rerender = !0) {
323
322
  this.window.resize(w, h), rerender && this.render();