summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/mbgl/map/map.hpp9
-rw-r--r--src/mbgl/map/map.cpp18
-rw-r--r--src/mbgl/map/map_data.hpp9
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;
};
}