summaryrefslogtreecommitdiff
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
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
-rw-r--r--include/mbgl/ios/MGLMapView_Private.h3
-rw-r--r--include/mbgl/map/map.hpp1
-rw-r--r--platform/ios/MGLMapView.mm5
-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
8 files changed, 36 insertions, 3 deletions
diff --git a/include/mbgl/ios/MGLMapView_Private.h b/include/mbgl/ios/MGLMapView_Private.h
index 4b93e68920..18c07ef1bb 100644
--- a/include/mbgl/ios/MGLMapView_Private.h
+++ b/include/mbgl/ios/MGLMapView_Private.h
@@ -7,5 +7,8 @@
/** Triggers another render pass even when it is not necessary. */
- (void)invalidate;
+/** Returns whether the map view is currently loading or processing any assets required to render the map */
+- (BOOL)isFullyLoaded;
+
@end
diff --git a/include/mbgl/map/map.hpp b/include/mbgl/map/map.hpp
index 5dc463f24f..bdb384b24e 100644
--- a/include/mbgl/map/map.hpp
+++ b/include/mbgl/map/map.hpp
@@ -132,6 +132,7 @@ public:
void setDebug(bool value);
void toggleDebug();
bool getDebug() const;
+ bool isFullyLoaded() const;
private:
const std::unique_ptr<MapData> data;
diff --git a/platform/ios/MGLMapView.mm b/platform/ios/MGLMapView.mm
index 8bbcebe0b0..6c48755463 100644
--- a/platform/ios/MGLMapView.mm
+++ b/platform/ios/MGLMapView.mm
@@ -2419,6 +2419,11 @@ CLLocationCoordinate2D latLngToCoordinate(mbgl::LatLng latLng)
[self notifyMapChange:@(mbgl::MapChangeRegionIsChanging)];
}
+- (BOOL)isFullyLoaded
+{
+ return _mbglMap->isFullyLoaded();
+}
+
- (void)prepareForInterfaceBuilder
{
[super prepareForInterfaceBuilder];
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;