diff options
author | John Firebaugh <john.firebaugh@gmail.com> | 2015-06-26 15:10:15 -0700 |
---|---|---|
committer | John Firebaugh <john.firebaugh@gmail.com> | 2015-06-30 10:13:24 -0700 |
commit | 6532438fe47bca1af690779ffa7292d6f1080d0c (patch) | |
tree | b62816c6541f1c1e42c85901c2600080b64f98a5 /src | |
parent | 8c4a03acb4298bd0f3344c6e9667ef1ee2726b6d (diff) | |
download | qtlocation-mapboxgl-6532438fe47bca1af690779ffa7292d6f1080d0c.tar.gz |
Rationalize *RenderingMap notifications
Diffstat (limited to 'src')
-rw-r--r-- | src/mbgl/map/map.cpp | 22 |
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) { |