From 7129a08e0b8ca34e57e355c864a4cfa990e04ada Mon Sep 17 00:00:00 2001 From: Tim Schaub Date: Fri, 26 Sep 2014 16:06:59 -0600 Subject: [PATCH 1/2] Clear the canvas on layer extent changes --- .../canvas/canvastilelayerrenderer.js | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/ol/renderer/canvas/canvastilelayerrenderer.js b/src/ol/renderer/canvas/canvastilelayerrenderer.js index daa875c1fc..079720e60e 100644 --- a/src/ol/renderer/canvas/canvastilelayerrenderer.js +++ b/src/ol/renderer/canvas/canvastilelayerrenderer.js @@ -5,13 +5,16 @@ goog.provide('ol.renderer.canvas.TileLayer'); goog.require('goog.array'); goog.require('goog.asserts'); +goog.require('goog.events'); goog.require('goog.object'); goog.require('goog.vec.Mat4'); +goog.require('ol.Object'); goog.require('ol.Size'); goog.require('ol.TileRange'); goog.require('ol.TileState'); goog.require('ol.dom'); goog.require('ol.extent'); +goog.require('ol.layer.LayerProperty'); goog.require('ol.layer.Tile'); goog.require('ol.renderer.Map'); goog.require('ol.renderer.canvas.Layer'); @@ -78,6 +81,9 @@ ol.renderer.canvas.TileLayer = function(mapRenderer, tileLayer) { */ this.renderedTiles_ = null; + goog.events.listen( + tileLayer, ol.Object.getChangeEventType(ol.layer.LayerProperty.EXTENT), + this.handleLayerExtentChanged_, false, this); }; goog.inherits(ol.renderer.canvas.TileLayer, ol.renderer.canvas.Layer); @@ -98,6 +104,19 @@ ol.renderer.canvas.TileLayer.prototype.getImageTransform = function() { }; +/** + * Handle layer extent changes. We clear the canvas any time the layer extent + * changes. + * @private + */ +ol.renderer.canvas.TileLayer.prototype.handleLayerExtentChanged_ = function() { + if (!goog.isNull(this.context_)) { + this.context_.clearRect(0, 0, this.canvasSize_[0], this.canvasSize_[1]); + this.renderedCanvasZ_ = NaN; + } +}; + + /** * @inheritDoc */ From e1ee3474bfe2e7a7d2c809ac3da873849bc081b9 Mon Sep 17 00:00:00 2001 From: Tim Schaub Date: Sat, 11 Oct 2014 18:49:12 -0600 Subject: [PATCH 2/2] Unregister listener --- .../canvas/canvastilelayerrenderer.js | 25 ++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/src/ol/renderer/canvas/canvastilelayerrenderer.js b/src/ol/renderer/canvas/canvastilelayerrenderer.js index 079720e60e..8ccc72d1ac 100644 --- a/src/ol/renderer/canvas/canvastilelayerrenderer.js +++ b/src/ol/renderer/canvas/canvastilelayerrenderer.js @@ -81,13 +81,32 @@ ol.renderer.canvas.TileLayer = function(mapRenderer, tileLayer) { */ this.renderedTiles_ = null; - goog.events.listen( - tileLayer, ol.Object.getChangeEventType(ol.layer.LayerProperty.EXTENT), - this.handleLayerExtentChanged_, false, this); + /** + * @private + * @type {Array.} + */ + this.eventKeys_ = [ + goog.events.listen( + tileLayer, ol.Object.getChangeEventType(ol.layer.LayerProperty.EXTENT), + this.handleLayerExtentChanged_, false, this) + ]; + }; goog.inherits(ol.renderer.canvas.TileLayer, ol.renderer.canvas.Layer); +/** + * @inheritDoc + */ +ol.renderer.canvas.TileLayer.prototype.disposeInternal = function() { + for (var i = 0, ii = this.eventKeys_.length; i < ii; ++i) { + goog.events.unlistenByKey(this.eventKeys_[i]); + } + this.eventKeys_.length = 0; + goog.base(this, 'disposeInternal'); +}; + + /** * @inheritDoc */