diff options
author | Konstantin Käfer <mail@kkaefer.com> | 2015-04-29 17:49:25 +0200 |
---|---|---|
committer | Konstantin Käfer <mail@kkaefer.com> | 2015-05-05 11:47:23 +0200 |
commit | 691c305467c5d503719743e69f73bf28f20894d5 (patch) | |
tree | 8bd519a94982db4fe3a54a7fa224b7b5327fc2c2 /src | |
parent | 248e48eaccb942789a43b6372491a2fc9fd162eb (diff) | |
download | qtlocation-mapboxgl-691c305467c5d503719743e69f73bf28f20894d5.tar.gz |
add Map::isFullyLoaded()
returns whether the Map is still loading/parsing any assets or whether everything is there and a render will likely be complete
Diffstat (limited to 'src')
-rw-r--r-- | src/mbgl/map/map.cpp | 4 | ||||
-rw-r--r-- | src/mbgl/map/map_context.cpp | 10 | ||||
-rw-r--r-- | src/mbgl/map/map_data.hpp | 8 | ||||
-rw-r--r-- | src/mbgl/style/style.cpp | 7 | ||||
-rw-r--r-- | src/mbgl/style/style.hpp | 1 |
5 files changed, 27 insertions, 3 deletions
diff --git a/src/mbgl/map/map.cpp b/src/mbgl/map/map.cpp index 3c1dcdd148..91b43f7b7b 100644 --- a/src/mbgl/map/map.cpp +++ b/src/mbgl/map/map.cpp @@ -286,6 +286,10 @@ bool Map::getDebug() const { return data->getDebug(); } +bool Map::isFullyLoaded() const { + return data->getFullyLoaded(); +} + void Map::addClass(const std::string& klass) { if (data->addClass(klass)) { update(Update::Classes); diff --git a/src/mbgl/map/map_context.cpp b/src/mbgl/map/map_context.cpp index f655c9b0b2..160977978f 100644 --- a/src/mbgl/map/map_context.cpp +++ b/src/mbgl/map/map_context.cpp @@ -220,6 +220,16 @@ void MapContext::update() { updateTiles(); + if (sprite->isLoaded() && style->isLoaded()) { + if (!data.getFullyLoaded()) { + data.setFullyLoaded(true); + } + } else { + if (data.getFullyLoaded()) { + data.setFullyLoaded(false); + } + } + view.invalidate([this] { render(); }); } diff --git a/src/mbgl/map/map_data.hpp b/src/mbgl/map/map_data.hpp index 86a22e123b..54114b9d0c 100644 --- a/src/mbgl/map/map_data.hpp +++ b/src/mbgl/map/map_data.hpp @@ -64,6 +64,13 @@ public: debug = value; } + inline bool getFullyLoaded() const { + return loaded; + } + inline void setFullyLoaded(bool value) { + loaded = value; + } + inline TimePoint getAnimationTime() const { // We're casting the TimePoint to and from a Duration because libstdc++ // has a bug that doesn't allow TimePoints to be atomic. @@ -91,6 +98,7 @@ private: std::string accessToken; std::vector<std::string> classes; std::atomic<uint8_t> debug { false }; + std::atomic<bool> loaded { false }; std::atomic<Duration> animationTime; std::atomic<Duration> defaultTransitionDuration; diff --git a/src/mbgl/style/style.cpp b/src/mbgl/style/style.cpp index d592e61317..51d92fdcaf 100644 --- a/src/mbgl/style/style.cpp +++ b/src/mbgl/style/style.cpp @@ -85,13 +85,14 @@ void Style::loadJSON(const uint8_t *const data) { layers = parser.getLayers(); sprite_url = parser.getSprite(); glyph_url = parser.getGlyphURL(); + loaded = true; } bool Style::isLoaded() const { // TODO: move loading into Style -// if (!loaded) { -// return false; -// } + if (!loaded) { + return false; + } for (const auto& source : sources) { if (!source->isLoaded()) { diff --git a/src/mbgl/style/style.hpp b/src/mbgl/style/style.hpp index 42e94984dd..42d7b0b9a0 100644 --- a/src/mbgl/style/style.hpp +++ b/src/mbgl/style/style.hpp @@ -41,6 +41,7 @@ public: std::string base; private: + bool loaded = false; std::string sprite_url; PropertyTransition defaultTransition; std::unique_ptr<uv::rwlock> mtx; |