Merge pull request #8922 from fgravin/layerrenderapi
Layer is reponsible for its renderer
This commit is contained in:
@@ -32,11 +32,10 @@ class ImageLayer extends BaseImageLayer {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a renderer for this layer.
|
* Create a renderer for this layer.
|
||||||
* @param {import("../renderer/Map.js").default} mapRenderer The map renderer.
|
|
||||||
* @return {import("../renderer/Layer.js").default} A layer renderer.
|
* @return {import("../renderer/Layer.js").default} A layer renderer.
|
||||||
* @protected
|
* @protected
|
||||||
*/
|
*/
|
||||||
createRenderer(mapRenderer) {
|
createRenderer() {
|
||||||
return new CanvasImageLayerRenderer(this);
|
return new CanvasImageLayerRenderer(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -172,6 +172,20 @@ class Layer extends BaseLayer {
|
|||||||
this.changed();
|
this.changed();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* In charge to manage the rendering of the layer. One layer type is
|
||||||
|
* bounded with one layer renderer.
|
||||||
|
* @param {?import("../PluggableMap.js").FrameState} frameState Frame state.
|
||||||
|
* @return {HTMLElement} The rendered element.
|
||||||
|
*/
|
||||||
|
render(frameState) {
|
||||||
|
const layerRenderer = this.getRenderer();
|
||||||
|
const layerState = this.getLayerState();
|
||||||
|
if (layerRenderer.prepareFrame(frameState, layerState)) {
|
||||||
|
return layerRenderer.renderFrame(frameState, layerState);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the layer to be rendered on top of other layers on a map. The map will
|
* Sets the layer to be rendered on top of other layers on a map. The map will
|
||||||
* not manage this layer in its layers collection, and the callback in
|
* not manage this layer in its layers collection, and the callback in
|
||||||
@@ -224,23 +238,21 @@ class Layer extends BaseLayer {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the renderer for this layer.
|
* Get the renderer for this layer.
|
||||||
* @param {import("../renderer/Map.js").default} mapRenderer The map renderer.
|
|
||||||
* @return {import("../renderer/Layer.js").default} The layer renderer.
|
* @return {import("../renderer/Layer.js").default} The layer renderer.
|
||||||
*/
|
*/
|
||||||
getRenderer(mapRenderer) {
|
getRenderer() {
|
||||||
if (!this.renderer_) {
|
if (!this.renderer_) {
|
||||||
this.renderer_ = this.createRenderer(mapRenderer);
|
this.renderer_ = this.createRenderer();
|
||||||
}
|
}
|
||||||
return this.renderer_;
|
return this.renderer_;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a renderer for this layer.
|
* Create a renderer for this layer.
|
||||||
* @param {import("../renderer/Map.js").default} mapRenderer The map renderer.
|
|
||||||
* @return {import("../renderer/Layer.js").default} A layer renderer.
|
* @return {import("../renderer/Layer.js").default} A layer renderer.
|
||||||
* @protected
|
* @protected
|
||||||
*/
|
*/
|
||||||
createRenderer(mapRenderer) {
|
createRenderer() {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -31,11 +31,10 @@ class TileLayer extends BaseTileLayer {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a renderer for this layer.
|
* Create a renderer for this layer.
|
||||||
* @param {import("../renderer/Map.js").default} mapRenderer The map renderer.
|
|
||||||
* @return {import("../renderer/Layer.js").default} A layer renderer.
|
* @return {import("../renderer/Layer.js").default} A layer renderer.
|
||||||
* @protected
|
* @protected
|
||||||
*/
|
*/
|
||||||
createRenderer(mapRenderer) {
|
createRenderer() {
|
||||||
return new CanvasTileLayerRenderer(this);
|
return new CanvasTileLayerRenderer(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -29,11 +29,10 @@ class VectorLayer extends BaseVectorLayer {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a renderer for this layer.
|
* Create a renderer for this layer.
|
||||||
* @param {import("../renderer/Map.js").default} mapRenderer The map renderer.
|
|
||||||
* @return {import("../renderer/Layer.js").default} A layer renderer.
|
* @return {import("../renderer/Layer.js").default} A layer renderer.
|
||||||
* @protected
|
* @protected
|
||||||
*/
|
*/
|
||||||
createRenderer(mapRenderer) {
|
createRenderer() {
|
||||||
return new CanvasVectorLayerRenderer(this);
|
return new CanvasVectorLayerRenderer(this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -28,11 +28,10 @@ class VectorImageLayer extends BaseVectorLayer {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a renderer for this layer.
|
* Create a renderer for this layer.
|
||||||
* @param {import("../renderer/Map.js").default} mapRenderer The map renderer.
|
|
||||||
* @return {import("../renderer/Layer.js").default} A layer renderer.
|
* @return {import("../renderer/Layer.js").default} A layer renderer.
|
||||||
* @protected
|
* @protected
|
||||||
*/
|
*/
|
||||||
createRenderer(mapRenderer) {
|
createRenderer() {
|
||||||
return new CanvasVectorImageLayerRenderer(this);
|
return new CanvasVectorImageLayerRenderer(this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -116,11 +116,10 @@ class VectorTileLayer extends BaseVectorLayer {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a renderer for this layer.
|
* Create a renderer for this layer.
|
||||||
* @param {import("../renderer/Map.js").default} mapRenderer The map renderer.
|
|
||||||
* @return {import("../renderer/Layer.js").default} A layer renderer.
|
* @return {import("../renderer/Layer.js").default} A layer renderer.
|
||||||
* @protected
|
* @protected
|
||||||
*/
|
*/
|
||||||
createRenderer(mapRenderer) {
|
createRenderer() {
|
||||||
return new CanvasVectorTileLayerRenderer(this);
|
return new CanvasVectorTileLayerRenderer(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -95,11 +95,7 @@ class CompositeMapRenderer extends MapRenderer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const layer = layerState.layer;
|
const layer = layerState.layer;
|
||||||
const layerRenderer = this.getLayerRenderer(layer);
|
this.children_.push(layer.render(frameState));
|
||||||
if (layerRenderer.prepareFrame(frameState, layerState)) {
|
|
||||||
const element = layerRenderer.renderFrame(frameState, layerState);
|
|
||||||
this.children_.push(element);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
replaceChildren(this.element_, this.children_);
|
replaceChildren(this.element_, this.children_);
|
||||||
|
|||||||
Reference in New Issue
Block a user