From a9327c07e71639107afdde00798a1b6cfd0e53cd Mon Sep 17 00:00:00 2001 From: "Thiago Marcos P. Santos" Date: Thu, 28 Apr 2016 15:04:03 +0300 Subject: [PATCH] [Qt] Make needsRendering signal asynchronous Fixes label animation not completing. --- platform/qt/src/qmapboxgl.cpp | 8 ++++++-- platform/qt/src/qmapboxgl_p.hpp | 2 ++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/platform/qt/src/qmapboxgl.cpp b/platform/qt/src/qmapboxgl.cpp index 8a3d6cb1b..01f0ad75a 100644 --- a/platform/qt/src/qmapboxgl.cpp +++ b/platform/qt/src/qmapboxgl.cpp @@ -561,6 +561,7 @@ void QMapboxGL::removeCustomLayer(const QString& id) void QMapboxGL::render() { + d_ptr->dirty = false; d_ptr->mapObj->render(); } @@ -584,7 +585,7 @@ QMapboxGLPrivate::QMapboxGLPrivate(QMapboxGL *q, const QMapboxGLSettings &settin static_cast(settings.constrainMode()))) { fileSourceObj->setAccessToken(settings.accessToken().toStdString()); - connect(this, SIGNAL(needsRendering()), q_ptr, SIGNAL(needsRendering())); + connect(this, SIGNAL(needsRendering()), q_ptr, SIGNAL(needsRendering()), Qt::QueuedConnection); connect(this, SIGNAL(mapRegionDidChange()), q_ptr, SIGNAL(mapRegionDidChange())); } @@ -610,7 +611,10 @@ std::array QMapboxGLPrivate::getFramebufferSize() const void QMapboxGLPrivate::invalidate() { - emit needsRendering(); + if (!dirty) { + emit needsRendering(); + dirty = true; + } } void QMapboxGLPrivate::notifyMapChange(mbgl::MapChange change) diff --git a/platform/qt/src/qmapboxgl_p.hpp b/platform/qt/src/qmapboxgl_p.hpp index 93da4089a..c52007321 100644 --- a/platform/qt/src/qmapboxgl_p.hpp +++ b/platform/qt/src/qmapboxgl_p.hpp @@ -44,6 +44,8 @@ public: std::unique_ptr fileSourceObj; std::unique_ptr mapObj; + bool dirty = false; + public slots: void connectionEstablished();