Refresh layer renderer management
This commit is contained in:
+60
-25
@@ -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) {
|
ol.Map.prototype.freeze = function() {
|
||||||
var layers = this.getLayers();
|
++this.freezeCount_;
|
||||||
if (goog.isDefAndNotNull(layers)) {
|
|
||||||
layers.forEach(function(layer) {
|
|
||||||
var key = goog.getUid(layer);
|
|
||||||
var layerRenderer = this.layerRenderers[key];
|
|
||||||
f.call(opt_obj, layerRenderer);
|
|
||||||
}, this);
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* @inheritDoc
|
||||||
*/
|
*/
|
||||||
ol.Map.prototype.freeze = function() {
|
ol.Map.prototype.disposeInternal = function() {
|
||||||
++this.freezeCount_;
|
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.
|
* @return {ol.Array} Layers.
|
||||||
*/
|
*/
|
||||||
@@ -278,11 +295,8 @@ ol.Map.prototype.handleLayerAdd = function(layer) {
|
|||||||
var projection = this.getProjection();
|
var projection = this.getProjection();
|
||||||
var storeProjection = layer.getStore().getProjection();
|
var storeProjection = layer.getStore().getProjection();
|
||||||
goog.asserts.assert(ol.Projection.equivalent(projection, storeProjection));
|
goog.asserts.assert(ol.Projection.equivalent(projection, storeProjection));
|
||||||
var key = goog.getUid(layer);
|
|
||||||
var layerRenderer = this.createLayerRenderer(layer);
|
var layerRenderer = this.createLayerRenderer(layer);
|
||||||
if (!goog.isNull(layerRenderer)) {
|
this.setLayerRenderer(layer, layerRenderer);
|
||||||
this.layerRenderers[key] = layerRenderer;
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -291,12 +305,7 @@ ol.Map.prototype.handleLayerAdd = function(layer) {
|
|||||||
* @protected
|
* @protected
|
||||||
*/
|
*/
|
||||||
ol.Map.prototype.handleLayerRemove = function(layer) {
|
ol.Map.prototype.handleLayerRemove = function(layer) {
|
||||||
var key = goog.getUid(layer);
|
this.removeLayerRenderer(layer);
|
||||||
if (key in this.layerRenderers) {
|
|
||||||
var layerRenderer = this.layerRenderers[key];
|
|
||||||
delete this.layerRenderers[key];
|
|
||||||
goog.dispose(layerRenderer);
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -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.
|
* @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.
|
* @param {ol.Array} layers Layers.
|
||||||
*/
|
*/
|
||||||
|
|||||||
+6
-15
@@ -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.
|
* @return {WebGLRenderingContext} GL.
|
||||||
*/
|
*/
|
||||||
@@ -170,8 +160,11 @@ ol.webgl.Map.prototype.handleSizeChanged = function() {
|
|||||||
*/
|
*/
|
||||||
ol.webgl.Map.prototype.handleWebGLContextLost = function(event) {
|
ol.webgl.Map.prototype.handleWebGLContextLost = function(event) {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
this.forEachLayerRenderer(goog.dispose);
|
this.forEachLayer(function(layer) {
|
||||||
this.layerRenderers = {};
|
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();
|
var layers = this.getLayers();
|
||||||
layers.forEach(function(layer) {
|
layers.forEach(function(layer) {
|
||||||
var layerRenderer = this.createLayerRenderer(layer);
|
var layerRenderer = this.createLayerRenderer(layer);
|
||||||
var key = goog.getUid(layer);
|
this.setLayerRenderer(layer, layerRenderer);
|
||||||
goog.asserts.assert(!(key in this.layerRenderers));
|
|
||||||
this.layerRenderers[key] = layerRenderer;
|
|
||||||
}, this);
|
}, this);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user