diff --git a/include/mbgl/map/map.hpp b/include/mbgl/map/map.hpp index d18df67a0..e5eabdac4 100644 --- a/include/mbgl/map/map.hpp +++ b/include/mbgl/map/map.hpp @@ -82,6 +82,7 @@ public: StyleInfo = 1 << 0, Debug = 1 << 1, DefaultTransitionDuration = 1 << 2, + Classes = 1 << 3, }; void triggerUpdate(Update = Update::Nothing); @@ -251,8 +252,6 @@ private: const std::unique_ptr data; - std::vector classes; - std::set> activeSources; std::atomic updated; diff --git a/src/mbgl/map/map.cpp b/src/mbgl/map/map.cpp index c57ed3dfb..1473346a3 100644 --- a/src/mbgl/map/map.cpp +++ b/src/mbgl/map/map.cpp @@ -609,43 +609,28 @@ std::chrono::steady_clock::time_point Map::getTime() const { } void Map::addClass(const std::string& klass) { - if (hasClass(klass)) return; - classes.push_back(klass); - if (style) { - style->cascadeClasses(classes); - if (style->hasTransitions()) { - triggerUpdate(); - } + if (data->addClass(klass)) { + triggerUpdate(Update::Classes); } } void Map::removeClass(const std::string& klass) { - if (!hasClass(klass)) return; - classes.erase(std::remove(classes.begin(), classes.end(), klass), classes.end()); - if (style) { - style->cascadeClasses(classes); - if (style->hasTransitions()) { - triggerUpdate(); - } + if (data->removeClass(klass)) { + triggerUpdate(Update::Classes); } } -void Map::setClasses(const std::vector& classes_) { - classes = classes_; - if (style) { - style->cascadeClasses(classes); - if (style->hasTransitions()) { - triggerUpdate(); - } - } +void Map::setClasses(const std::vector& classes) { + data->setClasses(classes); + triggerUpdate(Update::Classes); } bool Map::hasClass(const std::string& klass) const { - return std::find(classes.begin(), classes.end(), klass) != classes.end(); + return data->hasClass(klass); } std::vector Map::getClasses() const { - return classes; + return data->getClasses(); } void Map::setDefaultTransitionDuration(std::chrono::steady_clock::duration duration) { @@ -753,7 +738,7 @@ void Map::loadStyleJSON(const std::string& json, const std::string& base) { style = std::make_shared