From 85a95a0036fcf957d054a47afb74de5529b4feca Mon Sep 17 00:00:00 2001 From: Tom Payne Date: Thu, 18 Apr 2013 18:58:59 +0200 Subject: [PATCH] Call render and requestRenderFrame directly instead of using changed events --- src/ol/renderer/layerrenderer.js | 35 +++++++++++++-------- src/ol/renderer/maprenderer.js | 25 --------------- src/ol/renderer/webgl/webgllayerrenderer.js | 8 ++--- 3 files changed, 26 insertions(+), 42 deletions(-) diff --git a/src/ol/renderer/layerrenderer.js b/src/ol/renderer/layerrenderer.js index 89fb913b6a..72bbc5ed8a 100644 --- a/src/ol/renderer/layerrenderer.js +++ b/src/ol/renderer/layerrenderer.js @@ -72,14 +72,6 @@ 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); -}; - - /** * @protected * @return {ol.layer.Layer} Layer. @@ -133,7 +125,7 @@ ol.renderer.Layer.prototype.handleLayerHueChange = goog.nullFunction; ol.renderer.Layer.prototype.handleImageChange = function(event) { var image = /** @type {ol.Image} */ (event.target); if (image.getState() === ol.ImageState.LOADED) { - this.getMap().render(); + this.renderIfReadyAndVisible(); } }; @@ -142,7 +134,7 @@ ol.renderer.Layer.prototype.handleImageChange = function(event) { * @protected */ ol.renderer.Layer.prototype.handleLayerLoad = function() { - this.dispatchChangeEvent(); + this.renderIfReadyAndVisible(); }; @@ -150,7 +142,7 @@ ol.renderer.Layer.prototype.handleLayerLoad = function() { * @protected */ ol.renderer.Layer.prototype.handleLayerOpacityChange = function() { - this.dispatchChangeEvent(); + this.renderIfReadyAndVisible(); }; @@ -164,7 +156,10 @@ ol.renderer.Layer.prototype.handleLayerSaturationChange = goog.nullFunction; * @protected */ ol.renderer.Layer.prototype.handleLayerVisibleChange = function() { - this.dispatchChangeEvent(); + var layer = this.getLayer(); + if (layer.isReady()) { + this.getMap().render(); + } }; @@ -176,7 +171,10 @@ ol.renderer.Layer.prototype.handleLayerVisibleChange = function() { ol.renderer.Layer.prototype.handleTileChange_ = function(event) { var tile = /** @type {ol.Tile} */ (event.target); if (tile.getState() === ol.TileState.LOADED) { - this.getMap().requestRenderFrame(); + var layer = this.getLayer(); + if (layer.getVisible() && layer.isReady()) { + this.getMap().requestRenderFrame(); + } } }; @@ -188,6 +186,17 @@ ol.renderer.Layer.prototype.handleTileChange_ = function(event) { ol.renderer.Layer.prototype.renderFrame = goog.abstractMethod; +/** + * @protected + */ +ol.renderer.Layer.prototype.renderIfReadyAndVisible = function() { + var layer = this.getLayer(); + if (layer.getVisible() && layer.isReady()) { + this.getMap().render(); + } +}; + + /** * @param {ol.FrameState} frameState Frame state. * @param {ol.source.TileSource} tileSource Tile source. diff --git a/src/ol/renderer/maprenderer.js b/src/ol/renderer/maprenderer.js index adc4de270f..a399d4e5b8 100644 --- a/src/ol/renderer/maprenderer.js +++ b/src/ol/renderer/maprenderer.js @@ -3,8 +3,6 @@ goog.provide('ol.renderer.Map'); goog.require('goog.Disposable'); goog.require('goog.asserts'); goog.require('goog.dispose'); -goog.require('goog.events'); -goog.require('goog.events.EventType'); goog.require('goog.functions'); goog.require('goog.object'); goog.require('goog.vec.Mat4'); @@ -42,12 +40,6 @@ ol.renderer.Map = function(container, map) { */ this.layerRenderers_ = {}; - /** - * @private - * @type {Object.} - */ - this.layerRendererChangeListenKeys_ = {}; - }; goog.inherits(ol.renderer.Map, goog.Disposable); @@ -101,8 +93,6 @@ ol.renderer.Map.prototype.disposeInternal = function() { goog.object.forEach(this.layerRenderers_, function(layerRenderer) { goog.dispose(layerRenderer); }); - goog.object.forEach( - this.layerRendererChangeListenKeys_, goog.events.unlistenByKey); goog.base(this, 'disposeInternal'); }; @@ -125,9 +115,6 @@ ol.renderer.Map.prototype.getLayerRenderer = function(layer) { } else { var layerRenderer = this.createLayerRenderer(layer); this.layerRenderers_[layerKey] = layerRenderer; - this.layerRendererChangeListenKeys_[layerKey] = goog.events.listen( - layerRenderer, goog.events.EventType.CHANGE, - this.handleLayerRendererChange_, false, this); return layerRenderer; } }; @@ -150,15 +137,6 @@ ol.renderer.Map.prototype.getMap = function() { }; -/** - * @param {goog.events.Event} event Event. - * @private - */ -ol.renderer.Map.prototype.handleLayerRendererChange_ = function(event) { - this.getMap().render(); -}; - - /** * @param {string} layerKey Layer key. * @return {ol.renderer.Layer} Layer renderer. @@ -168,9 +146,6 @@ ol.renderer.Map.prototype.removeLayerRendererByKey_ = function(layerKey) { goog.asserts.assert(layerKey in this.layerRenderers_); var layerRenderer = this.layerRenderers_[layerKey]; delete this.layerRenderers_[layerKey]; - goog.asserts.assert(layerKey in this.layerRendererChangeListenKeys_); - goog.events.unlistenByKey(this.layerRendererChangeListenKeys_[layerKey]); - delete this.layerRendererChangeListenKeys_[layerKey]; return layerRenderer; }; diff --git a/src/ol/renderer/webgl/webgllayerrenderer.js b/src/ol/renderer/webgl/webgllayerrenderer.js index 4787976241..ef66c43762 100644 --- a/src/ol/renderer/webgl/webgllayerrenderer.js +++ b/src/ol/renderer/webgl/webgllayerrenderer.js @@ -193,7 +193,7 @@ ol.renderer.webgl.Layer.prototype.getProjectionMatrix = function() { */ ol.renderer.webgl.Layer.prototype.handleLayerBrightnessChange = function() { this.updateBrightnessMatrix_(); - this.dispatchChangeEvent(); + this.renderIfReadyAndVisible(); }; @@ -202,7 +202,7 @@ ol.renderer.webgl.Layer.prototype.handleLayerBrightnessChange = function() { */ ol.renderer.webgl.Layer.prototype.handleLayerContrastChange = function() { this.updateContrastMatrix_(); - this.dispatchChangeEvent(); + this.renderIfReadyAndVisible(); }; @@ -211,7 +211,7 @@ ol.renderer.webgl.Layer.prototype.handleLayerContrastChange = function() { */ ol.renderer.webgl.Layer.prototype.handleLayerHueChange = function() { this.updateHueMatrix_(); - this.dispatchChangeEvent(); + this.renderIfReadyAndVisible(); }; @@ -220,7 +220,7 @@ ol.renderer.webgl.Layer.prototype.handleLayerHueChange = function() { */ ol.renderer.webgl.Layer.prototype.handleLayerSaturationChange = function() { this.updateSaturationMatrix_(); - this.dispatchChangeEvent(); + this.renderIfReadyAndVisible(); };