ol 9.0.0-dev.1707154322322 → 9.0.0-dev.1707413332477

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 (105) hide show
  1. package/Map.d.ts +5 -10
  2. package/Map.d.ts.map +1 -1
  3. package/Map.js +3 -17
  4. package/VectorRenderTile.d.ts +0 -7
  5. package/VectorRenderTile.d.ts.map +1 -1
  6. package/VectorRenderTile.js +0 -6
  7. package/dist/ol.d.ts +2 -0
  8. package/dist/ol.d.ts.map +1 -1
  9. package/dist/ol.js +2 -2
  10. package/dist/ol.js.map +1 -1
  11. package/layer/BaseVector.d.ts +7 -22
  12. package/layer/BaseVector.d.ts.map +1 -1
  13. package/layer/BaseVector.js +12 -20
  14. package/layer/Layer.d.ts +12 -0
  15. package/layer/Layer.d.ts.map +1 -1
  16. package/layer/Layer.js +23 -0
  17. package/layer/VectorImage.d.ts +10 -6
  18. package/layer/VectorImage.d.ts.map +1 -1
  19. package/layer/VectorImage.js +5 -3
  20. package/layer/VectorTile.d.ts +22 -30
  21. package/layer/VectorTile.d.ts.map +1 -1
  22. package/layer/VectorTile.js +10 -14
  23. package/package.json +1 -1
  24. package/render/VectorContext.d.ts +22 -11
  25. package/render/VectorContext.d.ts.map +1 -1
  26. package/render/VectorContext.js +22 -11
  27. package/render/canvas/Builder.d.ts +2 -1
  28. package/render/canvas/Builder.d.ts.map +1 -1
  29. package/render/canvas/Builder.js +19 -3
  30. package/render/canvas/Executor.d.ts +18 -7
  31. package/render/canvas/Executor.d.ts.map +1 -1
  32. package/render/canvas/Executor.js +101 -57
  33. package/render/canvas/ExecutorGroup.d.ts +39 -9
  34. package/render/canvas/ExecutorGroup.d.ts.map +1 -1
  35. package/render/canvas/ExecutorGroup.js +96 -25
  36. package/render/canvas/ImageBuilder.d.ts +1 -1
  37. package/render/canvas/ImageBuilder.d.ts.map +1 -1
  38. package/render/canvas/ImageBuilder.js +30 -8
  39. package/render/canvas/Immediate.d.ts +11 -0
  40. package/render/canvas/Immediate.d.ts.map +1 -1
  41. package/render/canvas/LineStringBuilder.d.ts.map +1 -1
  42. package/render/canvas/LineStringBuilder.js +6 -4
  43. package/render/canvas/PolygonBuilder.d.ts.map +1 -1
  44. package/render/canvas/PolygonBuilder.js +9 -6
  45. package/render/canvas/TextBuilder.d.ts +4 -0
  46. package/render/canvas/TextBuilder.d.ts.map +1 -1
  47. package/render/canvas/TextBuilder.js +15 -6
  48. package/render/canvas/ZIndexContext.d.ts +56 -0
  49. package/render/canvas/ZIndexContext.d.ts.map +1 -0
  50. package/render/canvas/ZIndexContext.js +112 -0
  51. package/render/canvas/style.d.ts.map +1 -1
  52. package/render/canvas/style.js +9 -2
  53. package/render/canvas.d.ts +2 -2
  54. package/render/canvas.d.ts.map +1 -1
  55. package/render/canvas.js +6 -2
  56. package/renderer/Composite.d.ts +3 -2
  57. package/renderer/Composite.d.ts.map +1 -1
  58. package/renderer/Composite.js +26 -19
  59. package/renderer/Layer.d.ts +4 -0
  60. package/renderer/Layer.d.ts.map +1 -1
  61. package/renderer/Layer.js +5 -0
  62. package/renderer/Map.d.ts +0 -4
  63. package/renderer/Map.d.ts.map +1 -1
  64. package/renderer/Map.js +0 -5
  65. package/renderer/canvas/Layer.d.ts +4 -0
  66. package/renderer/canvas/Layer.d.ts.map +1 -1
  67. package/renderer/canvas/Layer.js +32 -0
  68. package/renderer/canvas/VectorImageLayer.d.ts.map +1 -1
  69. package/renderer/canvas/VectorImageLayer.js +8 -1
  70. package/renderer/canvas/VectorLayer.d.ts +6 -5
  71. package/renderer/canvas/VectorLayer.d.ts.map +1 -1
  72. package/renderer/canvas/VectorLayer.js +55 -58
  73. package/renderer/canvas/VectorTileLayer.d.ts +14 -3
  74. package/renderer/canvas/VectorTileLayer.d.ts.map +1 -1
  75. package/renderer/canvas/VectorTileLayer.js +129 -60
  76. package/renderer/vector.d.ts +3 -2
  77. package/renderer/vector.d.ts.map +1 -1
  78. package/renderer/vector.js +68 -126
  79. package/renderer/webgl/PointsLayer.d.ts +1 -0
  80. package/renderer/webgl/PointsLayer.d.ts.map +1 -1
  81. package/renderer/webgl/PointsLayer.js +2 -0
  82. package/source/Raster.js +1 -1
  83. package/source/WMTS.js +1 -1
  84. package/style/Circle.d.ts +2 -2
  85. package/style/Circle.d.ts.map +1 -1
  86. package/style/Circle.js +1 -1
  87. package/style/Icon.d.ts +1 -1
  88. package/style/Icon.d.ts.map +1 -1
  89. package/style/Icon.js +1 -1
  90. package/style/Image.d.ts +7 -6
  91. package/style/Image.d.ts.map +1 -1
  92. package/style/Image.js +4 -3
  93. package/style/RegularShape.d.ts +2 -2
  94. package/style/RegularShape.d.ts.map +1 -1
  95. package/style/RegularShape.js +1 -1
  96. package/style/Style.d.ts +17 -0
  97. package/style/Style.d.ts.map +1 -1
  98. package/style/Style.js +10 -0
  99. package/style/Text.d.ts +16 -0
  100. package/style/Text.d.ts.map +1 -1
  101. package/style/Text.js +17 -0
  102. package/style/flat.d.ts +11 -6
  103. package/style/flat.d.ts.map +1 -1
  104. package/style/flat.js +4 -3
  105. package/util.js +1 -1
@@ -0,0 +1,112 @@
1
+ /**
2
+ * @module ol/render/canvas/ZIndexContext
3
+ */
4
+
5
+ /** @typedef {CanvasRenderingContext2D & {globalAlpha: any}} ZIndexContextProxy */
6
+
7
+ /**
8
+ * @extends {CanvasRenderingContext2D}
9
+ */
10
+ class ZIndexContext {
11
+ constructor() {
12
+ /**
13
+ * @private
14
+ * @type {Array<Array<*>>}
15
+ */
16
+ this.instructions_ = [];
17
+ /**
18
+ * @type {number}
19
+ */
20
+ this.zIndex = 0;
21
+ /**
22
+ * @private
23
+ * @type {number}
24
+ */
25
+ this.offset_ = 0;
26
+
27
+ /**
28
+ * @type {ZIndexContextProxy}
29
+ */
30
+ this.context_ = /** @type {ZIndexContextProxy} */ (
31
+ new Proxy(CanvasRenderingContext2D.prototype, {
32
+ get: (target, property) => {
33
+ if (typeof (/** @type {*} */ (target)[property]) !== 'function') {
34
+ // we only accept calling functions on the proxy, not accessing properties
35
+ return undefined;
36
+ }
37
+ if (!this.instructions_[this.zIndex + this.offset_]) {
38
+ this.instructions_[this.zIndex + this.offset_] = [];
39
+ }
40
+ this.instructions_[this.zIndex + this.offset_].push(property);
41
+ return this.pushMethodArgs_;
42
+ },
43
+ set: (target, property, value) => {
44
+ if (!this.instructions_[this.zIndex + this.offset_]) {
45
+ this.instructions_[this.zIndex + this.offset_] = [];
46
+ }
47
+ this.instructions_[this.zIndex + this.offset_].push(property, value);
48
+ return true;
49
+ },
50
+ })
51
+ );
52
+ }
53
+
54
+ /**
55
+ * @private
56
+ * @param {...*} args Args.
57
+ * @return {ZIndexContext} This.
58
+ */
59
+ pushMethodArgs_ = (...args) => {
60
+ this.instructions_[this.zIndex + this.offset_].push(args);
61
+ return this;
62
+ };
63
+
64
+ /**
65
+ * Get a proxy for CanvasRenderingContext2D which does not support getting state
66
+ * (e.g. `context.globalAlpha`, which will return `undefined`). To set state, if it relies on a
67
+ * previous state (e.g. `context.globalAlpha = context.globalAlpha / 2`), set a function,
68
+ * e.g. `context.globalAlpha = (context) => context.globalAlpha / 2`.
69
+ * @return {ZIndexContextProxy} Context.
70
+ */
71
+ getContext() {
72
+ return this.context_;
73
+ }
74
+
75
+ /**
76
+ * @param {CanvasRenderingContext2D} context Context.
77
+ */
78
+ draw(context) {
79
+ this.instructions_.forEach((instructionsAtIndex) => {
80
+ for (let i = 0, ii = instructionsAtIndex.length; i < ii; i += 2) {
81
+ const property = instructionsAtIndex[i];
82
+ const instructionAtIndex = instructionsAtIndex[i + 1];
83
+ if (typeof (/** @type {*} */ (context)[property]) === 'function') {
84
+ /** @type {*} */ (context)[property](...instructionAtIndex);
85
+ } else {
86
+ if (typeof instructionAtIndex === 'function') {
87
+ /** @type {*} */ (context)[property] = instructionAtIndex(context);
88
+ continue;
89
+ }
90
+ /** @type {*} */ (context)[property] = instructionAtIndex;
91
+ }
92
+ }
93
+ });
94
+ }
95
+
96
+ clear() {
97
+ this.instructions_.length = 0;
98
+ this.zIndex = 0;
99
+ this.offset_ = 0;
100
+ }
101
+
102
+ /**
103
+ * Offsets the zIndex by the highest current zIndex. Useful for rendering multiple worlds or tiles, to
104
+ * avoid conflicting context.clip() or context.save()/restore() calls.
105
+ */
106
+ offset() {
107
+ this.offset_ = this.instructions_.length;
108
+ this.zIndex = 0;
109
+ }
110
+ }
111
+
112
+ export default ZIndexContext;
@@ -1 +1 @@
1
- {"version":3,"file":"style.d.ts","sourceRoot":"","sources":["style.js"],"names":[],"mappings":"AAgEA;;;;;;;GAOG;AACH,4CAHW,MAAM,OAAO,qBAAqB,EAAE,IAAI,CAAC,GACxC,OAAO,sBAAsB,EAAE,aAAa,CAwBvD;AAED;;;;;;;GAOG;AACH,sDAHW,MAAM,OAAO,qBAAqB,EAAE,SAAS,CAAC,GAC7C,OAAO,sBAAsB,EAAE,aAAa,CA0CvD;AAED;;GAEG;AAEH;;;;GAIG;AAEH;;;;GAIG;AACH,oCAJW,MAAM,OAAO,qBAAqB,EAAE,IAAI,CAAC,WACzC,cAAc,GACb,gBAAgB,CA6D3B;AAED;;GAEG;AAEH;;;;;GAKG;AACH,sCALW,SAAS,WACT,cAAc,GACb,cAAc,CAgEzB;wBApQY,OAAO,qBAAqB,EAAE,SAAS;gCAIvC,OAAO,0BAA0B,EAAE,iBAAiB;6BAIpD,OAAO,0BAA0B,EAAE,cAAc;6BAIjD,OAAO,0BAA0B,EAAE,cAAc;gCAIjD,OAAO,mBAAmB,EAAE,iBAAiB;kCAI7C,OAAO,mBAAmB,EAAE,mBAAmB;sCA8FtC,iBAAiB,KAAE,MAAM,KAAK,CAAC;;;;;YAKvC,mBAAmB;;;;YACnB,MAAM,cAAc,CAAC;;oCAsEb,iBAAiB,KAAE,KAAK,GAAC,IAAI;mCAyE7B,iBAAiB,KAAE,IAAI,GAAC,IAAI;qCAoC5B,iBAAiB,KAAE,MAAM,GAAC,IAAI;mCA2G9B,iBAAiB,KAAE,IAAI;oCAyNvB,iBAAiB,KAAE,OAAO,sBAAsB,EAAE,OAAO;kBAvoB7D,sBAAsB;iBAJvB,qBAAqB;mBAGnB,uBAAuB;iBAEzB,qBAAqB"}
1
+ {"version":3,"file":"style.d.ts","sourceRoot":"","sources":["style.js"],"names":[],"mappings":"AAgEA;;;;;;;GAOG;AACH,4CAHW,MAAM,OAAO,qBAAqB,EAAE,IAAI,CAAC,GACxC,OAAO,sBAAsB,EAAE,aAAa,CAwBvD;AAED;;;;;;;GAOG;AACH,sDAHW,MAAM,OAAO,qBAAqB,EAAE,SAAS,CAAC,GAC7C,OAAO,sBAAsB,EAAE,aAAa,CA0CvD;AAED;;GAEG;AAEH;;;;GAIG;AAEH;;;;GAIG;AACH,oCAJW,MAAM,OAAO,qBAAqB,EAAE,IAAI,CAAC,WACzC,cAAc,GACb,gBAAgB,CA6D3B;AAED;;GAEG;AAEH;;;;;GAKG;AACH,sCALW,SAAS,WACT,cAAc,GACb,cAAc,CAgEzB;wBApQY,OAAO,qBAAqB,EAAE,SAAS;gCAIvC,OAAO,0BAA0B,EAAE,iBAAiB;6BAIpD,OAAO,0BAA0B,EAAE,cAAc;6BAIjD,OAAO,0BAA0B,EAAE,cAAc;gCAIjD,OAAO,mBAAmB,EAAE,iBAAiB;kCAI7C,OAAO,mBAAmB,EAAE,mBAAmB;sCA8FtC,iBAAiB,KAAE,MAAM,KAAK,CAAC;;;;;YAKvC,mBAAmB;;;;YACnB,MAAM,cAAc,CAAC;;oCAsEb,iBAAiB,KAAE,KAAK,GAAC,IAAI;mCAyE7B,iBAAiB,KAAE,IAAI,GAAC,IAAI;qCAoC5B,iBAAiB,KAAE,MAAM,GAAC,IAAI;mCA2G9B,iBAAiB,KAAE,IAAI;oCAgOvB,iBAAiB,KAAE,OAAO,sBAAsB,EAAE,OAAO;kBA9oB7D,sBAAsB;iBAJvB,qBAAqB;mBAGnB,uBAAuB;iBAEzB,qBAAqB"}
@@ -541,7 +541,14 @@ function buildText(flatStyle, context) {
541
541
  context,
542
542
  );
543
543
 
544
- const text = new Text({});
544
+ // The following properties are not currently settable
545
+ const declutterMode = optionalDeclutterMode(
546
+ flatStyle,
547
+ prefix + 'declutter-mode',
548
+ );
549
+
550
+ const text = new Text({declutterMode});
551
+
545
552
  return function (context) {
546
553
  text.setText(evaluateValue(context));
547
554
 
@@ -1217,7 +1224,7 @@ function optionalNumberArray(flatStyle, property) {
1217
1224
  /**
1218
1225
  * @param {FlatStyle} flatStyle The flat style.
1219
1226
  * @param {string} property The symbolizer property.
1220
- * @return {"declutter"|"obstacle"|"none"|undefined} Icon declutter mode.
1227
+ * @return {import('../../style/Style.js').DeclutterMode} Icon declutter mode.
1221
1228
  */
1222
1229
  function optionalDeclutterMode(flatStyle, property) {
1223
1230
  const encoded = flatStyle[property];
@@ -34,7 +34,7 @@ export function getTextDimensions(baseStyle: TextState, chunks: Array<string>):
34
34
  */
35
35
  export function rotateAtOffset(context: CanvasRenderingContext2D, rotation: number, offsetX: number, offsetY: number): void;
36
36
  /**
37
- * @param {CanvasRenderingContext2D} context Context.
37
+ * @param {CanvasRenderingContext2D|import("../render/canvas/ZIndexContext.js").ZIndexContextProxy} context Context.
38
38
  * @param {import("../transform.js").Transform|null} transform Transform.
39
39
  * @param {number} opacity Opacity.
40
40
  * @param {Label|HTMLCanvasElement|HTMLImageElement|HTMLVideoElement} labelOrImage Label.
@@ -46,7 +46,7 @@ export function rotateAtOffset(context: CanvasRenderingContext2D, rotation: numb
46
46
  * @param {number} y Y.
47
47
  * @param {import("../size.js").Size} scale Scale.
48
48
  */
49
- export function drawImageOrLabel(context: CanvasRenderingContext2D, transform: import("../transform.js").Transform | null, opacity: number, labelOrImage: Label | HTMLCanvasElement | HTMLImageElement | HTMLVideoElement, originX: number, originY: number, w: number, h: number, x: number, y: number, scale: import("../size.js").Size): void;
49
+ export function drawImageOrLabel(context: CanvasRenderingContext2D | import("../render/canvas/ZIndexContext.js").ZIndexContextProxy, transform: import("../transform.js").Transform | null, opacity: number, labelOrImage: Label | HTMLCanvasElement | HTMLImageElement | HTMLVideoElement, originX: number, originY: number, w: number, h: number, x: number, y: number, scale: import("../size.js").Size): void;
50
50
  /**
51
51
  * @typedef {'Circle' | 'Image' | 'LineString' | 'Polygon' | 'Text' | 'Default'} BuilderType
52
52
  */
@@ -1 +1 @@
1
- {"version":3,"file":"canvas.d.ts","sourceRoot":"","sources":["canvas.js"],"names":[],"mappings":"AAgVA;;;;GAIG;AACH,uCAJW,MAAM,QACN,MAAM,GACL,MAAM,CAIjB;AAED;;;;;;GAMG;AACH,+CALW,MAAM,QACN,MAAM;QACC,MAAM,GAAE,MAAM;IACpB,MAAM,CAWjB;AAED;;;;GAIG;AACH,6CAJW,SAAS,UACT,MAAM,MAAM,CAAC;WACJ,MAAM;YAAU,MAAM;YAAU,MAAM,MAAM,CAAC;aAAW,MAAM,MAAM,CAAC;gBAAc,MAAM,MAAM,CAAC;EA4BnH;AAED;;;;;GAKG;AACH,wCALW,wBAAwB,YACxB,MAAM,WACN,MAAM,WACN,MAAM,QAQhB;AAED;;;;;;;;;;;;GAYG;AACH,0CAZW,wBAAwB,aACxB,OAAO,iBAAiB,EAAE,SAAS,GAAC,IAAI,WACxC,MAAM,gBACN,KAAK,GAAC,iBAAiB,GAAC,gBAAgB,GAAC,gBAAgB,WACzD,MAAM,WACN,MAAM,KACN,MAAM,KACN,MAAM,KACN,MAAM,KACN,MAAM,SACN,OAAO,YAAY,EAAE,IAAI,QAgEnC;AA5dD;;GAEG;AAEH;;;GAGG;AAEH;;;;;GAKG;AAEH;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH;;;;;;;;;GASG;AAEH;;;;;;;;;;;;;;GAcG;AAEH;;;;;;;;GAQG;AAEH;;GAEG;AAEH;;;GAGG;AACH,0BAFU,MAAM,CAE6B;AAE7C;;;GAGG;AACH,+BAFU,MAAM,CAEuB;AAEvC;;;GAGG;AACH,6BAFU,aAAa,CAEe;AAEtC;;;GAGG;AACH,8BAFU,MAAM,MAAM,CAAC,CAEW;AAElC;;;GAGG;AACH,oCAFU,MAAM,CAEuB;AAEvC;;;GAGG;AACH,8BAFU,cAAc,CAEe;AAEvC;;;GAGG;AACH,gCAFU,MAAM,CAEoB;AAEpC;;;GAGG;AACH,iCAFU,OAAO,iBAAiB,EAAE,SAAS,CAEJ;AAEzC;;;GAGG;AACH,+BAFU,eAAe,CAEgB;AAEzC;;;GAGG;AACH,kCAFU,kBAAkB,CAEgB;AAE5C;;;GAGG;AACH,6BAFU,MAAM,MAAM,CAAC,CAEoB;AAE3C;;;GAGG;AACH,+BAFU,MAAM,CAEkB;AAElC;;GAEG;AACH,2BAFU,UAAU,CAEyB;AAY7C;;GAEG;AACH;QAFkB,MAAM,GAAE,MAAM;EAEF;AA2ErB,kDAmBN;AAYM,yDAiCN;0BAnTU,QAAQ,GAAG,OAAO,GAAG,YAAY,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS;;;;;eAKjE,OAAO,iBAAiB,EAAE,SAAS;;;;;;WAKnC,MAAM;;;;YACN,MAAM;;;;yBACN,MAAM,MAAM,GAAC,MAAM,CAAC;;;;;;;;;;;;;;;;;;qBAQpB,MAAM,MAAM,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cASb,MAAM,MAAM,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;aAUb,aAAa;;;;cACb,MAAM,MAAM,CAAC;;;;oBACb,MAAM;;;;cACN,cAAc;;;;eACd,MAAM;;;;gBACN,MAAM;;;;iBACN,OAAO,iBAAiB,EAAE,SAAS;;;;;;UAKnC,MAAM;;;;;;;;;;;;;;;;kBAIN,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAYlB,UAAQ;;;;8BACR,UAAQ;;;;iBACR,MAAM,MAAM,CAAC;;;;;;;;;;;;;;;;;;;;;QAOP,MAAM,GAAE,OAAO,sBAAsB,EAAE,sBAAsB;;uBAlF1D,cAAc"}
1
+ {"version":3,"file":"canvas.d.ts","sourceRoot":"","sources":["canvas.js"],"names":[],"mappings":"AAgVA;;;;GAIG;AACH,uCAJW,MAAM,QACN,MAAM,GACL,MAAM,CAIjB;AAED;;;;;;GAMG;AACH,+CALW,MAAM,QACN,MAAM;QACC,MAAM,GAAE,MAAM;IACpB,MAAM,CAWjB;AAED;;;;GAIG;AACH,6CAJW,SAAS,UACT,MAAM,MAAM,CAAC;WACJ,MAAM;YAAU,MAAM;YAAU,MAAM,MAAM,CAAC;aAAW,MAAM,MAAM,CAAC;gBAAc,MAAM,MAAM,CAAC;EA4BnH;AAED;;;;;GAKG;AACH,wCALW,wBAAwB,YACxB,MAAM,WACN,MAAM,WACN,MAAM,QAQhB;AAED;;;;;;;;;;;;GAYG;AACH,0CAZW,wBAAwB,GAAC,OAAO,mCAAmC,EAAE,kBAAkB,aACvF,OAAO,iBAAiB,EAAE,SAAS,GAAC,IAAI,WACxC,MAAM,gBACN,KAAK,GAAC,iBAAiB,GAAC,gBAAgB,GAAC,gBAAgB,WACzD,MAAM,WACN,MAAM,KACN,MAAM,KACN,MAAM,KACN,MAAM,KACN,MAAM,SACN,OAAO,YAAY,EAAE,IAAI,QAoEnC;AAheD;;GAEG;AAEH;;;GAGG;AAEH;;;;;GAKG;AAEH;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH;;;;;;;;;GASG;AAEH;;;;;;;;;;;;;;GAcG;AAEH;;;;;;;;GAQG;AAEH;;GAEG;AAEH;;;GAGG;AACH,0BAFU,MAAM,CAE6B;AAE7C;;;GAGG;AACH,+BAFU,MAAM,CAEuB;AAEvC;;;GAGG;AACH,6BAFU,aAAa,CAEe;AAEtC;;;GAGG;AACH,8BAFU,MAAM,MAAM,CAAC,CAEW;AAElC;;;GAGG;AACH,oCAFU,MAAM,CAEuB;AAEvC;;;GAGG;AACH,8BAFU,cAAc,CAEe;AAEvC;;;GAGG;AACH,gCAFU,MAAM,CAEoB;AAEpC;;;GAGG;AACH,iCAFU,OAAO,iBAAiB,EAAE,SAAS,CAEJ;AAEzC;;;GAGG;AACH,+BAFU,eAAe,CAEgB;AAEzC;;;GAGG;AACH,kCAFU,kBAAkB,CAEgB;AAE5C;;;GAGG;AACH,6BAFU,MAAM,MAAM,CAAC,CAEoB;AAE3C;;;GAGG;AACH,+BAFU,MAAM,CAEkB;AAElC;;GAEG;AACH,2BAFU,UAAU,CAEyB;AAY7C;;GAEG;AACH;QAFkB,MAAM,GAAE,MAAM;EAEF;AA2ErB,kDAmBN;AAYM,yDAiCN;0BAnTU,QAAQ,GAAG,OAAO,GAAG,YAAY,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS;;;;;eAKjE,OAAO,iBAAiB,EAAE,SAAS;;;;;;WAKnC,MAAM;;;;YACN,MAAM;;;;yBACN,MAAM,MAAM,GAAC,MAAM,CAAC;;;;;;;;;;;;;;;;;;qBAQpB,MAAM,MAAM,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cASb,MAAM,MAAM,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;aAUb,aAAa;;;;cACb,MAAM,MAAM,CAAC;;;;oBACb,MAAM;;;;cACN,cAAc;;;;eACd,MAAM;;;;gBACN,MAAM;;;;iBACN,OAAO,iBAAiB,EAAE,SAAS;;;;;;UAKnC,MAAM;;;;;;;;;;;;;;;;kBAIN,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAYlB,UAAQ;;;;8BACR,UAAQ;;;;iBACR,MAAM,MAAM,CAAC;;;;;;;;;;;;;;;;;;;;;QAOP,MAAM,GAAE,OAAO,sBAAsB,EAAE,sBAAsB;;uBAlF1D,cAAc"}
package/render/canvas.js CHANGED
@@ -409,7 +409,7 @@ export function rotateAtOffset(context, rotation, offsetX, offsetY) {
409
409
  }
410
410
 
411
411
  /**
412
- * @param {CanvasRenderingContext2D} context Context.
412
+ * @param {CanvasRenderingContext2D|import("../render/canvas/ZIndexContext.js").ZIndexContextProxy} context Context.
413
413
  * @param {import("../transform.js").Transform|null} transform Transform.
414
414
  * @param {number} opacity Opacity.
415
415
  * @param {Label|HTMLCanvasElement|HTMLImageElement|HTMLVideoElement} labelOrImage Label.
@@ -437,7 +437,11 @@ export function drawImageOrLabel(
437
437
  context.save();
438
438
 
439
439
  if (opacity !== 1) {
440
- context.globalAlpha *= opacity;
440
+ if (context.globalAlpha === undefined) {
441
+ context.globalAlpha = (context) => (context.globalAlpha *= opacity);
442
+ } else {
443
+ context.globalAlpha *= opacity;
444
+ }
441
445
  }
442
446
  if (transform) {
443
447
  context.transform.apply(context, transform);
@@ -25,9 +25,10 @@ declare class CompositeMapRenderer extends MapRenderer {
25
25
  */
26
26
  private renderedVisible_;
27
27
  /**
28
- * @type {Array<import("../layer/BaseVector.js").default>}
28
+ * @param {import("../Map.js").FrameState} frameState Frame state.
29
+ * @param {Array<import('../layer/Layer.js').State>} layerStates Layers.
29
30
  */
30
- declutterLayers_: Array<import("../layer/BaseVector.js").default<any, any>>;
31
+ declutter(frameState: import("../Map.js").FrameState, layerStates: Array<import('../layer/Layer.js').State>): void;
31
32
  }
32
33
  import MapRenderer from './Map.js';
33
34
  //# sourceMappingURL=Composite.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Composite.d.ts","sourceRoot":"","sources":["Composite.js"],"names":[],"mappings":";AAaA;;;;GAIG;AACH;IAOI;;OAEG;IACH,wBAFU,OAAO,cAAc,EAAE,SAAS,CAMzC;IAED;;;OAGG;IACH,iBAA6C;IAY7C;;;OAGG;IACH,kBAAmB;IAEnB;;;OAGG;IACH,yBAA4B;IAE5B;;OAEG;IACH,kBAFU,yDAA+C,CAE/B;CAoG7B;wBAlKuB,UAAU"}
1
+ {"version":3,"file":"Composite.d.ts","sourceRoot":"","sources":["Composite.js"],"names":[],"mappings":";AAcA;;;;GAIG;AACH;IAOI;;OAEG;IACH,wBAFU,OAAO,cAAc,EAAE,SAAS,CAMzC;IAED;;;OAGG;IACH,iBAA6C;IAY7C;;;OAGG;IACH,kBAAmB;IAEnB;;;OAGG;IACH,yBAA4B;IA+F9B;;;OAGG;IACH,sBAHW,OAAO,WAAW,EAAE,UAAU,eAC9B,MAAM,OAAO,mBAAmB,EAAE,KAAK,CAAC,QAalD;CACF;wBAxKuB,UAAU"}
@@ -1,6 +1,7 @@
1
1
  /**
2
2
  * @module ol/renderer/Composite
3
3
  */
4
+ import BaseVectorLayer from '../layer/BaseVector.js';
4
5
  import MapRenderer from './Map.js';
5
6
  import ObjectEventType from '../ObjectEventType.js';
6
7
  import RenderEvent from '../render/Event.js';
@@ -59,11 +60,6 @@ class CompositeMapRenderer extends MapRenderer {
59
60
  * @type {boolean}
60
61
  */
61
62
  this.renderedVisible_ = true;
62
-
63
- /**
64
- * @type {Array<import("../layer/BaseVector.js").default>}
65
- */
66
- this.declutterLayers_ = [];
67
63
  }
68
64
 
69
65
  /**
@@ -103,13 +99,20 @@ class CompositeMapRenderer extends MapRenderer {
103
99
  const layerStatesArray = frameState.layerStatesArray.sort(function (a, b) {
104
100
  return a.zIndex - b.zIndex;
105
101
  });
102
+ const declutter = layerStatesArray.some(
103
+ (layerState) =>
104
+ layerState.layer instanceof BaseVectorLayer &&
105
+ layerState.layer.getDeclutter(),
106
+ );
107
+ if (declutter) {
108
+ // Some layers need decluttering, turn on deferred rendering hint
109
+ frameState.declutter = {};
110
+ }
106
111
  const viewState = frameState.viewState;
107
112
 
108
113
  this.children_.length = 0;
109
114
 
110
- const declutterLayers = this.declutterLayers_;
111
- declutterLayers.length = 0;
112
-
115
+ const renderedLayerStates = [];
113
116
  let previousElement = null;
114
117
  for (let i = 0, ii = layerStatesArray.length; i < ii; ++i) {
115
118
  const layerState = layerStatesArray[i];
@@ -133,13 +136,11 @@ class CompositeMapRenderer extends MapRenderer {
133
136
  this.children_.push(element);
134
137
  previousElement = element;
135
138
  }
136
- if ('getDeclutter' in layer) {
137
- declutterLayers.push(
138
- /** @type {import("../layer/BaseVector.js").default} */ (layer),
139
- );
140
- }
139
+
140
+ renderedLayerStates.push(layerState);
141
141
  }
142
- this.flushDeclutterItems(frameState);
142
+
143
+ this.declutter(frameState, renderedLayerStates);
143
144
 
144
145
  replaceChildren(this.element_, this.children_);
145
146
 
@@ -155,13 +156,19 @@ class CompositeMapRenderer extends MapRenderer {
155
156
 
156
157
  /**
157
158
  * @param {import("../Map.js").FrameState} frameState Frame state.
159
+ * @param {Array<import('../layer/Layer.js').State>} layerStates Layers.
158
160
  */
159
- flushDeclutterItems(frameState) {
160
- const layers = this.declutterLayers_;
161
- for (let i = layers.length - 1; i >= 0; --i) {
162
- layers[i].renderDeclutter(frameState, frameState.layerStatesArray[i]);
161
+ declutter(frameState, layerStates) {
162
+ for (let i = layerStates.length - 1; i >= 0; --i) {
163
+ const layerState = layerStates[i];
164
+ const layer = layerState.layer;
165
+ if (layer.getDeclutter()) {
166
+ layer.renderDeclutter(frameState, layerState);
167
+ }
163
168
  }
164
- layers.length = 0;
169
+ layerStates.forEach((layerState) =>
170
+ layerState.layer.renderDeferred(frameState),
171
+ );
165
172
  }
166
173
  }
167
174
 
@@ -113,6 +113,10 @@ declare class LayerRenderer<LayerType extends import("../layer/Layer.js").defaul
113
113
  * @protected
114
114
  */
115
115
  protected renderIfReadyAndVisible(): void;
116
+ /**
117
+ * @param {import("../Map.js").FrameState} frameState Frame state.
118
+ */
119
+ renderDeferred(frameState: import("../Map.js").FrameState): void;
116
120
  }
117
121
  import Observable from '../Observable.js';
118
122
  //# sourceMappingURL=Layer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Layer.d.ts","sourceRoot":"","sources":["Layer.js"],"names":[],"mappings":";AAQA;;GAEG;AACH;IACE;;OAEG;IACH,mBAFW,SAAS,EAwBnB;IAnBC;;;OAGG;IACH,OAFU,OAAO,CAEA;IAEjB,eAAe;IACf,gCAAiE;IAEjE;;;OAGG;IACH,kBAFU,SAAS,CAEA;IAEnB;;OAEG;IACH,wBAFU,OAAO,gCAAgC,EAAE,OAAO,CAExB;IAGpC;;;;;OAKG;IACH,mBAJW,OAAO,aAAa,EAAE,KAAK,GAC1B,QAAQ,MAAM,OAAO,YAAY,EAAE,WAAW,CAAC,CAAC,CAK3D;IAED;;;OAGG;IACH,eAHW,OAAO,aAAa,EAAE,KAAK,GAC1B,iBAAiB,GAAC,UAAU,GAAC,YAAY,GAAC,QAAQ,GAAC,IAAI,CAIlE;IAED;;;;;OAKG;IACH,yBAHW,OAAO,WAAW,EAAE,UAAU,GAC7B,OAAO,CAIlB;IAED;;;;;;OAMG;IACH,wBAJW,OAAO,WAAW,EAAE,UAAU,UAC9B,WAAW,GAAC,IAAI,GACf,WAAW,GAAC,IAAI,CAI3B;IAED;;;;;OAKG;IACH;YALkB,MAAM;gBAAS,MAAM,GAAE,OAAO,YAAY,EAAE,OAAO;;aAC1D,MAAM,QACN,OAAO,YAAY,EAAE,OAAO,GAC3B,OAAO,GAAC,IAAI,CAQvB;IAED;;;;;;;;OAQG;IACH,yCAPW,OAAO,mBAAmB,EAAE,OAAO,cACnC,OAAO,uBAAuB,EAAE,OAAO;YAChC,MAAM;gBAAS,MAAM,GAAE,OAAO,YAAY,EAAE,OAAO;;eAChD,MAAM,QAAE,OAAO,iBAAiB,EAAE,OAAO,KAAE,OAAO,CAgBtE;IACD;;;;;;;;;OASG;IACH,0CARW,OAAO,kBAAkB,EAAE,UAAU,cACrC,OAAO,WAAW,EAAE,UAAU,gBAC9B,MAAM,gHAchB;IAED;;OAEG;IACH,YAFY,SAAS,CAIpB;IAED;;;OAGG;IACH,2BAAuB;IAEvB;;;;OAIG;IACH,2BAQC;IAED;;;;;;OAMG;IACH,2BAJW,OAAO,aAAa,EAAE,OAAO,GAC5B,OAAO,CAalB;IAED;;OAEG;IACH,0CAKC;CASF;uBAjMsB,kBAAkB"}
1
+ {"version":3,"file":"Layer.d.ts","sourceRoot":"","sources":["Layer.js"],"names":[],"mappings":";AAQA;;GAEG;AACH;IACE;;OAEG;IACH,mBAFW,SAAS,EAwBnB;IAnBC;;;OAGG;IACH,OAFU,OAAO,CAEA;IAEjB,eAAe;IACf,gCAAiE;IAEjE;;;OAGG;IACH,kBAFU,SAAS,CAEA;IAEnB;;OAEG;IACH,wBAFU,OAAO,gCAAgC,EAAE,OAAO,CAExB;IAGpC;;;;;OAKG;IACH,mBAJW,OAAO,aAAa,EAAE,KAAK,GAC1B,QAAQ,MAAM,OAAO,YAAY,EAAE,WAAW,CAAC,CAAC,CAK3D;IAED;;;OAGG;IACH,eAHW,OAAO,aAAa,EAAE,KAAK,GAC1B,iBAAiB,GAAC,UAAU,GAAC,YAAY,GAAC,QAAQ,GAAC,IAAI,CAIlE;IAED;;;;;OAKG;IACH,yBAHW,OAAO,WAAW,EAAE,UAAU,GAC7B,OAAO,CAIlB;IAED;;;;;;OAMG;IACH,wBAJW,OAAO,WAAW,EAAE,UAAU,UAC9B,WAAW,GAAC,IAAI,GACf,WAAW,GAAC,IAAI,CAI3B;IAED;;;;;OAKG;IACH;YALkB,MAAM;gBAAS,MAAM,GAAE,OAAO,YAAY,EAAE,OAAO;;aAC1D,MAAM,QACN,OAAO,YAAY,EAAE,OAAO,GAC3B,OAAO,GAAC,IAAI,CAQvB;IAED;;;;;;;;OAQG;IACH,yCAPW,OAAO,mBAAmB,EAAE,OAAO,cACnC,OAAO,uBAAuB,EAAE,OAAO;YAChC,MAAM;gBAAS,MAAM,GAAE,OAAO,YAAY,EAAE,OAAO;;eAChD,MAAM,QAAE,OAAO,iBAAiB,EAAE,OAAO,KAAE,OAAO,CAgBtE;IACD;;;;;;;;;OASG;IACH,0CARW,OAAO,kBAAkB,EAAE,UAAU,cACrC,OAAO,WAAW,EAAE,UAAU,gBAC9B,MAAM,gHAchB;IAED;;OAEG;IACH,YAFY,SAAS,CAIpB;IAED;;;OAGG;IACH,2BAAuB;IAEvB;;;;OAIG;IACH,2BAQC;IAED;;;;;;OAMG;IACH,2BAJW,OAAO,aAAa,EAAE,OAAO,GAC5B,OAAO,CAalB;IAED;;OAEG;IACH,0CAKC;IAED;;OAEG;IACH,2BAFW,OAAO,WAAW,EAAE,UAAU,QAEZ;CAS9B;uBAtMsB,kBAAkB"}
package/renderer/Layer.js CHANGED
@@ -189,6 +189,11 @@ class LayerRenderer extends Observable {
189
189
  }
190
190
  }
191
191
 
192
+ /**
193
+ * @param {import("../Map.js").FrameState} frameState Frame state.
194
+ */
195
+ renderDeferred(frameState) {}
196
+
192
197
  /**
193
198
  * Clean up.
194
199
  */
package/renderer/Map.d.ts CHANGED
@@ -94,10 +94,6 @@ declare class MapRenderer extends Disposable {
94
94
  * @param {?import("../Map.js").FrameState} frameState Frame state.
95
95
  */
96
96
  renderFrame(frameState: import("../Map.js").FrameState | null): void;
97
- /**
98
- * @param {import("../Map.js").FrameState} frameState Frame state.
99
- */
100
- flushDeclutterItems(frameState: import("../Map.js").FrameState): void;
101
97
  /**
102
98
  * @param {import("../Map.js").FrameState} frameState Frame state.
103
99
  * @protected
@@ -1 +1 @@
1
- {"version":3,"file":"Map.d.ts","sourceRoot":"","sources":["Map.js"],"names":[],"mappings":";;;;;aAec,OAAO,eAAe,EAAE,WAAW;;;;WACnC,OAAO,mBAAmB,EAAE,OAAO;;;;cACnC,OAAO,2BAA2B,EAAE,OAAO;;;;gBAC3C,MAAM;;;;cACN,OAAO,aAAa,EAAE,eAAe,CAAC,CAAC,CAAC;;AAPtD;;;;;;;;GAQG;AAEH;;GAEG;AACH;IACE;;OAEG;IACH,iBAFW,OAAO,WAAW,EAAE,OAAO,EAUrC;IALC;;;OAGG;IACH,aAAe;IAGjB;;;;OAIG;IACH,2CAFW,OAAO,WAAW,EAAE,UAAU,QAIxC;IAED;;;OAGG;IACH,0CAHW,OAAO,WAAW,EAAE,UAAU,QAoBxC;IAED;;;;;;;;;;;;;;OAcG;IACH,gDAdW,OAAO,kBAAkB,EAAE,UAAU,cACrC,OAAO,WAAW,EAAE,UAAU,gBAC9B,MAAM,gBACN,OAAO,+FAGW,OAAO,mBAAmB,EAAE,OAAO,KAAG,OAAO,8BA4FzE;IAED;;;;;;;;;;;;OAYG;IACH,wCAZW,OAAO,kBAAkB,EAAE,UAAU,cACrC,OAAO,WAAW,EAAE,UAAU,gBAC9B,MAAM,gBACN,OAAO,iCACW,OAAO,mBAAmB,EAAE,OAAO,KAAG,OAAO,iBAK9D,OAAO,CAuBlB;IAED;;OAEG;IACH,UAFY,OAAO,WAAW,EAAE,OAAO,CAItC;IAED;;;;OAIG;IACH,wBAFY,OAAO,WAAW,EAAE,UAAU,eAIzC;IAED;;OAEG;IACH,gCAFW,OAAO,WAAW,EAAE,UAAU,QAEP;IAElC;;;OAGG;IACH,8CAHW,OAAO,WAAW,EAAE,UAAU,QAOxC;CACF;uBA1OsB,kBAAkB"}
1
+ {"version":3,"file":"Map.d.ts","sourceRoot":"","sources":["Map.js"],"names":[],"mappings":";;;;;aAec,OAAO,eAAe,EAAE,WAAW;;;;WACnC,OAAO,mBAAmB,EAAE,OAAO;;;;cACnC,OAAO,2BAA2B,EAAE,OAAO;;;;gBAC3C,MAAM;;;;cACN,OAAO,aAAa,EAAE,eAAe,CAAC,CAAC,CAAC;;AAPtD;;;;;;;;GAQG;AAEH;;GAEG;AACH;IACE;;OAEG;IACH,iBAFW,OAAO,WAAW,EAAE,OAAO,EAUrC;IALC;;;OAGG;IACH,aAAe;IAGjB;;;;OAIG;IACH,2CAFW,OAAO,WAAW,EAAE,UAAU,QAIxC;IAED;;;OAGG;IACH,0CAHW,OAAO,WAAW,EAAE,UAAU,QAoBxC;IAED;;;;;;;;;;;;;;OAcG;IACH,gDAdW,OAAO,kBAAkB,EAAE,UAAU,cACrC,OAAO,WAAW,EAAE,UAAU,gBAC9B,MAAM,gBACN,OAAO,+FAGW,OAAO,mBAAmB,EAAE,OAAO,KAAG,OAAO,8BA4FzE;IAED;;;;;;;;;;;;OAYG;IACH,wCAZW,OAAO,kBAAkB,EAAE,UAAU,cACrC,OAAO,WAAW,EAAE,UAAU,gBAC9B,MAAM,gBACN,OAAO,iCACW,OAAO,mBAAmB,EAAE,OAAO,KAAG,OAAO,iBAK9D,OAAO,CAuBlB;IAED;;OAEG;IACH,UAFY,OAAO,WAAW,EAAE,OAAO,CAItC;IAED;;;;OAIG;IACH,wBAFY,OAAO,WAAW,EAAE,UAAU,eAIzC;IAED;;;OAGG;IACH,8CAHW,OAAO,WAAW,EAAE,UAAU,QAOxC;CACF;uBArOsB,kBAAkB"}
package/renderer/Map.js CHANGED
@@ -221,11 +221,6 @@ class MapRenderer extends Disposable {
221
221
  abstract();
222
222
  }
223
223
 
224
- /**
225
- * @param {import("../Map.js").FrameState} frameState Frame state.
226
- */
227
- flushDeclutterItems(frameState) {}
228
-
229
224
  /**
230
225
  * @param {import("../Map.js").FrameState} frameState Frame state.
231
226
  * @protected
@@ -103,6 +103,10 @@ declare class CanvasLayerRenderer<LayerType extends import("../../layer/Layer.js
103
103
  * @protected
104
104
  */
105
105
  protected postRender(context: CanvasRenderingContext2D, frameState: import("../../Map.js").FrameState): void;
106
+ /**
107
+ * @param {import("../../Map.js").FrameState} frameState Frame state.
108
+ */
109
+ renderDeferredInternal(frameState: import("../../Map.js").FrameState): void;
106
110
  /**
107
111
  * Creates a transform for rendering to an element that will be rotated after rendering.
108
112
  * @param {import("../../coordinate.js").Coordinate} center Center.
@@ -1 +1 @@
1
- {"version":3,"file":"Layer.d.ts","sourceRoot":"","sources":["Layer.js"],"names":[],"mappings":"AAqBA;;GAEG;AACH,yBAFU,MAAM,iBAAiB,CAAC,CAEL;;AAa7B;;;;GAIG;AACH;IAOI;;;OAGG;IACH,qBAFU,WAAW,CAEA;IAErB;;;OAGG;IACH,8BAFU,MAAM,CAEO;IAEvB;;;;;OAKG;IACH,yBAFU,OAAO,oBAAoB,EAAE,SAAS,CAEV;IAEtC;;;;;OAKG;IACH,0BAFU,OAAO,oBAAoB,EAAE,SAAS,CAET;IAEvC;;;;;OAKG;IACH,iCAFU,OAAO,oBAAoB,EAAE,SAAS,CAEF;IAE9C;;OAEG;IACH,SAFU,wBAAwB,CAEf;IAEnB;;OAEG;IACH,iBAFU,OAAO,CAEW;IAE5B;;;OAGG;IACH,sBAAyB;IAEzB;;;OAGG;IACH,sBAFU,OAAO,cAAc,EAAE,UAAU,GAAC,IAAI,CAE1B;IAGxB;;;;;OAKG;IACH,oBALW,OAAO,mBAAmB,EAAE,SAAS,OACrC,MAAM,OACN,MAAM,GACL,iBAAiB,GAAC,IAAI,CAiBjC;IAED;;;OAGG;IACH,0BAHW,OAAO,cAAc,EAAE,UAAU,GAChC,MAAM,CASjB;IAED;;;;;OAKG;IACH,qBAJW,WAAW,aACX,MAAM,8CA2DhB;IAED;;;;;OAKG;IACH,iCALW,wBAAwB,cACxB,OAAO,cAAc,EAAE,UAAU,UACjC,OAAO,iBAAiB,EAAE,MAAM,QA2B1C;IAED;;;;;OAKG;IACH,6BAWC;IAED;;;;OAIG;IACH,6BAJW,wBAAwB,cACxB,OAAO,cAAc,EAAE,UAAU,QAM3C;IAED;;;;OAIG;IACH,8BAJW,wBAAwB,cACxB,OAAO,cAAc,EAAE,UAAU,QAK3C;IAED;;;;;;;;;;;OAWG;IACH,qCAVW,OAAO,qBAAqB,EAAE,UAAU,cACxC,MAAM,YACN,MAAM,cACN,MAAM,SACN,MAAM,UACN,MAAM,WACN,MAAM,GAEJ,OAAO,oBAAoB,EAAE,SAAS,CA2BlD;CASF;0BAjUyB,aAAa"}
1
+ {"version":3,"file":"Layer.d.ts","sourceRoot":"","sources":["Layer.js"],"names":[],"mappings":"AAqBA;;GAEG;AACH,yBAFU,MAAM,iBAAiB,CAAC,CAEL;;AAa7B;;;;GAIG;AACH;IAOI;;;OAGG;IACH,qBAFU,WAAW,CAEA;IAErB;;;OAGG;IACH,8BAFU,MAAM,CAEO;IAEvB;;;;;OAKG;IACH,yBAFU,OAAO,oBAAoB,EAAE,SAAS,CAEV;IAEtC;;;;;OAKG;IACH,0BAFU,OAAO,oBAAoB,EAAE,SAAS,CAET;IAEvC;;;;;OAKG;IACH,iCAFU,OAAO,oBAAoB,EAAE,SAAS,CAEF;IAE9C;;OAEG;IACH,SAFU,wBAAwB,CAEf;IAEnB;;OAEG;IACH,iBAFU,OAAO,CAEW;IAE5B;;;OAGG;IACH,sBAAyB;IAEzB;;;OAGG;IACH,sBAFU,OAAO,cAAc,EAAE,UAAU,GAAC,IAAI,CAE1B;IAGxB;;;;;OAKG;IACH,oBALW,OAAO,mBAAmB,EAAE,SAAS,OACrC,MAAM,OACN,MAAM,GACL,iBAAiB,GAAC,IAAI,CAiBjC;IAED;;;OAGG;IACH,0BAHW,OAAO,cAAc,EAAE,UAAU,GAChC,MAAM,CASjB;IAED;;;;;OAKG;IACH,qBAJW,WAAW,aACX,MAAM,8CA2DhB;IAED;;;;;OAKG;IACH,iCALW,wBAAwB,cACxB,OAAO,cAAc,EAAE,UAAU,UACjC,OAAO,iBAAiB,EAAE,MAAM,QA2B1C;IAED;;;;;OAKG;IACH,6BAWC;IAED;;;;OAIG;IACH,6BAJW,wBAAwB,cACxB,OAAO,cAAc,EAAE,UAAU,QAS3C;IAED;;;;OAIG;IACH,8BAJW,wBAAwB,cACxB,OAAO,cAAc,EAAE,UAAU,QAQ3C;IAED;;OAEG;IACH,mCAFW,OAAO,cAAc,EAAE,UAAU,QAEP;IAuBrC;;;;;;;;;;;OAWG;IACH,qCAVW,OAAO,qBAAqB,EAAE,UAAU,cACxC,MAAM,YACN,MAAM,cACN,MAAM,SACN,MAAM,UACN,MAAM,WACN,MAAM,GAEJ,OAAO,oBAAoB,EAAE,SAAS,CA2BlD;CASF;0BAjWyB,aAAa"}
@@ -264,6 +264,9 @@ class CanvasLayerRenderer extends LayerRenderer {
264
264
  */
265
265
  preRender(context, frameState) {
266
266
  this.frameState = frameState;
267
+ if (frameState.declutter) {
268
+ return;
269
+ }
267
270
  this.dispatchRenderEvent_(RenderEventType.PRERENDER, context, frameState);
268
271
  }
269
272
 
@@ -273,9 +276,38 @@ class CanvasLayerRenderer extends LayerRenderer {
273
276
  * @protected
274
277
  */
275
278
  postRender(context, frameState) {
279
+ if (frameState.declutter) {
280
+ return;
281
+ }
276
282
  this.dispatchRenderEvent_(RenderEventType.POSTRENDER, context, frameState);
277
283
  }
278
284
 
285
+ /**
286
+ * @param {import("../../Map.js").FrameState} frameState Frame state.
287
+ */
288
+ renderDeferredInternal(frameState) {}
289
+
290
+ /**
291
+ * @param {import("../../Map.js").FrameState} frameState Frame state.
292
+ * @override
293
+ */
294
+ renderDeferred(frameState) {
295
+ if (!frameState.declutter) {
296
+ return;
297
+ }
298
+ this.dispatchRenderEvent_(
299
+ RenderEventType.PRERENDER,
300
+ this.context,
301
+ frameState,
302
+ );
303
+ this.renderDeferredInternal(frameState);
304
+ this.dispatchRenderEvent_(
305
+ RenderEventType.POSTRENDER,
306
+ this.context,
307
+ frameState,
308
+ );
309
+ }
310
+
279
311
  /**
280
312
  * Creates a transform for rendering to an element that will be rotated after rendering.
281
313
  * @param {import("../../coordinate.js").Coordinate} center Center.
@@ -1 +1 @@
1
- {"version":3,"file":"VectorImageLayer.d.ts","sourceRoot":"","sources":["VectorImageLayer.js"],"names":[],"mappings":";AAcA;;;;GAIG;AACH;IACE;;OAEG;IACH,sEA0BC;IAvBC;;;OAGG;IACH,wBAA2D;IAE3D;;;OAGG;IACH,yBAA6C;IAE7C;;;OAGG;IACH,0CAAiD;IAEjD;;;OAGG;IACH,4CAA+C;IAWjD;;;;OAIG;IACH,mBAHW,OAAO,gBAAgB,EAAE,KAAK,GAC7B,QAAQ,MAAM,OAAO,eAAe,EAAE,OAAO,CAAC,CAAC,CAW1D;IAyGD;OACG;IACH,kBAAc;IAEd;OACG;IACH,mBAAe;IAEf;OACG;IACH,wBAAoB;CAmCrB;qCA5NoC,iBAAiB"}
1
+ {"version":3,"file":"VectorImageLayer.d.ts","sourceRoot":"","sources":["VectorImageLayer.js"],"names":[],"mappings":";AAcA;;;;GAIG;AACH;IACE;;OAEG;IACH,sEA0BC;IAvBC;;;OAGG;IACH,wBAA2D;IAE3D;;;OAGG;IACH,yBAA6C;IAE7C;;;OAGG;IACH,0CAAiD;IAEjD;;;OAGG;IACH,4CAA+C;IAWjD;;;;OAIG;IACH,mBAHW,OAAO,gBAAgB,EAAE,KAAK,GAC7B,QAAQ,MAAM,OAAO,eAAe,EAAE,OAAO,CAAC,CAAC,CAW1D;IAgHD;OACG;IACH,kBAAc;IAEd;OACG;IACH,mBAAe;IAEf;OACG;IACH,wBAAoB;CAmCrB;qCAnOoC,iBAAiB"}
@@ -111,7 +111,6 @@ class CanvasVectorImageLayerRenderer extends CanvasImageLayerRenderer {
111
111
  const imageLayerState = Object.assign({}, layerState, {opacity: 1});
112
112
  const imageFrameState = /** @type {import("../../Map.js").FrameState} */ (
113
113
  Object.assign({}, frameState, {
114
- declutterTree: new RBush(9),
115
114
  extent: renderedExtent,
116
115
  size: [width, height],
117
116
  viewState: /** @type {import("../../View.js").State} */ (
@@ -121,8 +120,15 @@ class CanvasVectorImageLayerRenderer extends CanvasImageLayerRenderer {
121
120
  ),
122
121
  layerStatesArray: [imageLayerState],
123
122
  layerIndex: 0,
123
+ declutter: null,
124
124
  })
125
125
  );
126
+ const declutter = this.getLayer().getDeclutter();
127
+ if (declutter) {
128
+ imageFrameState.declutter = {
129
+ [declutter]: new RBush(9),
130
+ };
131
+ }
126
132
  let emptyImage = true;
127
133
  const image = new ImageCanvas(
128
134
  renderedExtent,
@@ -137,6 +143,7 @@ class CanvasVectorImageLayerRenderer extends CanvasImageLayerRenderer {
137
143
  vectorRenderer.clipping = false;
138
144
  if (vectorRenderer.renderFrame(imageFrameState, null)) {
139
145
  vectorRenderer.renderDeclutter(imageFrameState);
146
+ vectorRenderer.renderDeferred(imageFrameState);
140
147
  emptyImage = false;
141
148
  }
142
149
  callback();
@@ -96,9 +96,10 @@ declare class CanvasVectorLayerRenderer extends CanvasLayerRenderer<any> {
96
96
  /**
97
97
  * @param {ExecutorGroup} executorGroup Executor group.
98
98
  * @param {import("../../Map.js").FrameState} frameState Frame state.
99
- * @param {import("rbush").default} [declutterTree] Declutter tree.
99
+ * @param {boolean} [declutterable] `true` to only render declutterable items,
100
+ * `false` to only render non-declutterable items, `undefined` to render all.
100
101
  */
101
- renderWorlds(executorGroup: ExecutorGroup, frameState: import("../../Map.js").FrameState, declutterTree?: any): void;
102
+ renderWorlds(executorGroup: ExecutorGroup, frameState: import("../../Map.js").FrameState, declutterable?: boolean | undefined): void;
102
103
  setupCompositionContext_(): void;
103
104
  releaseCompositionContext_(): void;
104
105
  /**
@@ -125,12 +126,12 @@ declare class CanvasVectorLayerRenderer extends CanvasLayerRenderer<any> {
125
126
  * @param {import("../../style/Style.js").default|Array<import("../../style/Style.js").default>} styles The style or array of styles.
126
127
  * @param {import("../../render/canvas/BuilderGroup.js").default} builderGroup Builder group.
127
128
  * @param {import("../../proj.js").TransformFunction} [transform] Transform from user to view projection.
128
- * @param {import("../../render/canvas/BuilderGroup.js").default} [declutterBuilderGroup] Builder for decluttering.
129
+ * @param {boolean} [declutter] Enable decluttering.
130
+ * @param {number} [index] Render order index.
129
131
  * @return {boolean} `true` if an image is loading.
130
132
  */
131
- renderFeature(feature: import("../../Feature.js").default, squaredTolerance: number, styles: import("../../style/Style.js").default | Array<import("../../style/Style.js").default>, builderGroup: import("../../render/canvas/BuilderGroup.js").default, transform?: import("../../proj.js").TransformFunction | undefined, declutterBuilderGroup?: CanvasBuilderGroup | undefined): boolean;
133
+ renderFeature(feature: import("../../Feature.js").default, squaredTolerance: number, styles: import("../../style/Style.js").default | Array<import("../../style/Style.js").default>, builderGroup: import("../../render/canvas/BuilderGroup.js").default, transform?: import("../../proj.js").TransformFunction | undefined, declutter?: boolean | undefined, index?: number | undefined): boolean;
132
134
  }
133
135
  import CanvasLayerRenderer from './Layer.js';
134
136
  import ExecutorGroup from '../../render/canvas/ExecutorGroup.js';
135
- import CanvasBuilderGroup from '../../render/canvas/BuilderGroup.js';
136
137
  //# sourceMappingURL=VectorLayer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"VectorLayer.d.ts","sourceRoot":"","sources":["VectorLayer.js"],"names":[],"mappings":";AA6CA;;;;GAIG;AACH;IACE;;OAEG;IACH,gFA6GC;IA1GC,eAAe;IACf,qCAA2E;IAE3E;;OAEG;IACH,yBAFU,OAAO,CAEW;IAE5B;;OAEG;IACH,wBAFU,SAAS,GAAC,IAAI,CAEU;IAElC;;OAEG;IACH,mBAFU,MAAM,OAAO,kBAAkB,EAAE,OAAO,CAAC,CAEtB;IAE7B;;;OAGG;IACH,0BAA2B;IAE3B;;;OAGG;IACH,4BAA8B;IAE9B;;;OAGG;IACH,wBAAoC;IAEpC;;;OAGG;IACH,+BAA2C;IAE3C;;;OAGG;IACH,0BAAsB;IAEtB;;;OAGG;IACH,wBAA2B;IAE3B;;;OAGG;IACH,4BAA+B;IAE/B;;;OAGG;IACH,4BAA4B;IAE5B;;;OAGG;IACH,6BAAgC;IAEhC;;;OAGG;IACH,qBAAwB;IAExB;;;OAGG;IACH,oBAFU,OAAO,CAEa;IAO9B;;;OAGG;IACH,UAFU,OAAO,CAEG;IAEpB;;;OAGG;IACH,4BAA+B;IAE/B;;;OAGG;IACH,iBAAiB;IAGnB;;;;OAIG;IACH,4BAJW,aAAa,cACb,OAAO,cAAc,EAAE,UAAU,6BAiD3C;IAED,iCAWC;IAED,mCAUC;IAED;;;OAGG;IACH,4BAFW,OAAO,cAAc,EAAE,UAAU,QAY3C;IAuFD;;;;;OAKG;IACH,mBAJW,OAAO,gBAAgB,EAAE,KAAK,GAC7B,QAAQ,MAAM,OAAO,eAAe,EAAE,OAAO,CAAC,CAAC,CA2F1D;IA+FD;;;;OAIG;IACH,gCAEC;IA0ND;;;;;;;;OAQG;IACH,uBARW,OAAO,kBAAkB,EAAE,OAAO,oBAClC,MAAM,UACN,OAAO,sBAAsB,EAAE,OAAO,GAAC,MAAM,OAAO,sBAAsB,EAAE,OAAO,CAAC,gBACpF,OAAO,qCAAqC,EAAE,OAAO,8HAGpD,OAAO,CAuClB;CACF;gCAjyB6C,YAAY;0BAChC,sCAAsC;+BAFjC,qCAAqC"}
1
+ {"version":3,"file":"VectorLayer.d.ts","sourceRoot":"","sources":["VectorLayer.js"],"names":[],"mappings":";AAiDA;;;;GAIG;AACH;IACE;;OAEG;IACH,gFAwGC;IArGC,eAAe;IACf,qCAA2E;IAE3E;;OAEG;IACH,yBAFU,OAAO,CAEW;IAE5B;;OAEG;IACH,wBAFU,SAAS,GAAC,IAAI,CAEU;IAElC;;OAEG;IACH,mBAFU,MAAM,OAAO,kBAAkB,EAAE,OAAO,CAAC,CAEtB;IAE7B;;;OAGG;IACH,0BAA2B;IAE3B;;;OAGG;IACH,4BAA8B;IAE9B;;;OAGG;IACH,wBAAoC;IAEpC;;;OAGG;IACH,+BAA2C;IAE3C;;;OAGG;IACH,0BAAsB;IAEtB;;;OAGG;IACH,wBAA2B;IAE3B;;;OAGG;IACH,4BAA+B;IAE/B;;;OAGG;IACH,4BAA4B;IAE5B;;;OAGG;IACH,6BAAgC;IAEhC;;;OAGG;IACH,qBAAwB;IAExB;;;OAGG;IACH,oBAFU,OAAO,CAEa;IAE9B;;;OAGG;IACH,UAFU,OAAO,CAEG;IAEpB;;;OAGG;IACH,4BAA+B;IAE/B;;;OAGG;IACH,iBAAiB;IAGnB;;;;;OAKG;IACH,4BALW,aAAa,cACb,OAAO,cAAc,EAAE,UAAU,6CAyD3C;IAED,iCAWC;IAED,mCAUC;IAED;;;OAGG;IACH,4BAFW,OAAO,cAAc,EAAE,UAAU,QAU3C;IAgGD;;;;;OAKG;IACH,mBAJW,OAAO,gBAAgB,EAAE,KAAK,GAC7B,QAAQ,MAAM,OAAO,eAAe,EAAE,OAAO,CAAC,CAAC,CA2F1D;IA4FD;;;;OAIG;IACH,gCAEC;IAwMD;;;;;;;;;OASG;IACH,uBATW,OAAO,kBAAkB,EAAE,OAAO,oBAClC,MAAM,UACN,OAAO,sBAAsB,EAAE,OAAO,GAAC,MAAM,OAAO,sBAAsB,EAAE,OAAO,CAAC,gBACpF,OAAO,qCAAqC,EAAE,OAAO,mIAIpD,OAAO,CA0ClB;CACF;gCA9xB6C,YAAY;0BAKnD,sCAAsC"}