summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThiago Marcos P. Santos <thiago@mapbox.com>2016-05-02 23:54:43 +0300
committerThiago Marcos P. Santos <thiago@mapbox.com>2016-05-03 14:34:59 +0300
commita60f401e5a22a61a6cef464055285cda1d3c07f3 (patch)
treea97187c03db6e26542cb05a6ee0fd1b7b2a0913a
parent7aa0a88c64d2495ad168ba0f2dd67470527f4288 (diff)
downloadqtlocation-mapboxgl-a60f401e5a22a61a6cef464055285cda1d3c07f3.tar.gz
[Qt] Add `pitch` property to QML MapboxGL Type
-rw-r--r--platform/qt/include/qquickmapboxgl.hpp19
-rw-r--r--platform/qt/src/qquickmapboxgl.cpp23
-rw-r--r--platform/qt/src/qquickmapboxglrenderer.cpp4
3 files changed, 40 insertions, 6 deletions
diff --git a/platform/qt/include/qquickmapboxgl.hpp b/platform/qt/include/qquickmapboxgl.hpp
index dc8a0a454c..6ddad0ac1c 100644
--- a/platform/qt/include/qquickmapboxgl.hpp
+++ b/platform/qt/include/qquickmapboxgl.hpp
@@ -30,6 +30,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)
+ Q_PROPERTY(qreal pitch READ pitch WRITE setPitch NOTIFY pitchChanged)
public:
QQuickMapboxGL(QQuickItem *parent = 0);
@@ -74,15 +75,19 @@ public:
void setBearing(qreal bearing);
qreal bearing() const;
+ void setPitch(qreal pitch);
+ qreal pitch() const;
+
QPointF swapPan();
enum SyncState {
- NothingNeedsSync = 0x00,
- ZoomNeedsSync = 0x01,
- CenterNeedsSync = 0x02,
- StyleNeedsSync = 0x04,
- PanNeedsSync = 0x08,
- BearingNeedsSync = 0x16,
+ NothingNeedsSync = 0,
+ ZoomNeedsSync = 1 << 0,
+ CenterNeedsSync = 1 << 1,
+ StyleNeedsSync = 1 << 2,
+ PanNeedsSync = 1 << 3,
+ BearingNeedsSync = 1 << 4,
+ PitchNeedsSync = 1 << 5,
};
int swapSyncState();
@@ -102,6 +107,7 @@ signals:
void styleChanged();
void bearingChanged(qreal angle);
+ void pitchChanged(qreal angle);
public slots:
void setCenter(const QGeoCoordinate &center);
@@ -118,6 +124,7 @@ private:
QString m_style;
qreal m_bearing = 0;
+ qreal m_pitch = 0;
int m_syncState = NothingNeedsSync;
};
diff --git a/platform/qt/src/qquickmapboxgl.cpp b/platform/qt/src/qquickmapboxgl.cpp
index 2cce39cf17..a9ca6cacf2 100644
--- a/platform/qt/src/qquickmapboxgl.cpp
+++ b/platform/qt/src/qquickmapboxgl.cpp
@@ -1,5 +1,7 @@
#include "qquickmapboxglrenderer.hpp"
+#include <mbgl/util/constants.hpp>
+
#include <QQuickMapboxGL>
#include <QQuickItem>
@@ -209,6 +211,27 @@ qreal QQuickMapboxGL::bearing() const
return m_bearing;
}
+void QQuickMapboxGL::setPitch(qreal angle)
+{
+ angle = qMin(qMax(0., angle), mbgl::util::PITCH_MAX * mbgl::util::RAD2DEG);
+
+ if (m_pitch == angle) {
+ return;
+ }
+
+ m_pitch = angle;
+
+ m_syncState |= PitchNeedsSync;
+ update();
+
+ emit pitchChanged(m_pitch);
+}
+
+qreal QQuickMapboxGL::pitch() const
+{
+ return m_pitch;
+}
+
QPointF QQuickMapboxGL::swapPan()
{
QPointF oldPan = m_pan;
diff --git a/platform/qt/src/qquickmapboxglrenderer.cpp b/platform/qt/src/qquickmapboxglrenderer.cpp
index 03d327c0c5..23ee440873 100644
--- a/platform/qt/src/qquickmapboxglrenderer.cpp
+++ b/platform/qt/src/qquickmapboxglrenderer.cpp
@@ -74,4 +74,8 @@ void QQuickMapboxGLRenderer::synchronize(QQuickFramebufferObject *item)
if (syncStatus & QQuickMapboxGL::BearingNeedsSync) {
m_map->setBearing(quickMap->bearing());
}
+
+ if (syncStatus & QQuickMapboxGL::PitchNeedsSync) {
+ m_map->setPitch(quickMap->pitch());
+ }
}