From db370a02b13f39ce79b8df11e784b3543f2908cb Mon Sep 17 00:00:00 2001 From: John Firebaugh Date: Wed, 10 May 2017 17:51:55 -0700 Subject: [core] When a layer is added, reload its source's tiles --- src/mbgl/style/style.cpp | 31 ++++++++++++++++--------------- 1 file changed, 16 insertions(+), 15 deletions(-) (limited to 'src') diff --git a/src/mbgl/style/style.cpp b/src/mbgl/style/style.cpp index 4b694917c3..f083ca47b8 100644 --- a/src/mbgl/style/style.cpp +++ b/src/mbgl/style/style.cpp @@ -52,6 +52,21 @@ namespace style { static Observer nullObserver; +struct QueueSourceReloadVisitor { + UpdateBatch& updateBatch; + + // No need to reload sources for these types; their visibility can change but + // they don't participate in layout. + void operator()(CustomLayer&) {} + void operator()(RasterLayer&) {} + void operator()(BackgroundLayer&) {} + + template + void operator()(VectorLayer& layer) { + updateBatch.sourceIDs.insert(layer.getSourceID()); + } +}; + Style::Style(Scheduler& scheduler_, FileSource& fileSource_, float pixelRatio) : scheduler(scheduler_), fileSource(fileSource_), @@ -248,6 +263,7 @@ Layer* Style::addLayer(std::unique_ptr layer, optional befor } layer->baseImpl->setObserver(this); + layer->accept(QueueSourceReloadVisitor { updateBatch }); auto added = layers.emplace(before ? findLayer(*before) : layers.end(), std::move(layer))->get(); renderLayers.emplace(before ? findRenderLayer(*before) : renderLayers.end(), added->baseImpl->createRenderLayer()); @@ -726,21 +742,6 @@ void Style::onSpriteError(std::exception_ptr error) { observer->onResourceError(error); } -struct QueueSourceReloadVisitor { - UpdateBatch& updateBatch; - - // No need to reload sources for these types; their visibility can change but - // they don't participate in layout. - void operator()(CustomLayer&) {} - void operator()(RasterLayer&) {} - void operator()(BackgroundLayer&) {} - - template - void operator()(VectorLayer& layer) { - updateBatch.sourceIDs.insert(layer.getSourceID()); - } -}; - void Style::onLayerFilterChanged(Layer& layer) { layer.accept(QueueSourceReloadVisitor { updateBatch }); observer->onUpdate(Update::Repaint); -- cgit v1.2.1