Register layer renderers with the map renderer

This commit is contained in:
Tim Schaub
2018-04-14 10:31:10 -06:00
parent 91f2101cab
commit c5f81d8bbe
11 changed files with 53 additions and 134 deletions
+28 -6
View File
@@ -8,7 +8,6 @@ import EventType from '../events/EventType.js';
import {getWidth} from '../extent.js';
import {TRUE, UNDEFINED} from '../functions.js';
import {visibleAtResolution} from '../layer/Layer.js';
import {getLayerRendererPlugins} from '../plugins.js';
import {iconImageCache} from '../style.js';
import {compose as composeTransform, invert as invertTransform, setFromArray as transformSetFromArray} from '../transform.js';
@@ -40,11 +39,35 @@ const MapRenderer = function(map) {
*/
this.layerRendererListeners_ = {};
/**
* @private
* @type {Array.<module:ol/renderer/Layer~LayerRenderer}
*/
this.layerRendererConstructors_ = [];
};
inherits(MapRenderer, Disposable);
/**
* Register layer renderer constructors.
* @param {Array.<module:ol/renderer/Layer~LayerRenderer>} constructors Layer renderers.
*/
MapRenderer.prototype.registerLayerRenderers = function(constructors) {
this.layerRendererConstructors_.push.apply(this.layerRendererConstructors_, constructors);
};
/**
* Get the registered layer renderer constructors.
* @return {Array.<module:ol/renderer/Layer~LayerRenderer>} Registered layer renderers.
*/
MapRenderer.prototype.getLayerRendererConstructors = function() {
return this.layerRendererConstructors_;
};
/**
* @param {module:ol/PluggableMap~FrameState} frameState FrameState.
* @protected
@@ -202,12 +225,11 @@ MapRenderer.prototype.getLayerRenderer = function(layer) {
if (layerKey in this.layerRenderers_) {
return this.layerRenderers_[layerKey];
} else {
const layerRendererPlugins = getLayerRendererPlugins();
let renderer;
for (let i = 0, ii = layerRendererPlugins.length; i < ii; ++i) {
const plugin = layerRendererPlugins[i];
if (plugin['handles'](layer)) {
renderer = plugin['create'](this, layer);
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;
}
}