Register layer renderers with the map renderer
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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)) {
|
||||
|
||||
Reference in New Issue
Block a user