summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJohn Firebaugh <john.firebaugh@gmail.com>2015-06-26 15:10:15 -0700
committerJohn Firebaugh <john.firebaugh@gmail.com>2015-06-30 10:13:24 -0700
commit6532438fe47bca1af690779ffa7292d6f1080d0c (patch)
treeb62816c6541f1c1e42c85901c2600080b64f98a5 /src
parent8c4a03acb4298bd0f3344c6e9667ef1ee2726b6d (diff)
downloadqtlocation-mapboxgl-6532438fe47bca1af690779ffa7292d6f1080d0c.tar.gz
Rationalize *RenderingMap notifications
Diffstat (limited to 'src')
-rw-r--r--src/mbgl/map/map.cpp22
1 files changed, 20 insertions, 2 deletions
diff --git a/src/mbgl/map/map.cpp b/src/mbgl/map/map.cpp
index c0f7e953a8..91017d89c8 100644
--- a/src/mbgl/map/map.cpp
+++ b/src/mbgl/map/map.cpp
@@ -12,8 +12,9 @@
namespace mbgl {
-Map::Map(View& view, FileSource& fileSource, MapMode mode)
- : transform(std::make_unique<Transform>(view)),
+Map::Map(View& view_, FileSource& fileSource, MapMode mode)
+ : view(view_),
+ transform(std::make_unique<Transform>(view)),
data(std::make_unique<MapData>(mode)),
context(std::make_unique<util::Thread<MapContext>>(util::ThreadContext{"Map", util::ThreadType::Map, util::ThreadPriority::Regular}, view, fileSource, *data))
{
@@ -46,9 +47,26 @@ void Map::renderStill(StillImageCallback callback) {
}
void Map::renderSync() {
+ if (renderState == RenderState::never) {
+ view.notifyMapChange(MapChangeWillStartRenderingMap);
+ }
+
+ view.notifyMapChange(MapChangeWillStartRenderingFrame);
+
MapContext::RenderResult result =
context->invokeSync<MapContext::RenderResult>(&MapContext::renderSync, transform->getState());
+ view.notifyMapChange(result.fullyLoaded ?
+ MapChangeDidFinishRenderingFrameFullyRendered :
+ MapChangeDidFinishRenderingFrame);
+
+ if (!result.fullyLoaded) {
+ renderState = RenderState::partial;
+ } else if (renderState != RenderState::fully) {
+ renderState = RenderState::fully;
+ view.notifyMapChange(MapChangeDidFinishRenderingMapFullyRendered);
+ }
+
if (transform->needsTransition()) {
update(Update(transform->updateTransitions(Clock::now())));
} else if (result.needsRerender) {