From 71a462cd54d30c748d69766644e4f7450aad3168 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89ric=20Lemoine?= Date: Thu, 24 Jan 2013 21:40:26 +0100 Subject: [PATCH 1/6] Make map handle view changes With the frameState stuff the map renderer need not listen to view changes. The map renderer receives orders from the map. These orders are renderFrame_ calls with frameState objects representing the current state. --- src/ol/map.js | 34 +++++++++++++++++ src/ol/renderer/canvas/canvasmaprenderer.js | 18 --------- src/ol/renderer/maprenderer.js | 41 +-------------------- 3 files changed, 35 insertions(+), 58 deletions(-) diff --git a/src/ol/map.js b/src/ol/map.js index 9f8e99574b..9dffa68f9d 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,6 +283,8 @@ 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); this.setValues(mapOptionsInternal.values); this.handleBrowserWindowResize(); @@ -559,6 +567,32 @@ ol.Map.prototype.handleBrowserWindowResize = function() { }; +/** + * @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..c107c50c9f 100644 --- a/src/ol/renderer/canvas/canvasmaprenderer.js +++ b/src/ol/renderer/canvas/canvasmaprenderer.js @@ -84,15 +84,6 @@ ol.renderer.canvas.Map.prototype.handleBackgroundColorChanged = function() { }; -/** - * @inheritDoc - */ -ol.renderer.canvas.Map.prototype.handleViewPropertyChanged = function() { - goog.base(this, 'handleViewPropertyChanged'); - this.getMap().render(); -}; - - /** * @param {goog.events.Event} event Event. * @protected @@ -111,15 +102,6 @@ ol.renderer.canvas.Map.prototype.handleSizeChanged = function() { }; -/** - * @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..1ebf22042f 100644 --- a/src/ol/renderer/maprenderer.js +++ b/src/ol/renderer/maprenderer.js @@ -47,12 +47,6 @@ ol.renderer.Map = function(container, map) { this.layersListenerKeys_ = null; - /** - * @private - * @type {?number} - */ - this.viewPropertyListenerKey_ = null; - /** * @private * @type {Array.} @@ -68,11 +62,7 @@ ol.renderer.Map = function(container, map) { 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.handleSizeChanged, false, this) ]; }; @@ -137,9 +127,6 @@ ol.renderer.Map.prototype.disposeInternal = function() { goog.dispose(layerRenderer); }); goog.array.forEach(this.mapListenerKeys_, goog.events.unlistenByKey); - if (!goog.isNull(this.viewPropertyListenerKey_)) { - goog.events.unlistenByKey(this.viewPropertyListenerKey_); - } if (!goog.isNull(this.layersListenerKeys_)) { goog.array.forEach(this.layersListenerKeys_, goog.events.unlistenByKey); } @@ -223,14 +210,6 @@ ol.renderer.Map.prototype.handleLayersRemove = function(collectionEvent) { }; -/** - * @protected - */ -ol.renderer.Map.prototype.handleViewPropertyChanged = function() { - this.getMap().render(); -}; - - /** * @protected */ @@ -239,24 +218,6 @@ ol.renderer.Map.prototype.handleSizeChanged = function() { }; -/** - * @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 From 15898b559bbfb6477fa32c6b6694617cc6078a19 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89ric=20Lemoine?= Date: Thu, 24 Jan 2013 22:06:47 +0100 Subject: [PATCH 2/6] Make map handle size changes --- src/ol/map.js | 10 ++++++++++ src/ol/renderer/canvas/canvasmaprenderer.js | 9 --------- src/ol/renderer/maprenderer.js | 14 +------------- 3 files changed, 11 insertions(+), 22 deletions(-) diff --git a/src/ol/map.js b/src/ol/map.js index 9dffa68f9d..0202d0d2af 100644 --- a/src/ol/map.js +++ b/src/ol/map.js @@ -285,6 +285,8 @@ ol.Map = function(mapOptions) { 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); this.setValues(mapOptionsInternal.values); this.handleBrowserWindowResize(); @@ -567,6 +569,14 @@ ol.Map.prototype.handleBrowserWindowResize = function() { }; +/** + * @private + */ +ol.Map.prototype.handleSizeChanged_ = function() { + this.render(); +}; + + /** * @private */ diff --git a/src/ol/renderer/canvas/canvasmaprenderer.js b/src/ol/renderer/canvas/canvasmaprenderer.js index c107c50c9f..d06eeda438 100644 --- a/src/ol/renderer/canvas/canvasmaprenderer.js +++ b/src/ol/renderer/canvas/canvasmaprenderer.js @@ -93,15 +93,6 @@ ol.renderer.canvas.Map.prototype.handleLayerRendererChange = function(event) { }; -/** - * @inheritDoc - */ -ol.renderer.canvas.Map.prototype.handleSizeChanged = function() { - goog.base(this, 'handleSizeChanged'); - this.getMap().render(); -}; - - /** * @inheritDoc */ diff --git a/src/ol/renderer/maprenderer.js b/src/ol/renderer/maprenderer.js index 1ebf22042f..5eb3c507bb 100644 --- a/src/ol/renderer/maprenderer.js +++ b/src/ol/renderer/maprenderer.js @@ -58,11 +58,7 @@ ol.renderer.Map = function(container, map) { 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) + this.handleLayersChanged, false, this) ]; }; @@ -210,14 +206,6 @@ ol.renderer.Map.prototype.handleLayersRemove = function(collectionEvent) { }; -/** - * @protected - */ -ol.renderer.Map.prototype.handleSizeChanged = function() { - this.getMap().render(); -}; - - /** * @param {ol.layer.Layer} layer Layer. * @protected From 2a28b7c699656a19862ccef7dd53a98f73dcd0e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89ric=20Lemoine?= Date: Thu, 24 Jan 2013 22:07:04 +0100 Subject: [PATCH 3/6] Add comment --- src/ol/map.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/ol/map.js b/src/ol/map.js index 0202d0d2af..a5ebaae2aa 100644 --- a/src/ol/map.js +++ b/src/ol/map.js @@ -289,6 +289,7 @@ ol.Map = function(mapOptions) { this.handleSizeChanged_, false, this); this.setValues(mapOptionsInternal.values); + // this gives the map an initial size this.handleBrowserWindowResize(); this.controls_.forEach( From 4a64837ba1acdd26772e73e40b6e38185d214f2c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89ric=20Lemoine?= Date: Thu, 24 Jan 2013 22:12:10 +0100 Subject: [PATCH 4/6] Make map handle background color changes --- src/ol/map.js | 11 +++++++++++ src/ol/renderer/canvas/canvasmaprenderer.js | 8 -------- src/ol/renderer/maprenderer.js | 10 ---------- src/ol/renderer/webgl/webglmaprenderer.js | 8 -------- 4 files changed, 11 insertions(+), 26 deletions(-) diff --git a/src/ol/map.js b/src/ol/map.js index a5ebaae2aa..277ef4a172 100644 --- a/src/ol/map.js +++ b/src/ol/map.js @@ -287,6 +287,9 @@ ol.Map = function(mapOptions) { 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 @@ -561,6 +564,14 @@ ol.Map.prototype.handlePostRender = function() { }; +/** + * @private + */ +ol.Map.prototype.handleBackgroundColorChanged_ = function() { + this.render(); +}; + + /** * @protected */ diff --git a/src/ol/renderer/canvas/canvasmaprenderer.js b/src/ol/renderer/canvas/canvasmaprenderer.js index d06eeda438..e740898e42 100644 --- a/src/ol/renderer/canvas/canvasmaprenderer.js +++ b/src/ol/renderer/canvas/canvasmaprenderer.js @@ -76,14 +76,6 @@ ol.renderer.canvas.Map.prototype.getCanvas = function() { }; -/** - * @inheritDoc - */ -ol.renderer.canvas.Map.prototype.handleBackgroundColorChanged = function() { - this.getMap().render(); -}; - - /** * @param {goog.events.Event} event Event. * @protected diff --git a/src/ol/renderer/maprenderer.js b/src/ol/renderer/maprenderer.js index 5eb3c507bb..1e953dfc24 100644 --- a/src/ol/renderer/maprenderer.js +++ b/src/ol/renderer/maprenderer.js @@ -52,10 +52,6 @@ ol.renderer.Map = function(container, map) { * @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) @@ -157,12 +153,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 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 From 80b38e608bf95cc2862534424cde5924a5cbe788 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89ric=20Lemoine?= Date: Thu, 24 Jan 2013 22:24:51 +0100 Subject: [PATCH 5/6] No more need for listener keys array --- src/ol/renderer/canvas/canvasmaprenderer.js | 9 --------- src/ol/renderer/maprenderer.js | 16 +++++++--------- 2 files changed, 7 insertions(+), 18 deletions(-) diff --git a/src/ol/renderer/canvas/canvasmaprenderer.js b/src/ol/renderer/canvas/canvasmaprenderer.js index e740898e42..5d9fa3741e 100644 --- a/src/ol/renderer/canvas/canvasmaprenderer.js +++ b/src/ol/renderer/canvas/canvasmaprenderer.js @@ -76,15 +76,6 @@ ol.renderer.canvas.Map.prototype.getCanvas = function() { }; -/** - * @param {goog.events.Event} event Event. - * @protected - */ -ol.renderer.canvas.Map.prototype.handleLayerRendererChange = function(event) { - this.getMap().render(); -}; - - /** * @inheritDoc */ diff --git a/src/ol/renderer/maprenderer.js b/src/ol/renderer/maprenderer.js index 1e953dfc24..06bf5cb930 100644 --- a/src/ol/renderer/maprenderer.js +++ b/src/ol/renderer/maprenderer.js @@ -42,20 +42,18 @@ ol.renderer.Map = function(container, map) { /** * @private - * @type {Array.} + * @type {?number} */ - this.layersListenerKeys_ = 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.LAYERS), - this.handleLayersChanged, false, this) - ]; + this.layersListenerKeys_ = null; }; goog.inherits(ol.renderer.Map, goog.Disposable); @@ -118,7 +116,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); + goog.events.unlistenByKey(this.mapLayersChangedListenerKey_); if (!goog.isNull(this.layersListenerKeys_)) { goog.array.forEach(this.layersListenerKeys_, goog.events.unlistenByKey); } From 98b264e8ce5bb990db212e155b28de5bc63b9dd1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89ric=20Lemoine?= Date: Thu, 24 Jan 2013 22:25:00 +0100 Subject: [PATCH 6/6] Add comment --- src/ol/renderer/maprenderer.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/ol/renderer/maprenderer.js b/src/ol/renderer/maprenderer.js index 06bf5cb930..01313a98b3 100644 --- a/src/ol/renderer/maprenderer.js +++ b/src/ol/renderer/maprenderer.js @@ -40,6 +40,10 @@ ol.renderer.Map = function(container, map) { */ this.layerRenderers = {}; + // + // We listen to layer add/remove to add/remove layer renderers. + // + /** * @private * @type {?number}