diff options
author | Bruno de Oliveira Abinader <bruno@mapbox.com> | 2015-08-30 22:25:11 +0300 |
---|---|---|
committer | Bruno de Oliveira Abinader <bruno@mapbox.com> | 2015-09-02 23:20:46 +0300 |
commit | 0b501e056697249ae080a686dd0047eb2060eaf9 (patch) | |
tree | 6102f6c15be268fb3a89fa89134dbd2fc60f275f /src | |
parent | e92032822327d31656ebec3bd43dfd8654da68fa (diff) | |
download | qtlocation-mapboxgl-0b501e056697249ae080a686dd0047eb2060eaf9.tar.gz |
Substitute nudgeTransitions with async view invalidation
Diffstat (limited to 'src')
-rw-r--r-- | src/mbgl/map/map.cpp | 11 | ||||
-rw-r--r-- | src/mbgl/map/map_context.cpp | 9 | ||||
-rw-r--r-- | src/mbgl/map/transform.cpp | 4 | ||||
-rw-r--r-- | src/mbgl/map/transform.hpp | 1 |
4 files changed, 18 insertions, 7 deletions
diff --git a/src/mbgl/map/map.cpp b/src/mbgl/map/map.cpp index 065c33ce5f..c09d927129 100644 --- a/src/mbgl/map/map.cpp +++ b/src/mbgl/map/map.cpp @@ -55,6 +55,7 @@ void Map::renderSync() { view.notifyMapChange(MapChangeWillStartRenderingFrame); + const Update flags = transform->updateTransitions(Clock::now()); const bool fullyLoaded = context->invokeSync<bool>( &MapContext::renderSync, transform->getState(), FrameData { view.getFramebufferSize() }); @@ -68,14 +69,12 @@ void Map::renderSync() { renderState = RenderState::fully; view.notifyMapChange(MapChangeDidFinishRenderingMapFullyRendered); } -} -void Map::nudgeTransitions() { - Update flags = transform->updateTransitions(Clock::now()); - if (data->getNeedsRepaint()) { - flags |= Update::Repaint; + // Triggers an asynchronous update, that eventually triggers a view + // invalidation, causing renderSync to be called again if in transition. + if (transform->inTransition()) { + update(flags); } - update(flags); } void Map::update(Update flags) { diff --git a/src/mbgl/map/map_context.cpp b/src/mbgl/map/map_context.cpp index bdbf1ff0b6..ce2fdcd79b 100644 --- a/src/mbgl/map/map_context.cpp +++ b/src/mbgl/map/map_context.cpp @@ -256,6 +256,8 @@ void MapContext::update() { if (!style) { updateFlags = Update::Nothing; + } else if (data.getNeedsRepaint()) { + updateFlags |= Update::Repaint; } if (updateFlags == Update::Nothing || (data.mode == MapMode::Still && !callback)) { @@ -347,7 +349,12 @@ bool MapContext::renderSync(const TransformState& state, const FrameData& frame) view.afterRender(); - data.setNeedsRepaint(style->hasTransitions() || painter->needsAnimation()); + if (style->hasTransitions() || painter->needsAnimation()) { + data.setNeedsRepaint(true); + asyncUpdate->send(); + } else { + data.setNeedsRepaint(false); + } return isLoaded(); } diff --git a/src/mbgl/map/transform.cpp b/src/mbgl/map/transform.cpp index 7ccc2ad4cc..60c55c3f0c 100644 --- a/src/mbgl/map/transform.cpp +++ b/src/mbgl/map/transform.cpp @@ -386,6 +386,10 @@ void Transform::startTransition(std::function<Update(double)> frame, transitionFinishFn = finish; } +bool Transform::inTransition() const { + return transitionFrameFn != nullptr; +} + Update Transform::updateTransitions(const TimePoint& now) { return transitionFrameFn ? transitionFrameFn(now) : Update::Nothing; } diff --git a/src/mbgl/map/transform.hpp b/src/mbgl/map/transform.hpp index 5d5a72d6d3..1671983449 100644 --- a/src/mbgl/map/transform.hpp +++ b/src/mbgl/map/transform.hpp @@ -46,6 +46,7 @@ public: double getPitch() const; // Transitions + bool inTransition() const; Update updateTransitions(const TimePoint& now); void cancelTransitions(); |