From 7aa0a88c64d2495ad168ba0f2dd67470527f4288 Mon Sep 17 00:00:00 2001 From: "Thiago Marcos P. Santos" Date: Mon, 2 May 2016 21:36:03 +0300 Subject: [PATCH] [Qt] Fix panning the map not updating the center property --- platform/qt/include/qquickmapboxgl.hpp | 4 +++- platform/qt/src/qquickmapboxglrenderer.cpp | 7 ++++++- platform/qt/src/qquickmapboxglrenderer.hpp | 13 ++++++++++--- 3 files changed, 19 insertions(+), 5 deletions(-) diff --git a/platform/qt/include/qquickmapboxgl.hpp b/platform/qt/include/qquickmapboxgl.hpp index f73c8bc25..dc8a0a454 100644 --- a/platform/qt/include/qquickmapboxgl.hpp +++ b/platform/qt/include/qquickmapboxgl.hpp @@ -51,7 +51,6 @@ public: void setZoomLevel(qreal zoomLevel); qreal zoomLevel() const; - void setCenter(const QGeoCoordinate ¢er); QGeoCoordinate center() const; QGeoServiceProvider::Error error() const; @@ -104,6 +103,9 @@ signals: void styleChanged(); void bearingChanged(qreal angle); +public slots: + void setCenter(const QGeoCoordinate ¢er); + private: qreal m_minimumZoomLevel = 0; qreal m_maximumZoomLevel = 20; diff --git a/platform/qt/src/qquickmapboxglrenderer.cpp b/platform/qt/src/qquickmapboxglrenderer.cpp index a9b712254..03d327c0c 100644 --- a/platform/qt/src/qquickmapboxglrenderer.cpp +++ b/platform/qt/src/qquickmapboxglrenderer.cpp @@ -42,7 +42,11 @@ void QQuickMapboxGLRenderer::render() void QQuickMapboxGLRenderer::synchronize(QQuickFramebufferObject *item) { if (!m_initialized) { - QObject::connect(m_map.data(), SIGNAL(needsRendering()), item, SLOT(update())); + auto qquickMapbox = static_cast(item); + + QObject::connect(m_map.data(), &QMapboxGL::needsRendering, qquickMapbox, &QQuickMapboxGL::update); + QObject::connect(this, &QQuickMapboxGLRenderer::centerChanged, qquickMapbox, &QQuickMapboxGL::setCenter); + m_initialized = true; } @@ -64,6 +68,7 @@ void QQuickMapboxGLRenderer::synchronize(QQuickFramebufferObject *item) if (syncStatus & QQuickMapboxGL::PanNeedsSync) { m_map->moveBy(quickMap->swapPan()); + emit centerChanged(QGeoCoordinate(m_map->latitude(), m_map->longitude())); } if (syncStatus & QQuickMapboxGL::BearingNeedsSync) { diff --git a/platform/qt/src/qquickmapboxglrenderer.hpp b/platform/qt/src/qquickmapboxglrenderer.hpp index a30afc243..80a5cb327 100644 --- a/platform/qt/src/qquickmapboxglrenderer.hpp +++ b/platform/qt/src/qquickmapboxglrenderer.hpp @@ -1,15 +1,19 @@ #ifndef QQUICKMAPBOXGLRENDERER_H #define QQUICKMAPBOXGLRENDERER_H -#include +#include #include +#include +class QGeoCoordinate; +class QMapboxGL; class QOpenGLFramebufferObject; class QSize; -class QMapboxGL; -class QQuickMapboxGLRenderer : public QQuickFramebufferObject::Renderer +class QQuickMapboxGLRenderer : public QObject, public QQuickFramebufferObject::Renderer { + Q_OBJECT + public: QQuickMapboxGLRenderer(); virtual ~QQuickMapboxGLRenderer(); @@ -19,6 +23,9 @@ public: virtual void render(); virtual void synchronize(QQuickFramebufferObject *item); +signals: + void centerChanged(const QGeoCoordinate &coordinate); + private: bool m_initialized = false;