Merge pull request #8922 from fgravin/layerrenderapi

Layer is reponsible for its renderer
This commit is contained in:
Tim Schaub
2018-11-14 16:09:23 +01:00
committed by GitHub
7 changed files with 23 additions and 20 deletions

View File

@@ -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);
} }

View File

@@ -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;
} }

View File

@@ -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);
} }

View File

@@ -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);
} }
} }

View File

@@ -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);
} }
} }

View File

@@ -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);
} }

View File

@@ -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_);