diff options
author | Thiago Marcos P. Santos <thiago@mapbox.com> | 2016-04-28 19:43:24 +0300 |
---|---|---|
committer | Thiago Marcos P. Santos <thiago@mapbox.com> | 2016-05-02 19:33:54 +0300 |
commit | da653ec537efc37d619f3984ddeead0bee018e89 (patch) | |
tree | 19be89a8681f6d681aee82b1160004f96460bbb9 | |
parent | c8d6540bc1dcf75a51ecfcfaae638419ae778c60 (diff) | |
download | qtlocation-mapboxgl-da653ec537efc37d619f3984ddeead0bee018e89.tar.gz |
[Qt] Allow setting the style via QML
-rw-r--r-- | platform/qt/include/qquickmapboxgl.hpp | 12 | ||||
-rw-r--r-- | platform/qt/qmlapp/main.qml | 2 | ||||
-rw-r--r-- | platform/qt/src/qquickmapboxgl.cpp | 20 | ||||
-rw-r--r-- | platform/qt/src/qquickmapboxglrenderer.cpp | 5 |
4 files changed, 38 insertions, 1 deletions
diff --git a/platform/qt/include/qquickmapboxgl.hpp b/platform/qt/include/qquickmapboxgl.hpp index 906087f7b6..0475bb4b39 100644 --- a/platform/qt/include/qquickmapboxgl.hpp +++ b/platform/qt/include/qquickmapboxgl.hpp @@ -13,6 +13,7 @@ class Q_DECL_EXPORT QQuickMapboxGL : public QQuickFramebufferObject { Q_OBJECT + // Map QML Type interface implementation. Q_ENUMS(QGeoServiceProvider::Error) Q_PROPERTY(QDeclarativeGeoServiceProvider *plugin READ plugin WRITE setPlugin NOTIFY pluginChanged) Q_PROPERTY(qreal minimumZoomLevel READ minimumZoomLevel WRITE setMinimumZoomLevel NOTIFY minimumZoomLevelChanged) @@ -25,6 +26,9 @@ class Q_DECL_EXPORT QQuickMapboxGL : public QQuickFramebufferObject Q_PROPERTY(bool copyrightsVisible READ copyrightsVisible WRITE setCopyrightsVisible NOTIFY copyrightsVisibleChanged) Q_PROPERTY(QColor color READ color WRITE setColor NOTIFY colorChanged) + // MapboxGL QML Type interface. + Q_PROPERTY(QString style READ style WRITE setStyle NOTIFY styleChanged) + public: QQuickMapboxGL(QQuickItem *parent = 0); virtual ~QQuickMapboxGL(); @@ -59,10 +63,14 @@ public: void setColor(const QColor &color); QColor color() const; + void setStyle(const QString &style); + QString style() const; + enum SyncState { NothingNeedsSync = 0x00, ZoomNeedsSync = 0x01, CenterNeedsSync = 0x02, + StyleNeedsSync = 0x04, }; int swapSyncState(); @@ -80,6 +88,8 @@ signals: void copyrightsVisibleChanged(bool visible); void colorChanged(const QColor &color); + void styleChanged(); + private: qreal m_minimumZoomLevel = 0; qreal m_maximumZoomLevel = 20; @@ -88,6 +98,8 @@ private: QGeoCoordinate m_center; QGeoShape m_visibleRegion; + QString m_style; + int m_syncState = NothingNeedsSync; }; diff --git a/platform/qt/qmlapp/main.qml b/platform/qt/qmlapp/main.qml index 6a09d6051a..6baefba4d7 100644 --- a/platform/qt/qmlapp/main.qml +++ b/platform/qt/qmlapp/main.qml @@ -21,6 +21,8 @@ ApplicationWindow { id: map anchors.fill: parent + style: "mapbox://styles/mapbox/streets-v8" + center: QtPositioning.coordinate(60.170448, 24.942046) zoomLevel: 14 minimumZoomLevel: 8 diff --git a/platform/qt/src/qquickmapboxgl.cpp b/platform/qt/src/qquickmapboxgl.cpp index b31055b587..2e6542ac15 100644 --- a/platform/qt/src/qquickmapboxgl.cpp +++ b/platform/qt/src/qquickmapboxgl.cpp @@ -3,6 +3,7 @@ #include <QQuickMapboxGL> #include <QQuickItem> +#include <QString> #include <QtGlobal> QQuickMapboxGL::QQuickMapboxGL(QQuickItem *parent_) @@ -156,6 +157,25 @@ QColor QQuickMapboxGL::color() const return QColor(); } +void QQuickMapboxGL::setStyle(const QString &styleUrl) +{ + if (m_style == styleUrl) { + return; + } + + m_style = styleUrl; + + m_syncState |= StyleNeedsSync; + update(); + + emit styleChanged(); +} + +QString QQuickMapboxGL::style() const +{ + return m_style; +} + int QQuickMapboxGL::swapSyncState() { int oldState = m_syncState; diff --git a/platform/qt/src/qquickmapboxglrenderer.cpp b/platform/qt/src/qquickmapboxglrenderer.cpp index fc98cf35e1..20b5bf6d46 100644 --- a/platform/qt/src/qquickmapboxglrenderer.cpp +++ b/platform/qt/src/qquickmapboxglrenderer.cpp @@ -42,7 +42,6 @@ void QQuickMapboxGLRenderer::render() void QQuickMapboxGLRenderer::synchronize(QQuickFramebufferObject *item) { if (!m_initialized) { - m_map->setStyleURL(QMapbox::defaultStyles()[0].first); QObject::connect(m_map.data(), SIGNAL(needsRendering()), item, SLOT(update())); m_initialized = true; } @@ -58,4 +57,8 @@ void QQuickMapboxGLRenderer::synchronize(QQuickFramebufferObject *item) const auto& center = quickMap->center(); m_map->setCoordinate(QMapbox::Coordinate(center.latitude(), center.longitude())); } + + if (syncStatus & QQuickMapboxGL::StyleNeedsSync) { + m_map->setStyleURL(quickMap->style()); + } } |