From 4701d117f7e574e498aab808c179bf31c9a03721 Mon Sep 17 00:00:00 2001 From: Tom Payne Date: Thu, 24 Jan 2013 23:37:20 +0100 Subject: [PATCH 1/4] Always dispatch change events on load/opacity/visible changes --- src/ol/renderer/dom/domlayerrenderer.js | 24 --------------------- src/ol/renderer/layerrenderer.js | 12 ++++++++--- src/ol/renderer/webgl/webgllayerrenderer.js | 24 --------------------- 3 files changed, 9 insertions(+), 51 deletions(-) diff --git a/src/ol/renderer/dom/domlayerrenderer.js b/src/ol/renderer/dom/domlayerrenderer.js index 261c24948f..4c78d42ed9 100644 --- a/src/ol/renderer/dom/domlayerrenderer.js +++ b/src/ol/renderer/dom/domlayerrenderer.js @@ -46,30 +46,6 @@ ol.renderer.dom.Layer.prototype.getTarget = function() { }; -/** - * @inheritDoc - */ -ol.renderer.dom.Layer.prototype.handleLayerLoad = function() { - this.getMap().render(); -}; - - -/** - * @inheritDoc - */ -ol.renderer.dom.Layer.prototype.handleLayerOpacityChange = function() { - this.getMap().render(); -}; - - -/** - * @inheritDoc - */ -ol.renderer.dom.Layer.prototype.handleLayerVisibleChange = function() { - this.getMap().render(); -}; - - /** * @param {ol.FrameState} frameState Frame state. * @param {ol.layer.LayerState} layerState Layer state. diff --git a/src/ol/renderer/layerrenderer.js b/src/ol/renderer/layerrenderer.js index b3243519e9..32be5e99fd 100644 --- a/src/ol/renderer/layerrenderer.js +++ b/src/ol/renderer/layerrenderer.js @@ -109,13 +109,17 @@ ol.renderer.Layer.prototype.handleLayerHueChange = goog.nullFunction; /** * @protected */ -ol.renderer.Layer.prototype.handleLayerLoad = goog.nullFunction; +ol.renderer.Layer.prototype.handleLayerLoad = function() { + this.dispatchChangeEvent(); +}; /** * @protected */ -ol.renderer.Layer.prototype.handleLayerOpacityChange = goog.nullFunction; +ol.renderer.Layer.prototype.handleLayerOpacityChange = function() { + this.dispatchChangeEvent(); +}; /** @@ -127,7 +131,9 @@ ol.renderer.Layer.prototype.handleLayerSaturationChange = goog.nullFunction; /** * @protected */ -ol.renderer.Layer.prototype.handleLayerVisibleChange = goog.nullFunction; +ol.renderer.Layer.prototype.handleLayerVisibleChange = function() { + this.dispatchChangeEvent(); +}; /** diff --git a/src/ol/renderer/webgl/webgllayerrenderer.js b/src/ol/renderer/webgl/webgllayerrenderer.js index 7fce8f5256..79195f1148 100644 --- a/src/ol/renderer/webgl/webgllayerrenderer.js +++ b/src/ol/renderer/webgl/webgllayerrenderer.js @@ -140,22 +140,6 @@ ol.renderer.webgl.Layer.prototype.handleLayerHueChange = function() { }; -/** - * @inheritDoc - */ -ol.renderer.webgl.Layer.prototype.handleLayerLoad = function() { - this.dispatchChangeEvent(); -}; - - -/** - * @inheritDoc - */ -ol.renderer.webgl.Layer.prototype.handleLayerOpacityChange = function() { - this.dispatchChangeEvent(); -}; - - /** * @inheritDoc */ @@ -167,14 +151,6 @@ ol.renderer.webgl.Layer.prototype.handleLayerSaturationChange = function() { }; -/** - * @inheritDoc - */ -ol.renderer.webgl.Layer.prototype.handleLayerVisibleChange = function() { - this.dispatchChangeEvent(); -}; - - /** * Handle webglcontextlost. */ From 49734de240b91323085edc5d7d460940718f3742 Mon Sep 17 00:00:00 2001 From: Tom Payne Date: Thu, 24 Jan 2013 23:36:39 +0100 Subject: [PATCH 2/4] Promote dispatchChangeEvent from ol.renderer.webgl.Layer to ol.renderer.Layer --- src/ol/renderer/layerrenderer.js | 8 ++++++++ src/ol/renderer/webgl/webgllayerrenderer.js | 8 -------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/ol/renderer/layerrenderer.js b/src/ol/renderer/layerrenderer.js index 32be5e99fd..795e51988d 100644 --- a/src/ol/renderer/layerrenderer.js +++ b/src/ol/renderer/layerrenderer.js @@ -64,6 +64,14 @@ ol.renderer.Layer = function(mapRenderer, layer) { goog.inherits(ol.renderer.Layer, ol.Object); +/** + * @protected + */ +ol.renderer.Layer.prototype.dispatchChangeEvent = function() { + this.dispatchEvent(goog.events.EventType.CHANGE); +}; + + /** * @return {ol.layer.Layer} Layer. */ diff --git a/src/ol/renderer/webgl/webgllayerrenderer.js b/src/ol/renderer/webgl/webgllayerrenderer.js index 79195f1148..988d1d6ac4 100644 --- a/src/ol/renderer/webgl/webgllayerrenderer.js +++ b/src/ol/renderer/webgl/webgllayerrenderer.js @@ -66,14 +66,6 @@ ol.renderer.webgl.Layer = function(mapRenderer, layer) { goog.inherits(ol.renderer.webgl.Layer, ol.renderer.Layer); -/** - * @protected - */ -ol.renderer.webgl.Layer.prototype.dispatchChangeEvent = function() { - this.dispatchEvent(goog.events.EventType.CHANGE); -}; - - /** * @return {!goog.vec.Mat4.Float32} Color matrix. */ From 5558d6108c2aca1357da6e01ca1e1d2c04157a72 Mon Sep 17 00:00:00 2001 From: Tom Payne Date: Mon, 28 Jan 2013 19:39:54 +0100 Subject: [PATCH 3/4] Promote handleLayerRendererChange from ol.renderer.webgl.Map to ol.renderer.Map --- src/ol/renderer/maprenderer.js | 39 ++++++++++++++++----- src/ol/renderer/webgl/webglmaprenderer.js | 42 ----------------------- 2 files changed, 30 insertions(+), 51 deletions(-) diff --git a/src/ol/renderer/maprenderer.js b/src/ol/renderer/maprenderer.js index 01313a98b3..fbd45224bf 100644 --- a/src/ol/renderer/maprenderer.js +++ b/src/ol/renderer/maprenderer.js @@ -59,6 +59,12 @@ ol.renderer.Map = function(container, map) { */ this.layersListenerKeys_ = null; + /** + * @private + * @type {Object.} + */ + this.layerRendererChangeListenKeys_ = {}; + }; goog.inherits(ol.renderer.Map, goog.Disposable); @@ -140,8 +146,8 @@ ol.renderer.Map.prototype.getCanvas = goog.functions.NULL; * @return {ol.renderer.Layer} Layer renderer. */ ol.renderer.Map.prototype.getLayerRenderer = function(layer) { - var key = goog.getUid(layer); - var layerRenderer = this.layerRenderers[key]; + var layerKey = goog.getUid(layer); + var layerRenderer = this.layerRenderers[layerKey]; goog.asserts.assert(goog.isDef(layerRenderer)); return layerRenderer; }; @@ -155,6 +161,15 @@ ol.renderer.Map.prototype.getMap = function() { }; +/** + * @param {goog.events.Event} event Event. + * @protected + */ +ol.renderer.Map.prototype.handleLayerRendererChange = function(event) { + this.getMap().render(); +}; + + /** * @param {ol.CollectionEvent} collectionEvent Collection event. * @protected @@ -213,10 +228,12 @@ ol.renderer.Map.prototype.removeLayer = function(layer) { * @protected */ ol.renderer.Map.prototype.removeLayerRenderer = function(layer) { - var key = goog.getUid(layer); - if (key in this.layerRenderers) { - var layerRenderer = this.layerRenderers[key]; - delete this.layerRenderers[key]; + var layerKey = goog.getUid(layer); + if (layerKey in this.layerRenderers) { + var layerRenderer = this.layerRenderers[layerKey]; + delete this.layerRenderers[layerKey]; + goog.events.unlistenByKey(this.layerRendererChangeListenKeys_[layerKey]); + delete this.layerRendererChangeListenKeys_[layerKey]; return layerRenderer; } else { return null; @@ -237,7 +254,11 @@ ol.renderer.Map.prototype.renderFrame = goog.nullFunction; * @protected */ ol.renderer.Map.prototype.setLayerRenderer = function(layer, layerRenderer) { - var key = goog.getUid(layer); - goog.asserts.assert(!(key in this.layerRenderers)); - this.layerRenderers[key] = layerRenderer; + var layerKey = goog.getUid(layer); + goog.asserts.assert(!(layerKey in this.layerRenderers)); + this.layerRenderers[layerKey] = layerRenderer; + goog.asserts.assert(!(layerKey in this.layerRendererChangeListenKeys_)); + this.layerRendererChangeListenKeys_[layerKey] = goog.events.listen( + layerRenderer, goog.events.EventType.CHANGE, + this.handleLayerRendererChange, false, this); }; diff --git a/src/ol/renderer/webgl/webglmaprenderer.js b/src/ol/renderer/webgl/webglmaprenderer.js index 6a62129e67..6c657fb0f5 100644 --- a/src/ol/renderer/webgl/webglmaprenderer.js +++ b/src/ol/renderer/webgl/webglmaprenderer.js @@ -206,12 +206,6 @@ ol.renderer.webgl.Map = function(container, map) { */ this.vertexShader_ = ol.renderer.webgl.map.shader.Vertex.getInstance(); - /** - * @private - * @type {Object.} - */ - this.layerRendererChangeListenKeys_ = {}; - this.initializeGL_(); }; @@ -409,15 +403,6 @@ ol.renderer.webgl.Map.prototype.getShader = function(shaderObject) { }; -/** - * @param {goog.events.Event} event Event. - * @protected - */ -ol.renderer.webgl.Map.prototype.handleLayerRendererChange = function(event) { - this.getMap().render(); -}; - - /** * @param {goog.events.Event} event Event. * @protected @@ -484,20 +469,6 @@ ol.renderer.webgl.Map.prototype.removeLayer = function(layer) { }; -/** - * @inheritDoc - */ -ol.renderer.webgl.Map.prototype.removeLayerRenderer = function(layer) { - var layerRenderer = goog.base(this, 'removeLayerRenderer', layer); - if (!goog.isNull(layerRenderer)) { - var layerKey = goog.getUid(layer); - goog.events.unlistenByKey(this.layerRendererChangeListenKeys_[layerKey]); - delete this.layerRendererChangeListenKeys_[layerKey]; - } - return layerRenderer; -}; - - /** * @inheritDoc */ @@ -604,16 +575,3 @@ ol.renderer.webgl.Map.prototype.renderFrame = function(frameState) { } }; - - -/** - * @inheritDoc - */ -ol.renderer.webgl.Map.prototype.setLayerRenderer = function( - layer, layerRenderer) { - goog.base(this, 'setLayerRenderer', layer, layerRenderer); - var layerKey = goog.getUid(layer); - this.layerRendererChangeListenKeys_[layerKey] = goog.events.listen( - layerRenderer, goog.events.EventType.CHANGE, - this.handleLayerRendererChange, false, this); -}; From 3bd1b92b056dfa06a18d80dd3fc53a094597c20e Mon Sep 17 00:00:00 2001 From: Tom Payne Date: Mon, 28 Jan 2013 19:56:32 +0100 Subject: [PATCH 4/4] Promote renderFrame from ol.renderer.*.LayerRender to ol.renderer.LayerRenderer --- src/ol/renderer/canvas/canvaslayerrenderer.js | 9 --------- src/ol/renderer/dom/domlayerrenderer.js | 9 --------- src/ol/renderer/layerrenderer.js | 8 ++++++++ src/ol/renderer/webgl/webgllayerrenderer.js | 10 ---------- 4 files changed, 8 insertions(+), 28 deletions(-) diff --git a/src/ol/renderer/canvas/canvaslayerrenderer.js b/src/ol/renderer/canvas/canvaslayerrenderer.js index 78ed9d6665..f63048d8e3 100644 --- a/src/ol/renderer/canvas/canvaslayerrenderer.js +++ b/src/ol/renderer/canvas/canvaslayerrenderer.js @@ -1,7 +1,5 @@ goog.provide('ol.renderer.canvas.Layer'); -goog.require('ol.FrameState'); -goog.require('ol.layer.LayerState'); goog.require('ol.renderer.Layer'); @@ -28,10 +26,3 @@ ol.renderer.canvas.Layer.prototype.getImage = goog.abstractMethod; * @return {!goog.vec.Mat4.Number} Transform. */ ol.renderer.canvas.Layer.prototype.getTransform = goog.abstractMethod; - - -/** - * @param {ol.FrameState} frameState Frame state. - * @param {ol.layer.LayerState} layerState Layer state. - */ -ol.renderer.canvas.Layer.prototype.renderFrame = goog.abstractMethod; diff --git a/src/ol/renderer/dom/domlayerrenderer.js b/src/ol/renderer/dom/domlayerrenderer.js index 4c78d42ed9..5a39813363 100644 --- a/src/ol/renderer/dom/domlayerrenderer.js +++ b/src/ol/renderer/dom/domlayerrenderer.js @@ -1,9 +1,7 @@ goog.provide('ol.renderer.dom.Layer'); goog.require('ol.Coordinate'); -goog.require('ol.FrameState'); goog.require('ol.layer.Layer'); -goog.require('ol.layer.LayerState'); goog.require('ol.renderer.Layer'); @@ -44,10 +42,3 @@ ol.renderer.dom.Layer.prototype.disposeInternal = function() { ol.renderer.dom.Layer.prototype.getTarget = function() { return this.target; }; - - -/** - * @param {ol.FrameState} frameState Frame state. - * @param {ol.layer.LayerState} layerState Layer state. - */ -ol.renderer.dom.Layer.prototype.renderFrame = goog.abstractMethod; diff --git a/src/ol/renderer/layerrenderer.js b/src/ol/renderer/layerrenderer.js index 795e51988d..e3f2b01635 100644 --- a/src/ol/renderer/layerrenderer.js +++ b/src/ol/renderer/layerrenderer.js @@ -7,6 +7,7 @@ goog.require('ol.Object'); goog.require('ol.TileRange'); goog.require('ol.layer.Layer'); goog.require('ol.layer.LayerProperty'); +goog.require('ol.layer.LayerState'); goog.require('ol.source.TileSource'); @@ -144,6 +145,13 @@ ol.renderer.Layer.prototype.handleLayerVisibleChange = function() { }; +/** + * @param {ol.FrameState} frameState Frame state. + * @param {ol.layer.LayerState} layerState Layer state. + */ +ol.renderer.Layer.prototype.renderFrame = goog.abstractMethod; + + /** * @protected * @param {ol.FrameState} frameState Frame state. diff --git a/src/ol/renderer/webgl/webgllayerrenderer.js b/src/ol/renderer/webgl/webgllayerrenderer.js index 988d1d6ac4..3f8f3c2d17 100644 --- a/src/ol/renderer/webgl/webgllayerrenderer.js +++ b/src/ol/renderer/webgl/webgllayerrenderer.js @@ -3,9 +3,7 @@ goog.provide('ol.renderer.webgl.Layer'); goog.require('goog.vec.Mat4'); -goog.require('ol.FrameState'); goog.require('ol.layer.Layer'); -goog.require('ol.layer.LayerState'); goog.require('ol.renderer.Layer'); goog.require('ol.vec.Mat4'); @@ -149,14 +147,6 @@ ol.renderer.webgl.Layer.prototype.handleLayerSaturationChange = function() { ol.renderer.webgl.Layer.prototype.handleWebGLContextLost = goog.nullFunction; -/** - * Render. - * @param {ol.FrameState} frameState Frame state. - * @param {ol.layer.LayerState} layerState Layer state. - */ -ol.renderer.webgl.Layer.prototype.renderFrame = goog.abstractMethod; - - /** * @private */