From 00fa7ff3a96431d7df2e67ee5a8f651202237a61 Mon Sep 17 00:00:00 2001 From: Tim Schaub Date: Wed, 6 Mar 2013 19:05:35 -0700 Subject: [PATCH] Listen for layer changes and expire tiles We need a more flexible event system. We could have a VectorLayerEvent type and dispatch 'featuresadded' here. But listeners want features typically and perhaps extent. This won't be true for all vector layer events (suggesting a more specific VectorFeatureEvent type or something). --- .../canvas/canvasvectorlayerrenderer.js | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/src/ol/renderer/canvas/canvasvectorlayerrenderer.js b/src/ol/renderer/canvas/canvasvectorlayerrenderer.js index dc22f5d27f..242c79bdfc 100644 --- a/src/ol/renderer/canvas/canvasvectorlayerrenderer.js +++ b/src/ol/renderer/canvas/canvasvectorlayerrenderer.js @@ -69,6 +69,9 @@ ol.renderer.canvas.VectorLayer = function(mapRenderer, layer) { */ this.tileCache_ = new ol.TileCache( ol.renderer.canvas.VectorLayer.TILECACHE_SIZE); + // TODO: this is far too coarse, we want extent of added features + goog.events.listenOnce(layer, goog.events.EventType.CHANGE, + this.handleLayerChange_, false, this); /** * @private @@ -139,6 +142,20 @@ ol.renderer.canvas.VectorLayer = function(mapRenderer, layer) { goog.inherits(ol.renderer.canvas.VectorLayer, ol.renderer.canvas.Layer); +/** + * Get rid cached tiles. If the optional extent is provided, only tiles that + * intersect that extent will be removed. + * @param {ol.Extent=} opt_extent extent Expire tiles within this extent only. + * @private + */ +ol.renderer.canvas.VectorLayer.prototype.expireTiles_ = function(opt_extent) { + if (goog.isDef(opt_extent)) { + // TODO: implement this + } + this.tileCache_.clear(); +}; + + /** * @inheritDoc */ @@ -163,6 +180,17 @@ ol.renderer.canvas.VectorLayer.prototype.getTransform = function() { }; +/** + * @param {goog.events.Event} event Layer change event. + * @private + */ +ol.renderer.canvas.VectorLayer.prototype.handleLayerChange_ = function(event) { + // TODO: get rid of this in favor of vector specific events + this.expireTiles_(); + this.requestMapRenderFrame_(); +}; + + /** * @inheritDoc */