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
-26
View File
@@ -143,12 +143,6 @@ class BaseVectorLayer extends Layer {
* @type {import("../LayerType.js").default} * @type {import("../LayerType.js").default}
*/ */
this.type = LayerType.VECTOR; this.type = LayerType.VECTOR;
/**
* @private
* @type {import("../renderer/Layer.js").default}
*/
this.renderer_ = null;
} }
/** /**
@@ -249,26 +243,6 @@ class BaseVectorLayer extends Layer {
getRenderMode() { getRenderMode() {
return this.renderMode_; 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;
}
} }
+27
View File
@@ -92,6 +92,12 @@ class Layer extends BaseLayer {
*/ */
this.sourceChangeKey_ = null; this.sourceChangeKey_ = null;
/**
* @private
* @type {import("../renderer/Layer.js").default}
*/
this.renderer_ = null;
if (options.map) { if (options.map) {
this.setMap(options.map); this.setMap(options.map);
} }
@@ -215,6 +221,27 @@ class Layer extends BaseLayer {
setSource(source) { setSource(source) {
this.set(LayerProperty.SOURCE, 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;
}
} }
+8 -6
View File
@@ -217,12 +217,14 @@ class MapRenderer extends Disposable {
if (layerKey in this.layerRenderers_) { if (layerKey in this.layerRenderers_) {
return this.layerRenderers_[layerKey]; return this.layerRenderers_[layerKey];
} else { } else {
let renderer; let renderer = layer.getRenderer();
for (let i = 0, ii = this.layerRendererConstructors_.length; i < ii; ++i) { if (!renderer) {
const candidate = this.layerRendererConstructors_[i]; for (let i = 0, ii = this.layerRendererConstructors_.length; i < ii; ++i) {
if (candidate['handles'](layer)) { const candidate = this.layerRendererConstructors_[i];
renderer = candidate['create'](this, layer); if (candidate['handles'](layer)) {
break; renderer = candidate['create'](this, layer);
break;
}
} }
} }
if (renderer) { if (renderer) {