From 8ec875b87c387713d7e4df5c90e6cac7669ed38b Mon Sep 17 00:00:00 2001 From: Bruno de Oliveira Abinader Date: Thu, 21 Apr 2016 14:40:01 +0300 Subject: [PATCH] [core] Do not clear custom layers upon style switch --- src/mbgl/style/style.cpp | 4 +++- test/api/custom_layer.cpp | 4 ++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/mbgl/style/style.cpp b/src/mbgl/style/style.cpp index 010f0aeaf..b239ac20d 100644 --- a/src/mbgl/style/style.cpp +++ b/src/mbgl/style/style.cpp @@ -70,7 +70,9 @@ Style::Style(FileSource& fileSource_, float pixelRatio) void Style::setJSON(const std::string& json, const std::string&) { sources.clear(); - layers.clear(); + layers.erase(std::remove_if(layers.begin(), layers.end(), [](const auto& layer) { + return !layer->template is(); + }), layers.end()); classes.clear(); StyleParser parser; diff --git a/test/api/custom_layer.cpp b/test/api/custom_layer.cpp index 4ad25bbfd..beffa749d 100644 --- a/test/api/custom_layer.cpp +++ b/test/api/custom_layer.cpp @@ -90,4 +90,8 @@ TEST(CustomLayer, Basic) { }, new TestLayer()); test::checkImage("test/fixtures/custom_layer/basic", test::render(map)); + + // Custom layer should be preserved when switching styles + map.setStyleJSON(util::read_file("test/fixtures/api/empty.json"), ""); + test::checkImage("test/fixtures/custom_layer/basic", test::render(map)); }