summaryrefslogtreecommitdiff
path: root/src/mbgl
diff options
context:
space:
mode:
Diffstat (limited to 'src/mbgl')
-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) {