diff options
-rw-r--r-- | include/mbgl/map/map.hpp | 9 | ||||
-rw-r--r-- | src/mbgl/map/map.cpp | 18 | ||||
-rw-r--r-- | src/mbgl/map/map_data.hpp | 9 |
3 files changed, 25 insertions, 11 deletions
diff --git a/include/mbgl/map/map.hpp b/include/mbgl/map/map.hpp index 7473a0694a..e77149a4d7 100644 --- a/include/mbgl/map/map.hpp +++ b/include/mbgl/map/map.hpp @@ -78,9 +78,10 @@ public: // Notifies the Map thread that the state has changed and an update might be necessary. using UpdateType = uint32_t; enum class Update : UpdateType { - Nothing = 0, - StyleInfo = 1 << 0, - Debug = 1 << 1, + Nothing = 0, + StyleInfo = 1 << 0, + Debug = 1 << 1, + DefaultTransitionDuration = 1 << 2, }; void triggerUpdate(Update = Update::Nothing); @@ -253,8 +254,6 @@ private: std::vector<std::string> classes; std::string accessToken; - std::chrono::steady_clock::duration defaultTransitionDuration; - std::set<util::ptr<StyleSource>> activeSources; std::atomic<UpdateType> updated; diff --git a/src/mbgl/map/map.cpp b/src/mbgl/map/map.cpp index 8d4dd1461d..4ebd4100b9 100644 --- a/src/mbgl/map/map.cpp +++ b/src/mbgl/map/map.cpp @@ -649,14 +649,15 @@ std::vector<std::string> Map::getClasses() const { } void Map::setDefaultTransitionDuration(std::chrono::steady_clock::duration duration) { - defaultTransitionDuration = duration; - if (style) { - style->setDefaultTransitionDuration(duration); - } + assert(Environment::currentlyOn(ThreadType::Main)); + + data->setDefaultTransitionDuration(duration); + triggerUpdate(Update::DefaultTransitionDuration); } std::chrono::steady_clock::duration Map::getDefaultTransitionDuration() { - return defaultTransitionDuration; + assert(Environment::currentlyOn(ThreadType::Main)); + return data->getDefaultTransitionDuration(); } void Map::updateSources() { @@ -753,7 +754,7 @@ void Map::loadStyleJSON(const std::string& json, const std::string& base) { style->base = base; style->loadJSON((const uint8_t *)json.c_str()); style->cascadeClasses(classes); - style->setDefaultTransitionDuration(defaultTransitionDuration); + style->setDefaultTransitionDuration(data->getDefaultTransitionDuration()); const std::string glyphURL = util::mapbox::normalizeGlyphsURL(style->glyph_url, getAccessToken()); glyphStore->setURL(glyphURL); @@ -772,6 +773,11 @@ void Map::prepare() { assert(painter); painter->setDebug(data->getDebug()); } + if (u & static_cast<UpdateType>(Update::DefaultTransitionDuration)) { + if (style) { + style->setDefaultTransitionDuration(data->getDefaultTransitionDuration()); + } + } // Update transform transitions. diff --git a/src/mbgl/map/map_data.hpp b/src/mbgl/map/map_data.hpp index 8efa43911b..972ad34064 100644 --- a/src/mbgl/map/map_data.hpp +++ b/src/mbgl/map/map_data.hpp @@ -20,6 +20,7 @@ class MapData { public: inline MapData() { setAnimationTime(std::chrono::steady_clock::time_point::min()); + setDefaultTransitionDuration(std::chrono::steady_clock::duration::zero()); } inline StyleInfo getStyleInfo() const { @@ -50,12 +51,20 @@ public: animationTime = timePoint.time_since_epoch(); }; + inline std::chrono::steady_clock::duration getDefaultTransitionDuration() const { + return defaultTransitionDuration; + } + inline void setDefaultTransitionDuration(std::chrono::steady_clock::duration duration) { + defaultTransitionDuration = duration; + }; + private: mutable std::mutex mtx; StyleInfo styleInfo; std::atomic<uint8_t> debug { false }; std::atomic<std::chrono::steady_clock::time_point::duration> animationTime; + std::atomic<std::chrono::steady_clock::duration> defaultTransitionDuration; }; } |