summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBruno de Oliveira Abinader <bruno@mapbox.com>2015-08-30 22:25:11 +0300
committerBruno de Oliveira Abinader <bruno@mapbox.com>2015-09-02 23:20:46 +0300
commit0b501e056697249ae080a686dd0047eb2060eaf9 (patch)
tree6102f6c15be268fb3a89fa89134dbd2fc60f275f /src
parente92032822327d31656ebec3bd43dfd8654da68fa (diff)
downloadqtlocation-mapboxgl-0b501e056697249ae080a686dd0047eb2060eaf9.tar.gz
Substitute nudgeTransitions with async view invalidation
Diffstat (limited to 'src')
-rw-r--r--src/mbgl/map/map.cpp11
-rw-r--r--src/mbgl/map/map_context.cpp9
-rw-r--r--src/mbgl/map/transform.cpp4
-rw-r--r--src/mbgl/map/transform.hpp1
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();