Make layer renderers observable and re-render on change

This commit is contained in:
Tim Schaub
2015-02-07 16:42:36 -07:00
parent 693ec7706e
commit 7f18033171
2 changed files with 29 additions and 2 deletions
+3 -2
View File
@@ -6,6 +6,7 @@ goog.require('goog.events');
goog.require('goog.events.EventType'); goog.require('goog.events.EventType');
goog.require('goog.functions'); goog.require('goog.functions');
goog.require('ol.ImageState'); goog.require('ol.ImageState');
goog.require('ol.Observable');
goog.require('ol.TileRange'); goog.require('ol.TileRange');
goog.require('ol.TileState'); goog.require('ol.TileState');
goog.require('ol.layer.Layer'); goog.require('ol.layer.Layer');
@@ -19,7 +20,7 @@ goog.require('ol.vec.Mat4');
/** /**
* @constructor * @constructor
* @extends {goog.Disposable} * @extends {ol.Observable}
* @param {ol.renderer.Map} mapRenderer Map renderer. * @param {ol.renderer.Map} mapRenderer Map renderer.
* @param {ol.layer.Layer} layer Layer. * @param {ol.layer.Layer} layer Layer.
* @suppress {checkStructDictInheritance} * @suppress {checkStructDictInheritance}
@@ -43,7 +44,7 @@ ol.renderer.Layer = function(mapRenderer, layer) {
}; };
goog.inherits(ol.renderer.Layer, goog.Disposable); goog.inherits(ol.renderer.Layer, ol.Observable);
/** /**
+26
View File
@@ -4,6 +4,8 @@ goog.provide('ol.renderer.Map');
goog.require('goog.Disposable'); goog.require('goog.Disposable');
goog.require('goog.asserts'); goog.require('goog.asserts');
goog.require('goog.dispose'); goog.require('goog.dispose');
goog.require('goog.events');
goog.require('goog.events.EventType');
goog.require('goog.functions'); goog.require('goog.functions');
goog.require('goog.object'); goog.require('goog.object');
goog.require('goog.vec.Mat4'); goog.require('goog.vec.Mat4');
@@ -56,6 +58,12 @@ ol.renderer.Map = function(container, map) {
*/ */
this.layerRenderers_ = {}; this.layerRenderers_ = {};
/**
* @private
* @type {Object.<string, goog.events.Key>}
*/
this.layerRendererListeners_ = {};
}; };
goog.inherits(ol.renderer.Map, goog.Disposable); goog.inherits(ol.renderer.Map, goog.Disposable);
@@ -254,6 +262,10 @@ ol.renderer.Map.prototype.getLayerRenderer = function(layer) {
} else { } else {
var layerRenderer = this.createLayerRenderer(layer); var layerRenderer = this.createLayerRenderer(layer);
this.layerRenderers_[layerKey] = layerRenderer; this.layerRenderers_[layerKey] = layerRenderer;
this.layerRendererListeners_[layerKey] = goog.events.listen(layerRenderer,
goog.events.EventType.CHANGE, this.handleLayerRendererChange_,
false, this);
return layerRenderer; return layerRenderer;
} }
}; };
@@ -293,6 +305,15 @@ ol.renderer.Map.prototype.getMap = function() {
ol.renderer.Map.prototype.getType = goog.abstractMethod; ol.renderer.Map.prototype.getType = goog.abstractMethod;
/**
* Handle changes in a layer renderer.
* @private
*/
ol.renderer.Map.prototype.handleLayerRendererChange_ = function() {
this.map_.render();
};
/** /**
* @param {string} layerKey Layer key. * @param {string} layerKey Layer key.
* @return {ol.renderer.Layer} Layer renderer. * @return {ol.renderer.Layer} Layer renderer.
@@ -302,6 +323,11 @@ ol.renderer.Map.prototype.removeLayerRendererByKey_ = function(layerKey) {
goog.asserts.assert(layerKey in this.layerRenderers_); goog.asserts.assert(layerKey in this.layerRenderers_);
var layerRenderer = this.layerRenderers_[layerKey]; var layerRenderer = this.layerRenderers_[layerKey];
delete this.layerRenderers_[layerKey]; delete this.layerRenderers_[layerKey];
goog.asserts.assert(layerKey in this.layerRendererListeners_);
goog.events.unlistenByKey(this.layerRendererListeners_[layerKey]);
delete this.layerRendererListeners_[layerKey];
return layerRenderer; return layerRenderer;
}; };