fix(core): notify layer observer when source-layer or source-id changes (#4372)
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -54,6 +54,7 @@ void Layer::setSourceLayer(const std::string& sourceLayer) {
|
||||
auto impl_ = mutableBaseImpl();
|
||||
impl_->sourceLayer = sourceLayer;
|
||||
baseImpl = std::move(impl_);
|
||||
observer->onLayerChanged(*this);
|
||||
}
|
||||
|
||||
void Layer::setSourceID(const std::string& sourceID) {
|
||||
@@ -61,6 +62,7 @@ void Layer::setSourceID(const std::string& sourceID) {
|
||||
auto impl_ = mutableBaseImpl();
|
||||
impl_->source = sourceID;
|
||||
baseImpl = std::move(impl_);
|
||||
observer->onLayerChanged(*this);
|
||||
};
|
||||
|
||||
const Filter& Layer::getFilter() const {
|
||||
|
||||
@@ -285,6 +285,44 @@ TEST(Layer, Observer) {
|
||||
};
|
||||
layer->setLineCap(lineCap);
|
||||
EXPECT_FALSE(layoutPropertyChanged);
|
||||
|
||||
// Notifies observer on source-layer change.
|
||||
// This is required so that the render orchestrator re-evaluates already-loaded
|
||||
// tiles when a layer's source-layer is changed at runtime (e.g. after addLayer).
|
||||
bool sourceLayerChanged = false;
|
||||
observer.layerChanged = [&](Layer& layer_) {
|
||||
EXPECT_EQ(layer.get(), &layer_);
|
||||
sourceLayerChanged = true;
|
||||
};
|
||||
layer->setSourceLayer("roads");
|
||||
EXPECT_TRUE(sourceLayerChanged);
|
||||
|
||||
// Does not notify observer on no-op source-layer change.
|
||||
sourceLayerChanged = false;
|
||||
observer.layerChanged = [&](Layer& layer_) {
|
||||
EXPECT_EQ(layer.get(), &layer_);
|
||||
sourceLayerChanged = true;
|
||||
};
|
||||
layer->setSourceLayer("roads");
|
||||
EXPECT_FALSE(sourceLayerChanged);
|
||||
|
||||
// Notifies observer on source ID change.
|
||||
bool sourceIDChanged = false;
|
||||
observer.layerChanged = [&](Layer& layer_) {
|
||||
EXPECT_EQ(layer.get(), &layer_);
|
||||
sourceIDChanged = true;
|
||||
};
|
||||
layer->setSourceID("other-source");
|
||||
EXPECT_TRUE(sourceIDChanged);
|
||||
|
||||
// Does not notify observer on no-op source ID change.
|
||||
sourceIDChanged = false;
|
||||
observer.layerChanged = [&](Layer& layer_) {
|
||||
EXPECT_EQ(layer.get(), &layer_);
|
||||
sourceIDChanged = true;
|
||||
};
|
||||
layer->setSourceID("other-source");
|
||||
EXPECT_FALSE(sourceIDChanged);
|
||||
}
|
||||
|
||||
TEST(Layer, DuplicateLayer) {
|
||||
|
||||
Reference in New Issue
Block a user