From 41f63db98bb0f1bd960b3555c20d8f09c212dbc5 Mon Sep 17 00:00:00 2001 From: "Thiago Marcos P. Santos" Date: Mon, 2 May 2016 19:14:54 +0300 Subject: [Qt] Implement bearing on the QML Mapbox Map type --- platform/qt/include/qquickmapboxgl.hpp | 7 +++++++ platform/qt/src/qquickmapboxgl.cpp | 23 +++++++++++++++++++++++ platform/qt/src/qquickmapboxglrenderer.cpp | 4 ++++ 3 files changed, 34 insertions(+) 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 #include +#include + 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()); + } } -- cgit v1.2.1