Refresh layer renderer management
This commit is contained in:
@@ -133,27 +133,31 @@ ol.Map.prototype.createLayerRenderer = goog.abstractMethod;
|
||||
|
||||
|
||||
/**
|
||||
* @protected
|
||||
* @param {function(this: T, ol.LayerRenderer)} f Function.
|
||||
* @param {T=} opt_obj The object to be used for the value of 'this' within f.
|
||||
* @template T
|
||||
*/
|
||||
ol.Map.prototype.forEachLayerRenderer = function(f, opt_obj) {
|
||||
var layers = this.getLayers();
|
||||
if (goog.isDefAndNotNull(layers)) {
|
||||
layers.forEach(function(layer) {
|
||||
var key = goog.getUid(layer);
|
||||
var layerRenderer = this.layerRenderers[key];
|
||||
f.call(opt_obj, layerRenderer);
|
||||
}, this);
|
||||
}
|
||||
ol.Map.prototype.freeze = function() {
|
||||
++this.freezeCount_;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
ol.Map.prototype.freeze = function() {
|
||||
++this.freezeCount_;
|
||||
ol.Map.prototype.disposeInternal = function() {
|
||||
goog.object.forEach(this.layerRenderers, function(layerRenderer) {
|
||||
goog.dispose(layerRenderer);
|
||||
});
|
||||
goog.base(this, 'disposeInternal');
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {function(this: T, *, number)} f Function.
|
||||
* @param {T=} opt_obj Object.
|
||||
* @template T
|
||||
*/
|
||||
ol.Map.prototype.forEachLayer = function(f, opt_obj) {
|
||||
var layers = this.getLayers();
|
||||
layers.forEach(f, opt_obj);
|
||||
};
|
||||
|
||||
|
||||
@@ -190,6 +194,19 @@ ol.Map.prototype.getExtent = function() {
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {ol.Layer} layer Layer.
|
||||
* @protected
|
||||
* @return {ol.LayerRenderer} Layer renderer.
|
||||
*/
|
||||
ol.Map.prototype.getLayerRenderer = function(layer) {
|
||||
var key = goog.getUid(layer);
|
||||
var layerRenderer = this.layerRenderers[key];
|
||||
goog.asserts.assert(goog.isDef(layerRenderer));
|
||||
return layerRenderer;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @return {ol.Array} Layers.
|
||||
*/
|
||||
@@ -278,11 +295,8 @@ ol.Map.prototype.handleLayerAdd = function(layer) {
|
||||
var projection = this.getProjection();
|
||||
var storeProjection = layer.getStore().getProjection();
|
||||
goog.asserts.assert(ol.Projection.equivalent(projection, storeProjection));
|
||||
var key = goog.getUid(layer);
|
||||
var layerRenderer = this.createLayerRenderer(layer);
|
||||
if (!goog.isNull(layerRenderer)) {
|
||||
this.layerRenderers[key] = layerRenderer;
|
||||
}
|
||||
this.setLayerRenderer(layer, layerRenderer);
|
||||
};
|
||||
|
||||
|
||||
@@ -291,12 +305,7 @@ ol.Map.prototype.handleLayerAdd = function(layer) {
|
||||
* @protected
|
||||
*/
|
||||
ol.Map.prototype.handleLayerRemove = function(layer) {
|
||||
var key = goog.getUid(layer);
|
||||
if (key in this.layerRenderers) {
|
||||
var layerRenderer = this.layerRenderers[key];
|
||||
delete this.layerRenderers[key];
|
||||
goog.dispose(layerRenderer);
|
||||
}
|
||||
this.removeLayerRenderer(layer);
|
||||
};
|
||||
|
||||
|
||||
@@ -427,6 +436,20 @@ ol.Map.prototype.redrawInternal = function() {
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {ol.Layer} layer Layer.
|
||||
* @return {ol.LayerRenderer} Layer renderer.
|
||||
* @protected
|
||||
*/
|
||||
ol.Map.prototype.removeLayerRenderer = function(layer) {
|
||||
var key = goog.getUid(layer);
|
||||
goog.asserts.assert(key in this.layerRenderers);
|
||||
var layerRenderer = this.layerRenderers[key];
|
||||
delete this.layerRenderers[key];
|
||||
return layerRenderer;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {goog.math.Coordinate} center Center.
|
||||
*/
|
||||
@@ -463,6 +486,18 @@ ol.Map.prototype.setExtent = function(extent) {
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {ol.Layer} layer Layer.
|
||||
* @param {ol.LayerRenderer} layerRenderer Layer renderer.
|
||||
* @protected
|
||||
*/
|
||||
ol.Map.prototype.setLayerRenderer = function(layer, layerRenderer) {
|
||||
var key = goog.getUid(layer);
|
||||
goog.asserts.assert(!(key in this.layerRenderers));
|
||||
this.layerRenderers[key] = layerRenderer;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {ol.Array} layers Layers.
|
||||
*/
|
||||
|
||||
@@ -87,16 +87,6 @@ ol.webgl.Map.prototype.createLayerRenderer = function(layer) {
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
ol.webgl.Map.prototype.disposeInternal = function() {
|
||||
this.forEachLayerRenderer(goog.dispose);
|
||||
this.layerRenderers = {};
|
||||
goog.base(this, 'disposeInternal');
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @return {WebGLRenderingContext} GL.
|
||||
*/
|
||||
@@ -170,8 +160,11 @@ ol.webgl.Map.prototype.handleSizeChanged = function() {
|
||||
*/
|
||||
ol.webgl.Map.prototype.handleWebGLContextLost = function(event) {
|
||||
event.preventDefault();
|
||||
this.forEachLayerRenderer(goog.dispose);
|
||||
this.layerRenderers = {};
|
||||
this.forEachLayer(function(layer) {
|
||||
var layerRenderer = this.removeLayerRenderer(layer);
|
||||
goog.dispose(layerRenderer);
|
||||
}, this);
|
||||
goog.asserts.assert(goog.object.isEmpty(this.layerRenderers));
|
||||
};
|
||||
|
||||
|
||||
@@ -186,9 +179,7 @@ ol.webgl.Map.prototype.handleWebGLContextRestored = function() {
|
||||
var layers = this.getLayers();
|
||||
layers.forEach(function(layer) {
|
||||
var layerRenderer = this.createLayerRenderer(layer);
|
||||
var key = goog.getUid(layer);
|
||||
goog.asserts.assert(!(key in this.layerRenderers));
|
||||
this.layerRenderers[key] = layerRenderer;
|
||||
this.setLayerRenderer(layer, layerRenderer);
|
||||
}, this);
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user