From 249449df3b533b797aae785444b05d1ab1127b15 Mon Sep 17 00:00:00 2001 From: Tom Payne Date: Sun, 15 Jul 2012 20:45:39 +0200 Subject: [PATCH] Listen for changes in layer renderers --- src/ol/webgl/map.js | 47 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/src/ol/webgl/map.js b/src/ol/webgl/map.js index 421b0ea09d..6e03016af2 100644 --- a/src/ol/webgl/map.js +++ b/src/ol/webgl/map.js @@ -3,6 +3,9 @@ goog.provide('ol.webgl.Map'); goog.require('goog.dispose'); goog.require('goog.dom'); goog.require('goog.dom.TagName'); +goog.require('goog.events'); +goog.require('goog.events.Event'); +goog.require('goog.events.EventType'); goog.require('goog.style'); goog.require('goog.webgl'); goog.require('ol.Layer'); @@ -96,6 +99,12 @@ ol.webgl.Map = function(target, opt_values) { */ this.vertexShader_ = ol.webgl.Map.createVertexShader_(); + /** + * @private + * @type {Object.} + */ + this.layerRendererChangeListenKeys_ = {}; + if (goog.isDef(opt_values)) { this.setValues(opt_values); } @@ -262,6 +271,18 @@ ol.webgl.Map.prototype.handleLayerAdd = function(layer) { }; +/** + * @param {goog.events.Event} event Event. + * @protected + */ +ol.webgl.Map.prototype.handleLayerRendererChange = function(event) { + var layerRenderer = /** @type {ol.LayerRenderer} */ (event.target); + if (layerRenderer.getLayer().getVisible()) { + this.redraw(); + } +}; + + /** * @inheritDoc */ @@ -363,3 +384,29 @@ ol.webgl.Map.prototype.redrawInternal = function() { return animate; }; + + +/** + * @inheritDoc + */ +ol.webgl.Map.prototype.removeLayerRenderer = function(layer) { + var layerRenderer = goog.base(this, 'removeLayerRenderer', layer); + if (!goog.isNull(layerRenderer)) { + var key = goog.getUid(layer); + goog.events.unlistenByKey(this.layerRendererChangeListenKeys_[key]); + delete this.layerRendererChangeListenKeys_[key]; + } + return layerRenderer; +}; + + +/** + * @inheritDoc + */ +ol.webgl.Map.prototype.setLayerRenderer = function(layer, layerRenderer) { + goog.base(this, 'setLayerRenderer', layer, layerRenderer); + var key = goog.getUid(layer); + this.layerRendererChangeListenKeys_[key] = goog.events.listen(layerRenderer, + goog.events.EventType.CHANGE, this.handleLayerRendererChange, false, + this); +};