summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThiago Marcos P. Santos <thiago@mapbox.com>2016-05-02 19:14:54 +0300
committerThiago Marcos P. Santos <thiago@mapbox.com>2016-05-02 19:33:54 +0300
commit41f63db98bb0f1bd960b3555c20d8f09c212dbc5 (patch)
tree565aea56152015a8b020e8d90272e3137cf441d0
parent91cdcbebf400a1cbee16ce9ef192b9223b276650 (diff)
downloadqtlocation-mapboxgl-41f63db98bb0f1bd960b3555c20d8f09c212dbc5.tar.gz
[Qt] Implement bearing on the QML Mapbox Map type
-rw-r--r--platform/qt/include/qquickmapboxgl.hpp7
-rw-r--r--platform/qt/src/qquickmapboxgl.cpp23
-rw-r--r--platform/qt/src/qquickmapboxglrenderer.cpp4
3 files changed, 34 insertions, 0 deletions
diff --git a/platform/qt/include/qquickmapboxgl.hpp b/platform/qt/include/qquickmapboxgl.hpp
index 023a27d5ff..f73c8bc25a 100644
--- a/platform/qt/include/qquickmapboxgl.hpp
+++ b/platform/qt/include/qquickmapboxgl.hpp
@@ -29,6 +29,7 @@ class Q_DECL_EXPORT QQuickMapboxGL : public QQuickFramebufferObject
// MapboxGL QML Type interface.
Q_PROPERTY(QString style READ style WRITE setStyle NOTIFY styleChanged)
+ Q_PROPERTY(qreal bearing READ bearing WRITE setBearing NOTIFY bearingChanged)
public:
QQuickMapboxGL(QQuickItem *parent = 0);
@@ -71,6 +72,9 @@ public:
void setStyle(const QString &style);
QString style() const;
+ void setBearing(qreal bearing);
+ qreal bearing() const;
+
QPointF swapPan();
enum SyncState {
@@ -79,6 +83,7 @@ public:
CenterNeedsSync = 0x02,
StyleNeedsSync = 0x04,
PanNeedsSync = 0x08,
+ BearingNeedsSync = 0x16,
};
int swapSyncState();
@@ -97,6 +102,7 @@ signals:
void colorChanged(const QColor &color);
void styleChanged();
+ void bearingChanged(qreal angle);
private:
qreal m_minimumZoomLevel = 0;
@@ -109,6 +115,7 @@ private:
QGeoShape m_visibleRegion;
QString m_style;
+ qreal m_bearing = 0;
int m_syncState = NothingNeedsSync;
};
diff --git a/platform/qt/src/qquickmapboxgl.cpp b/platform/qt/src/qquickmapboxgl.cpp
index 169c450ef7..2cce39cf17 100644
--- a/platform/qt/src/qquickmapboxgl.cpp
+++ b/platform/qt/src/qquickmapboxgl.cpp
@@ -6,6 +6,8 @@
#include <QString>
#include <QtGlobal>
+#include <cmath>
+
QQuickMapboxGL::QQuickMapboxGL(QQuickItem *parent_)
: QQuickFramebufferObject(parent_)
{
@@ -186,6 +188,27 @@ QString QQuickMapboxGL::style() const
return m_style;
}
+void QQuickMapboxGL::setBearing(qreal angle)
+{
+ angle = std::fmod(angle, 360.);
+
+ if (m_bearing == angle) {
+ return;
+ }
+
+ m_bearing = angle;
+
+ m_syncState |= BearingNeedsSync;
+ update();
+
+ emit bearingChanged(m_bearing);
+}
+
+qreal QQuickMapboxGL::bearing() const
+{
+ return m_bearing;
+}
+
QPointF QQuickMapboxGL::swapPan()
{
QPointF oldPan = m_pan;
diff --git a/platform/qt/src/qquickmapboxglrenderer.cpp b/platform/qt/src/qquickmapboxglrenderer.cpp
index 437a503e13..a9b7122541 100644
--- a/platform/qt/src/qquickmapboxglrenderer.cpp
+++ b/platform/qt/src/qquickmapboxglrenderer.cpp
@@ -65,4 +65,8 @@ void QQuickMapboxGLRenderer::synchronize(QQuickFramebufferObject *item)
if (syncStatus & QQuickMapboxGL::PanNeedsSync) {
m_map->moveBy(quickMap->swapPan());
}
+
+ if (syncStatus & QQuickMapboxGL::BearingNeedsSync) {
+ m_map->setBearing(quickMap->bearing());
+ }
}