Conditionally get renderer from the layer

This commit is contained in:
Tim Schaub
2018-10-23 13:13:41 -06:00
parent 6c052c0dab
commit 7ffaa134c7
3 changed files with 35 additions and 32 deletions

View File

@@ -143,12 +143,6 @@ class BaseVectorLayer extends Layer {
* @type {import("../LayerType.js").default}
*/
this.type = LayerType.VECTOR;
/**
* @private
* @type {import("../renderer/Layer.js").default}
*/
this.renderer_ = null;
}
/**
@@ -249,26 +243,6 @@ class BaseVectorLayer extends Layer {
getRenderMode() {
return this.renderMode_;
}
/**
* Get the renderer for this layer.
* @return {import("../renderer/Layer.js").default} The layer renderer.
*/
getRenderer() {
if (!this.renderer_) {
this.renderer_ = this.createRenderer();
}
return this.renderer_;
}
/**
* Create a renderer for this layer.
* @return {import("../renderer/Layer.js").default} A layer renderer.
* @protected
*/
createRenderer() {
return null;
}
}

View File

@@ -92,6 +92,12 @@ class Layer extends BaseLayer {
*/
this.sourceChangeKey_ = null;
/**
* @private
* @type {import("../renderer/Layer.js").default}
*/
this.renderer_ = null;
if (options.map) {
this.setMap(options.map);
}
@@ -215,6 +221,27 @@ class Layer extends BaseLayer {
setSource(source) {
this.set(LayerProperty.SOURCE, source);
}
/**
* Get the renderer for this layer.
* @return {import("../renderer/Layer.js").default} The layer renderer.
*/
getRenderer() {
if (!this.renderer_) {
this.renderer_ = this.createRenderer();
}
return this.renderer_;
}
/**
* Create a renderer for this layer.
* @return {import("../renderer/Layer.js").default} A layer renderer.
* @protected
*/
createRenderer() {
return null;
}
}

View File

@@ -217,12 +217,14 @@ class MapRenderer extends Disposable {
if (layerKey in this.layerRenderers_) {
return this.layerRenderers_[layerKey];
} else {
let renderer;
for (let i = 0, ii = this.layerRendererConstructors_.length; i < ii; ++i) {
const candidate = this.layerRendererConstructors_[i];
if (candidate['handles'](layer)) {
renderer = candidate['create'](this, layer);
break;
let renderer = layer.getRenderer();
if (!renderer) {
for (let i = 0, ii = this.layerRendererConstructors_.length; i < ii; ++i) {
const candidate = this.layerRendererConstructors_[i];
if (candidate['handles'](layer)) {
renderer = candidate['create'](this, layer);
break;
}
}
}
if (renderer) {