From beb67fb7b2119fbda8cf2906bdcc67aa7d7fad65 Mon Sep 17 00:00:00 2001 From: Bruno de Oliveira Abinader Date: Mon, 12 Sep 2016 08:03:08 +0100 Subject: [PATCH] [core] Separate transition options accessors from class API Now the style class transition options have its own getter/setter, which persists for each style until a new style is set. --- include/mbgl/map/map.hpp | 9 ++++++--- src/mbgl/map/map.cpp | 25 +++++++++++++++++++------ src/mbgl/style/style.cpp | 22 +++++++++++++--------- src/mbgl/style/style.hpp | 12 ++++++++---- 4 files changed, 46 insertions(+), 22 deletions(-) diff --git a/include/mbgl/map/map.hpp b/include/mbgl/map/map.hpp index 866d292b9..6c478c17f 100644 --- a/include/mbgl/map/map.hpp +++ b/include/mbgl/map/map.hpp @@ -51,9 +51,12 @@ public: void update(Update update); // Styling - void addClass(const std::string&, const style::TransitionOptions& = {}); - void removeClass(const std::string&, const style::TransitionOptions& = {}); - void setClasses(const std::vector&, const style::TransitionOptions& = {}); + void addClass(const std::string&); + void removeClass(const std::string&); + void setClasses(const std::vector&); + + style::TransitionOptions getTransitionOptions() const; + void setTransitionOptions(const style::TransitionOptions&); bool hasClass(const std::string&) const; std::vector getClasses() const; diff --git a/src/mbgl/map/map.cpp b/src/mbgl/map/map.cpp index e7bb2bd7f..56be99d8f 100644 --- a/src/mbgl/map/map.cpp +++ b/src/mbgl/map/map.cpp @@ -896,25 +896,38 @@ bool Map::isFullyLoaded() const { return impl->style ? impl->style->isLoaded() : false; } -void Map::addClass(const std::string& className, const TransitionOptions& properties) { - if (impl->style && impl->style->addClass(className, properties)) { +void Map::addClass(const std::string& className) { + if (impl->style && impl->style->addClass(className)) { update(Update::Classes); } } -void Map::removeClass(const std::string& className, const TransitionOptions& properties) { - if (impl->style && impl->style->removeClass(className, properties)) { +void Map::removeClass(const std::string& className) { + if (impl->style && impl->style->removeClass(className)) { update(Update::Classes); } } -void Map::setClasses(const std::vector& classNames, const TransitionOptions& properties) { +void Map::setClasses(const std::vector& classNames) { if (impl->style) { - impl->style->setClasses(classNames, properties); + impl->style->setClasses(classNames); update(Update::Classes); } } +style::TransitionOptions Map::getTransitionOptions() const { + if (impl->style) { + return impl->style->getTransitionOptions(); + } + return {}; +} + +void Map::setTransitionOptions(const style::TransitionOptions& options) { + if (impl->style) { + impl->style->setTransitionOptions(options); + } +} + bool Map::hasClass(const std::string& className) const { return impl->style ? impl->style->hasClass(className) : false; } diff --git a/src/mbgl/style/style.cpp b/src/mbgl/style/style.cpp index fba12b612..34790683b 100644 --- a/src/mbgl/style/style.cpp +++ b/src/mbgl/style/style.cpp @@ -58,10 +58,9 @@ Style::~Style() { spriteStore->setObserver(nullptr); } -bool Style::addClass(const std::string& className, const TransitionOptions& properties) { +bool Style::addClass(const std::string& className) { if (hasClass(className)) return false; classes.push_back(className); - transitionProperties = properties; return true; } @@ -69,29 +68,36 @@ bool Style::hasClass(const std::string& className) const { return std::find(classes.begin(), classes.end(), className) != classes.end(); } -bool Style::removeClass(const std::string& className, const TransitionOptions& properties) { +bool Style::removeClass(const std::string& className) { const auto it = std::find(classes.begin(), classes.end(), className); if (it != classes.end()) { classes.erase(it); - transitionProperties = properties; return true; } return false; } -void Style::setClasses(const std::vector& classNames, const TransitionOptions& properties) { +void Style::setClasses(const std::vector& classNames) { classes = classNames; - transitionProperties = properties; } std::vector Style::getClasses() const { return classes; } +void Style::setTransitionOptions(const TransitionOptions& options) { + transitionOptions = options; +} + +TransitionOptions Style::getTransitionOptions() const { + return transitionOptions; +} + void Style::setJSON(const std::string& json) { sources.clear(); layers.clear(); classes.clear(); + transitionOptions = {}; updateBatch = {}; Parser parser; @@ -249,11 +255,9 @@ void Style::cascade(const TimePoint& timePoint, MapMode mode) { const CascadeParameters parameters { classIDs, mode == MapMode::Continuous ? timePoint : Clock::time_point::max(), - mode == MapMode::Continuous ? transitionProperties.value_or(immediateTransition) : immediateTransition + mode == MapMode::Continuous ? transitionOptions : immediateTransition }; - transitionProperties = {}; - for (const auto& layer : layers) { layer->baseImpl->cascade(parameters); } diff --git a/src/mbgl/style/style.hpp b/src/mbgl/style/style.hpp index 61f2563c8..8027313ab 100644 --- a/src/mbgl/style/style.hpp +++ b/src/mbgl/style/style.hpp @@ -79,10 +79,14 @@ public: double getDefaultBearing() const; double getDefaultPitch() const; - bool addClass(const std::string&, const TransitionOptions& = {}); - bool removeClass(const std::string&, const TransitionOptions& = {}); + bool addClass(const std::string&); + bool removeClass(const std::string&); + void setClasses(const std::vector&); + + TransitionOptions getTransitionOptions() const; + void setTransitionOptions(const TransitionOptions&); + bool hasClass(const std::string&) const; - void setClasses(const std::vector&, const TransitionOptions& = {}); std::vector getClasses() const; RenderData getRenderData(MapDebugOptions) const; @@ -107,7 +111,7 @@ private: std::vector> sources; std::vector> layers; std::vector classes; - optional transitionProperties; + TransitionOptions transitionOptions; // Defaults std::string name;