diff --git a/src/ol/map.js b/src/ol/map.js index 9f8e99574b..277ef4a172 100644 --- a/src/ol/map.js +++ b/src/ol/map.js @@ -174,6 +174,12 @@ ol.Map = function(mapOptions) { */ this.target_ = mapOptionsInternal.target; + /** + * @private + * @type {?number} + */ + this.viewPropertyListenerKey_ = null; + /** * @private * @type {Element} @@ -277,8 +283,16 @@ ol.Map = function(mapOptions) { */ this.tileQueue_ = new ol.TileQueue(goog.bind(this.getTilePriority, 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), + this.handleSizeChanged_, false, this); + goog.events.listen( + this, ol.Object.getChangedEventType(ol.MapProperty.BACKGROUND_COLOR), + this.handleBackgroundColorChanged_, false, this), this.setValues(mapOptionsInternal.values); + // this gives the map an initial size this.handleBrowserWindowResize(); this.controls_.forEach( @@ -550,6 +564,14 @@ ol.Map.prototype.handlePostRender = function() { }; +/** + * @private + */ +ol.Map.prototype.handleBackgroundColorChanged_ = function() { + this.render(); +}; + + /** * @protected */ @@ -559,6 +581,40 @@ ol.Map.prototype.handleBrowserWindowResize = function() { }; +/** + * @private + */ +ol.Map.prototype.handleSizeChanged_ = function() { + this.render(); +}; + + +/** + * @private + */ +ol.Map.prototype.handleViewPropertyChanged_ = function() { + this.render(); +}; + + +/** + * @private + */ +ol.Map.prototype.handleViewChanged_ = function() { + if (!goog.isNull(this.viewPropertyListenerKey_)) { + goog.events.unlistenByKey(this.viewPropertyListenerKey_); + this.viewPropertyListenerKey_ = null; + } + var view = this.getView(); + if (goog.isDefAndNotNull(view)) { + this.viewPropertyListenerKey_ = goog.events.listen( + view, ol.ObjectEventType.CHANGED, + this.handleViewPropertyChanged_, false, this); + } + this.render(); +}; + + /** * @return {boolean} Is defined. */ diff --git a/src/ol/renderer/canvas/canvasmaprenderer.js b/src/ol/renderer/canvas/canvasmaprenderer.js index 24d21410db..5d9fa3741e 100644 --- a/src/ol/renderer/canvas/canvasmaprenderer.js +++ b/src/ol/renderer/canvas/canvasmaprenderer.js @@ -76,50 +76,6 @@ ol.renderer.canvas.Map.prototype.getCanvas = function() { }; -/** - * @inheritDoc - */ -ol.renderer.canvas.Map.prototype.handleBackgroundColorChanged = function() { - this.getMap().render(); -}; - - -/** - * @inheritDoc - */ -ol.renderer.canvas.Map.prototype.handleViewPropertyChanged = function() { - goog.base(this, 'handleViewPropertyChanged'); - this.getMap().render(); -}; - - -/** - * @param {goog.events.Event} event Event. - * @protected - */ -ol.renderer.canvas.Map.prototype.handleLayerRendererChange = function(event) { - this.getMap().render(); -}; - - -/** - * @inheritDoc - */ -ol.renderer.canvas.Map.prototype.handleSizeChanged = function() { - goog.base(this, 'handleSizeChanged'); - this.getMap().render(); -}; - - -/** - * @inheritDoc - */ -ol.renderer.canvas.Map.prototype.handleViewChanged = function() { - goog.base(this, 'handleViewChanged'); - this.getMap().render(); -}; - - /** * @inheritDoc */ diff --git a/src/ol/renderer/maprenderer.js b/src/ol/renderer/maprenderer.js index 3587628852..01313a98b3 100644 --- a/src/ol/renderer/maprenderer.js +++ b/src/ol/renderer/maprenderer.js @@ -40,40 +40,24 @@ ol.renderer.Map = function(container, map) { */ this.layerRenderers = {}; - /** - * @private - * @type {Array.} - */ - this.layersListenerKeys_ = null; - + // + // We listen to layer add/remove to add/remove layer renderers. + // /** * @private * @type {?number} */ - this.viewPropertyListenerKey_ = null; + this.mapLayersChangedListenerKey_ = + goog.events.listen( + map, ol.Object.getChangedEventType(ol.MapProperty.LAYERS), + this.handleLayersChanged, false, this); /** * @private * @type {Array.} */ - this.mapListenerKeys_ = [ - goog.events.listen( - map, ol.Object.getChangedEventType(ol.MapProperty.BACKGROUND_COLOR), - this.handleBackgroundColorChanged, false, this), - - goog.events.listen( - map, ol.Object.getChangedEventType(ol.MapProperty.LAYERS), - this.handleLayersChanged, false, this), - - goog.events.listen( - map, ol.Object.getChangedEventType(ol.MapProperty.SIZE), - this.handleSizeChanged, false, this), - - goog.events.listen( - map, ol.Object.getChangedEventType(ol.MapProperty.VIEW), - this.handleViewChanged, false, this) - ]; + this.layersListenerKeys_ = null; }; goog.inherits(ol.renderer.Map, goog.Disposable); @@ -136,10 +120,7 @@ ol.renderer.Map.prototype.disposeInternal = function() { goog.object.forEach(this.layerRenderers, function(layerRenderer) { goog.dispose(layerRenderer); }); - goog.array.forEach(this.mapListenerKeys_, goog.events.unlistenByKey); - if (!goog.isNull(this.viewPropertyListenerKey_)) { - goog.events.unlistenByKey(this.viewPropertyListenerKey_); - } + goog.events.unlistenByKey(this.mapLayersChangedListenerKey_); if (!goog.isNull(this.layersListenerKeys_)) { goog.array.forEach(this.layersListenerKeys_, goog.events.unlistenByKey); } @@ -174,12 +155,6 @@ ol.renderer.Map.prototype.getMap = function() { }; -/** - * Handle background color changed. - */ -ol.renderer.Map.prototype.handleBackgroundColorChanged = goog.nullFunction; - - /** * @param {ol.CollectionEvent} collectionEvent Collection event. * @protected @@ -223,40 +198,6 @@ ol.renderer.Map.prototype.handleLayersRemove = function(collectionEvent) { }; -/** - * @protected - */ -ol.renderer.Map.prototype.handleViewPropertyChanged = function() { - this.getMap().render(); -}; - - -/** - * @protected - */ -ol.renderer.Map.prototype.handleSizeChanged = function() { - this.getMap().render(); -}; - - -/** - * @protected - */ -ol.renderer.Map.prototype.handleViewChanged = function() { - if (!goog.isNull(this.viewPropertyListenerKey_)) { - goog.events.unlistenByKey(this.viewPropertyListenerKey_); - this.viewPropertyListenerKey_ = null; - } - var view = this.getMap().getView(); - if (goog.isDefAndNotNull(view)) { - this.viewPropertyListenerKey_ = goog.events.listen( - view, ol.ObjectEventType.CHANGED, - this.handleViewPropertyChanged, false, this); - } - this.getMap().render(); -}; - - /** * @param {ol.layer.Layer} layer Layer. * @protected diff --git a/src/ol/renderer/webgl/webglmaprenderer.js b/src/ol/renderer/webgl/webglmaprenderer.js index a1eefb7326..6a62129e67 100644 --- a/src/ol/renderer/webgl/webglmaprenderer.js +++ b/src/ol/renderer/webgl/webglmaprenderer.js @@ -409,14 +409,6 @@ ol.renderer.webgl.Map.prototype.getShader = function(shaderObject) { }; -/** - * @inheritDoc - */ -ol.renderer.webgl.Map.prototype.handleBackgroundColorChanged = function() { - this.getMap().render(); -}; - - /** * @param {goog.events.Event} event Event. * @protected