summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorKonstantin Käfer <mail@kkaefer.com>2015-04-29 17:49:25 +0200
committerKonstantin Käfer <mail@kkaefer.com>2015-05-05 11:47:23 +0200
commit691c305467c5d503719743e69f73bf28f20894d5 (patch)
tree8bd519a94982db4fe3a54a7fa224b7b5327fc2c2 /src
parent248e48eaccb942789a43b6372491a2fc9fd162eb (diff)
downloadqtlocation-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.cpp4
-rw-r--r--src/mbgl/map/map_context.cpp10
-rw-r--r--src/mbgl/map/map_data.hpp8
-rw-r--r--src/mbgl/style/style.cpp7
-rw-r--r--src/mbgl/style/style.hpp1
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;