From bc10446b0e480b8ae6fb4df24a2f74dd751d8bfe Mon Sep 17 00:00:00 2001 From: Tom Payne Date: Tue, 16 Apr 2013 18:31:59 +0200 Subject: [PATCH] Track changes to layers in the map --- src/ol/map.js | 51 +++++++++++++++++++++++++++++ src/ol/renderer/maprenderer.js | 59 ---------------------------------- 2 files changed, 51 insertions(+), 59 deletions(-) diff --git a/src/ol/map.js b/src/ol/map.js index 3203a2b5fb..4bcbb91c47 100644 --- a/src/ol/map.js +++ b/src/ol/map.js @@ -29,6 +29,8 @@ goog.require('goog.style'); goog.require('goog.vec.Mat4'); goog.require('ol.BrowserFeature'); goog.require('ol.Collection'); +goog.require('ol.CollectionEvent'); +goog.require('ol.CollectionEventType'); goog.require('ol.Color'); goog.require('ol.Extent'); goog.require('ol.FrameState'); @@ -295,6 +297,14 @@ ol.Map = function(options) { goog.bind(this.getTilePriority, this), goog.bind(this.handleTileChange_, this)); + /** + * @private + * @type {Array.} + */ + this.layersListenerKeys_ = null; + + goog.events.listen(this, ol.Object.getChangedEventType(ol.MapProperty.LAYERS), + this.handleLayersChanged_, false, this); goog.events.listen(this, ol.Object.getChangedEventType(ol.MapProperty.VIEW), this.handleViewChanged_, false, this); goog.events.listen(this, ol.Object.getChangedEventType(ol.MapProperty.SIZE), @@ -302,6 +312,7 @@ ol.Map = function(options) { goog.events.listen( this, ol.Object.getChangedEventType(ol.MapProperty.BACKGROUND_COLOR), this.handleBackgroundColorChanged_, false, this); + this.setValues(optionsInternal.values); // this gives the map an initial size @@ -549,6 +560,46 @@ ol.Map.prototype.handleBrowserEvent = function(browserEvent, opt_type) { }; +/** + * @param {ol.CollectionEvent} collectionEvent Collection event. + * @private + */ +ol.Map.prototype.handleLayersAdd_ = function(collectionEvent) { + this.render(); +}; + + +/** + * @param {goog.events.Event} event Event. + * @private + */ +ol.Map.prototype.handleLayersChanged_ = function(event) { + if (!goog.isNull(this.layersListenerKeys_)) { + goog.array.forEach(this.layersListenerKeys_, goog.events.unlistenByKey); + this.layersListenerKeys_ = null; + } + var layers = this.getLayers(); + if (goog.isDefAndNotNull(layers)) { + this.layersListenerKeys_ = [ + goog.events.listen(layers, ol.CollectionEventType.ADD, + this.handleLayersAdd_, false, this), + goog.events.listen(layers, ol.CollectionEventType.REMOVE, + this.handleLayersRemove_, false, this) + ]; + } + this.render(); +}; + + +/** + * @param {ol.CollectionEvent} collectionEvent Collection event. + * @private + */ +ol.Map.prototype.handleLayersRemove_ = function(collectionEvent) { + this.render(); +}; + + /** * @param {ol.MapBrowserEvent} mapBrowserEvent The event to handle. */ diff --git a/src/ol/renderer/maprenderer.js b/src/ol/renderer/maprenderer.js index 9f9690870d..15276cca0d 100644 --- a/src/ol/renderer/maprenderer.js +++ b/src/ol/renderer/maprenderer.js @@ -1,7 +1,6 @@ goog.provide('ol.renderer.Map'); goog.require('goog.Disposable'); -goog.require('goog.array'); goog.require('goog.asserts'); goog.require('goog.dispose'); goog.require('goog.events'); @@ -9,10 +8,7 @@ goog.require('goog.events.EventType'); goog.require('goog.functions'); goog.require('goog.object'); goog.require('goog.vec.Mat4'); -goog.require('ol.CollectionEvent'); -goog.require('ol.CollectionEventType'); goog.require('ol.FrameState'); -goog.require('ol.Object'); goog.require('ol.layer.Layer'); goog.require('ol.renderer.Layer'); @@ -46,20 +42,6 @@ ol.renderer.Map = function(container, map) { */ this.layerRenderers_ = {}; - /** - * @private - * @type {?number} - */ - this.mapLayersChangedListenerKey_ = goog.events.listen( - map, ol.Object.getChangedEventType(ol.MapProperty.LAYERS), - this.handleLayersChanged_, false, this); - - /** - * @private - * @type {Array.} - */ - this.layersListenerKeys_ = null; - /** * @private * @type {Object.} @@ -119,7 +101,6 @@ ol.renderer.Map.prototype.disposeInternal = function() { goog.object.forEach(this.layerRenderers_, function(layerRenderer) { goog.dispose(layerRenderer); }); - goog.events.unlistenByKey(this.mapLayersChangedListenerKey_); goog.object.forEach( this.layerRendererChangeListenKeys_, goog.events.unlistenByKey); goog.base(this, 'disposeInternal'); @@ -178,46 +159,6 @@ ol.renderer.Map.prototype.handleLayerRendererChange_ = function(event) { }; -/** - * @param {ol.CollectionEvent} collectionEvent Collection event. - * @private - */ -ol.renderer.Map.prototype.handleLayersAdd_ = function(collectionEvent) { - this.getMap().render(); -}; - - -/** - * @param {goog.events.Event} event Event. - * @private - */ -ol.renderer.Map.prototype.handleLayersChanged_ = function(event) { - if (!goog.isNull(this.layersListenerKeys_)) { - goog.array.forEach(this.layersListenerKeys_, goog.events.unlistenByKey); - this.layersListenerKeys_ = null; - } - var layers = this.getMap().getLayers(); - if (goog.isDefAndNotNull(layers)) { - this.layersListenerKeys_ = [ - goog.events.listen(layers, ol.CollectionEventType.ADD, - this.handleLayersAdd_, false, this), - goog.events.listen(layers, ol.CollectionEventType.REMOVE, - this.handleLayersRemove_, false, this) - ]; - } - this.getMap().render(); -}; - - -/** - * @param {ol.CollectionEvent} collectionEvent Collection event. - * @private - */ -ol.renderer.Map.prototype.handleLayersRemove_ = function(collectionEvent) { - this.getMap().render(); -}; - - /** * @param {string} layerKey Layer key. * @return {ol.renderer.Layer} Layer renderer.