diff options
author | Thiago Marcos P. Santos <thiago@mapbox.com> | 2016-05-02 21:36:03 +0300 |
---|---|---|
committer | Thiago Marcos P. Santos <thiago@mapbox.com> | 2016-05-03 13:51:52 +0300 |
commit | 7aa0a88c64d2495ad168ba0f2dd67470527f4288 (patch) | |
tree | e8f266c1b38f9d279fcab25f2312254b5a2dd5ae | |
parent | d4070d33562ce616ded04516993bb755674b0ed1 (diff) | |
download | qtlocation-mapboxgl-7aa0a88c64d2495ad168ba0f2dd67470527f4288.tar.gz |
[Qt] Fix panning the map not updating the center property
-rw-r--r-- | platform/qt/include/qquickmapboxgl.hpp | 4 | ||||
-rw-r--r-- | platform/qt/src/qquickmapboxglrenderer.cpp | 7 | ||||
-rw-r--r-- | 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 f73c8bc25a..dc8a0a454c 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 a9b7122541..03d327c0c5 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<QQuickMapboxGL*>(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 a30afc243c..80a5cb3278 100644 --- a/platform/qt/src/qquickmapboxglrenderer.hpp +++ b/platform/qt/src/qquickmapboxglrenderer.hpp @@ -1,15 +1,19 @@ #ifndef QQUICKMAPBOXGLRENDERER_H #define QQUICKMAPBOXGLRENDERER_H -#include <QScopedPointer> +#include <QObject> #include <QQuickFramebufferObject> +#include <QScopedPointer> +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; |