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

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

View File

@@ -10,7 +10,6 @@ import {equals} from '../../array.js';
import {getHeight, getIntersection, getWidth, isEmpty} from '../../extent.js';
import VectorRenderType from '../../layer/VectorRenderType.js';
import {assign} from '../../obj.js';
import {getLayerRendererPlugins} from '../../plugins.js';
import IntermediateCanvasRenderer from '../canvas/IntermediateCanvas.js';
import {create as createTransform, compose as composeTransform} from '../../transform.js';
@@ -73,7 +72,7 @@ CanvasImageLayerRenderer['handles'] = function(layer) {
CanvasImageLayerRenderer['create'] = function(mapRenderer, layer) {
const renderer = new CanvasImageLayerRenderer(/** @type {module:ol/layer/Image~ImageLayer} */ (layer));
if (layer.getType() === LayerType.VECTOR) {
const candidates = getLayerRendererPlugins();
const candidates = mapRenderer.getLayerRendererConstructors();
for (let i = 0, ii = candidates.length; i < ii; ++i) {
const candidate = /** @type {Object.<string, Function>} */ (candidates[i]);
if (candidate !== CanvasImageLayerRenderer && candidate['handles'](layer)) {