summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThiago Marcos P. Santos <thiago@mapbox.com>2016-05-02 21:36:03 +0300
committerThiago Marcos P. Santos <thiago@mapbox.com>2016-05-03 13:51:52 +0300
commit7aa0a88c64d2495ad168ba0f2dd67470527f4288 (patch)
treee8f266c1b38f9d279fcab25f2312254b5a2dd5ae
parentd4070d33562ce616ded04516993bb755674b0ed1 (diff)
downloadqtlocation-mapboxgl-7aa0a88c64d2495ad168ba0f2dd67470527f4288.tar.gz
[Qt] Fix panning the map not updating the center property
-rw-r--r--platform/qt/include/qquickmapboxgl.hpp4
-rw-r--r--platform/qt/src/qquickmapboxglrenderer.cpp7
-rw-r--r--platform/qt/src/qquickmapboxglrenderer.hpp13
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 &center);
QGeoCoordinate center() const;
QGeoServiceProvider::Error error() const;
@@ -104,6 +103,9 @@ signals:
void styleChanged();
void bearingChanged(qreal angle);
+public slots:
+ void setCenter(const QGeoCoordinate &center);
+
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;