summaryrefslogtreecommitdiff
path: root/platform/qt/src
diff options
context:
space:
mode:
Diffstat (limited to 'platform/qt/src')
-rw-r--r--platform/qt/src/async_task.cpp3
-rw-r--r--platform/qt/src/qmapbox.cpp16
-rw-r--r--platform/qt/src/qmapboxgl.cpp2
-rw-r--r--platform/qt/src/qmapboxgl_p.hpp3
-rw-r--r--platform/qt/src/qquickmapboxgl.cpp9
-rw-r--r--platform/qt/src/qquickmapboxgl.hpp175
-rw-r--r--platform/qt/src/qquickmapboxglmapparameter.cpp3
-rw-r--r--platform/qt/src/qquickmapboxglmapparameter.hpp34
-rw-r--r--platform/qt/src/qquickmapboxglrenderer.cpp4
-rw-r--r--platform/qt/src/qquickmapboxglrenderer.hpp6
-rw-r--r--platform/qt/src/qt_geojson.hpp6
-rw-r--r--platform/qt/src/run_loop.cpp3
-rw-r--r--platform/qt/src/timer.cpp5
13 files changed, 242 insertions, 27 deletions
diff --git a/platform/qt/src/async_task.cpp b/platform/qt/src/async_task.cpp
index c376c1c370..79abd2945e 100644
--- a/platform/qt/src/async_task.cpp
+++ b/platform/qt/src/async_task.cpp
@@ -1,7 +1,6 @@
-#include <mbgl/util/async_task.hpp>
-
#include "async_task_impl.hpp"
+#include <mbgl/util/async_task.hpp>
#include <mbgl/util/run_loop.hpp>
#include <cassert>
diff --git a/platform/qt/src/qmapbox.cpp b/platform/qt/src/qmapbox.cpp
index a101eb4986..7e7a3c5f84 100644
--- a/platform/qt/src/qmapbox.cpp
+++ b/platform/qt/src/qmapbox.cpp
@@ -1,12 +1,14 @@
-#include <mbgl/map/change.hpp>
+#include "qmapbox.hpp"
+
#include <mbgl/gl/gl.hpp>
+#include <mbgl/map/change.hpp>
#include <mbgl/storage/network_status.hpp>
#include <mbgl/util/default_styles.hpp>
#include <mbgl/util/traits.hpp>
-#include <QMapbox>
-
#if QT_VERSION >= 0x050000
+#include "qquickmapboxgl.hpp"
+#include "qquickmapboxglmapparameter.hpp"
#include <QOpenGLContext>
#else
#include <QGLContext>
@@ -73,4 +75,12 @@ Q_DECL_EXPORT void initializeGLExtensions()
});
}
+Q_DECL_EXPORT void registerTypes()
+{
+#if QT_VERSION >= 0x050000
+ qmlRegisterType<QQuickMapboxGL>("QQuickMapboxGL", 1, 0, "MapboxMap");
+ qmlRegisterType<QQuickMapboxGLMapParameter>("QQuickMapboxGL", 1, 0, "MapParameter");
+#endif
+}
+
}
diff --git a/platform/qt/src/qmapboxgl.cpp b/platform/qt/src/qmapboxgl.cpp
index 74238bd240..103ed83256 100644
--- a/platform/qt/src/qmapboxgl.cpp
+++ b/platform/qt/src/qmapboxgl.cpp
@@ -1,3 +1,4 @@
+#include "qmapboxgl.hpp"
#include "qmapboxgl_p.hpp"
#include "qt_conversion.hpp"
@@ -28,7 +29,6 @@
#include <QDebug>
#include <QImage>
-#include <QMapboxGL>
#include <QMargins>
#include <QString>
#include <QStringList>
diff --git a/platform/qt/src/qmapboxgl_p.hpp b/platform/qt/src/qmapboxgl_p.hpp
index 106ce97d50..11b5f695ca 100644
--- a/platform/qt/src/qmapboxgl_p.hpp
+++ b/platform/qt/src/qmapboxgl_p.hpp
@@ -1,11 +1,12 @@
#pragma once
+#include "qmapboxgl.hpp"
+
#include <mbgl/map/map.hpp>
#include <mbgl/map/view.hpp>
#include <mbgl/storage/default_file_source.hpp>
#include <mbgl/util/geo.hpp>
-#include <QMapboxGL>
#include <QObject>
#include <QSize>
diff --git a/platform/qt/src/qquickmapboxgl.cpp b/platform/qt/src/qquickmapboxgl.cpp
index f71f869c9c..b17d8bfe3e 100644
--- a/platform/qt/src/qquickmapboxgl.cpp
+++ b/platform/qt/src/qquickmapboxgl.cpp
@@ -1,11 +1,11 @@
+#include "qquickmapboxgl.hpp"
+
+#include "qmapbox.hpp"
+#include "qquickmapboxglmapparameter.hpp"
#include "qquickmapboxglrenderer.hpp"
#include <mbgl/util/constants.hpp>
-#include <QMapbox>
-#include <QQuickMapboxGL>
-#include <QQuickMapboxGLMapParameter>
-
#include <QDebug>
#include <QQuickItem>
#include <QRegularExpression>
@@ -14,7 +14,6 @@
#include <QQmlListProperty>
#include <QJSValue>
-
namespace {
static const QRegularExpression s_camelCase {"([a-z0-9])([A-Z])"};
diff --git a/platform/qt/src/qquickmapboxgl.hpp b/platform/qt/src/qquickmapboxgl.hpp
new file mode 100644
index 0000000000..64cc41bf78
--- /dev/null
+++ b/platform/qt/src/qquickmapboxgl.hpp
@@ -0,0 +1,175 @@
+#pragma once
+
+#include "qmapbox.hpp"
+#include "qquickmapboxglmapparameter.hpp"
+
+#include <QColor>
+#include <QGeoCoordinate>
+#include <QGeoServiceProvider>
+#include <QGeoShape>
+#include <QImage>
+#include <QPointF>
+#include <QQmlListProperty>
+#include <QQuickFramebufferObject>
+
+class QDeclarativeGeoServiceProvider;
+class QQuickItem;
+class QQuickMapboxGLRenderer;
+
+class Q_DECL_EXPORT QQuickMapboxGL : public QQuickFramebufferObject
+{
+ Q_OBJECT
+
+ // Map QML Type interface.
+ Q_ENUMS(QGeoServiceProvider::Error)
+ Q_PROPERTY(QDeclarativeGeoServiceProvider *plugin READ plugin WRITE setPlugin NOTIFY pluginChanged)
+ Q_PROPERTY(qreal minimumZoomLevel READ minimumZoomLevel WRITE setMinimumZoomLevel NOTIFY minimumZoomLevelChanged)
+ Q_PROPERTY(qreal maximumZoomLevel READ maximumZoomLevel WRITE setMaximumZoomLevel NOTIFY maximumZoomLevelChanged)
+ Q_PROPERTY(qreal zoomLevel READ zoomLevel WRITE setZoomLevel NOTIFY zoomLevelChanged)
+ Q_PROPERTY(QGeoCoordinate center READ center WRITE setCenter NOTIFY centerChanged)
+ Q_PROPERTY(QGeoServiceProvider::Error error READ error NOTIFY errorChanged)
+ Q_PROPERTY(QString errorString READ errorString NOTIFY errorChanged)
+ Q_PROPERTY(QGeoShape visibleRegion READ visibleRegion WRITE setVisibleRegion)
+ Q_PROPERTY(bool copyrightsVisible READ copyrightsVisible WRITE setCopyrightsVisible NOTIFY copyrightsVisibleChanged)
+ Q_PROPERTY(QColor color READ color WRITE setColor NOTIFY colorChanged)
+
+ // Proposed Qt interface - based on the example documentation below:
+ // http://doc.qt.io/qt-5/qtqml-referenceexamples-properties-example.html
+ Q_PROPERTY(QQmlListProperty<QQuickMapboxGLMapParameter> parameters READ parameters)
+
+public:
+ QQuickMapboxGL(QQuickItem *parent = 0);
+ virtual ~QQuickMapboxGL();
+
+ // QQuickFramebufferObject implementation.
+ virtual Renderer *createRenderer() const Q_DECL_FINAL;
+
+ // Map QML Type interface implementation.
+ void setPlugin(QDeclarativeGeoServiceProvider *plugin);
+ QDeclarativeGeoServiceProvider *plugin() const;
+
+ void setMinimumZoomLevel(qreal minimumZoomLevel);
+ qreal minimumZoomLevel() const;
+
+ void setMaximumZoomLevel(qreal maximumZoomLevel);
+ qreal maximumZoomLevel() const;
+
+ void setZoomLevel(qreal zoomLevel);
+ qreal zoomLevel() const;
+
+ QGeoCoordinate center() const;
+
+ QGeoServiceProvider::Error error() const;
+ QString errorString() const;
+
+ void setVisibleRegion(const QGeoShape &shape);
+ QGeoShape visibleRegion() const;
+
+ void setCopyrightsVisible(bool visible);
+ bool copyrightsVisible() const;
+
+ void setColor(const QColor &color);
+ QColor color() const;
+
+ Q_INVOKABLE void pan(int dx, int dy);
+
+ // Proposed Qt interface implementation.
+ QQmlListProperty<QQuickMapboxGLMapParameter> parameters();
+
+protected:
+ // QQmlParserStatus implementation
+ void componentComplete() override;
+
+signals:
+ // Map QML Type signals.
+ void minimumZoomLevelChanged();
+ void maximumZoomLevelChanged();
+ void zoomLevelChanged(qreal zoomLevel);
+ void centerChanged(const QGeoCoordinate &coordinate);
+ void colorChanged(const QColor &color);
+ void errorChanged();
+
+ // Compatibility with Map QML Type, but no-op.
+ void pluginChanged(QDeclarativeGeoServiceProvider *plugin);
+ void copyrightLinkActivated(const QString &link);
+ void copyrightsVisibleChanged(bool visible);
+
+public slots:
+ void setCenter(const QGeoCoordinate &center);
+
+private slots:
+ void onMapChanged(QMapbox::MapChange);
+ void onParameterPropertyUpdated(const QString &name);
+
+private:
+ static void appendParameter(QQmlListProperty<QQuickMapboxGLMapParameter> *prop, QQuickMapboxGLMapParameter *mapObject);
+ static int countParameters(QQmlListProperty<QQuickMapboxGLMapParameter> *prop);
+ static QQuickMapboxGLMapParameter *parameterAt(QQmlListProperty<QQuickMapboxGLMapParameter> *prop, int index);
+ static void clearParameter(QQmlListProperty<QQuickMapboxGLMapParameter> *prop);
+
+ enum SyncState {
+ NothingNeedsSync = 0,
+ ZoomNeedsSync = 1 << 0,
+ CenterNeedsSync = 1 << 1,
+ StyleNeedsSync = 1 << 2,
+ PanNeedsSync = 1 << 3,
+ BearingNeedsSync = 1 << 4,
+ PitchNeedsSync = 1 << 5,
+ };
+
+ struct Image {
+ QString name;
+ QImage sprite;
+ };
+
+ struct StyleProperty {
+ enum Type {
+ Paint = 0,
+ Layout
+ };
+
+ Type type;
+ QString layer;
+ QString property;
+ QVariant value;
+ QString klass;
+ };
+
+ void processMapParameter(QQuickMapboxGLMapParameter *);
+ bool parseImage(QQuickMapboxGLMapParameter *);
+ bool parseStyle(QQuickMapboxGLMapParameter *);
+ bool parseStyleProperty(QQuickMapboxGLMapParameter *, const QString &name);
+ bool parseStyleLayer(QQuickMapboxGLMapParameter *);
+ bool parseStyleSource(QQuickMapboxGLMapParameter *);
+ bool parseStyleFilter(QQuickMapboxGLMapParameter *);
+ bool parseBearing(QQuickMapboxGLMapParameter *);
+ bool parsePitch(QQuickMapboxGLMapParameter *);
+
+ qreal m_minimumZoomLevel = 0;
+ qreal m_maximumZoomLevel = 20;
+ qreal m_zoomLevel = 20;
+
+ QPointF m_pan;
+
+ QGeoCoordinate m_center;
+ QGeoShape m_visibleRegion;
+ QColor m_color;
+ QString m_styleUrl;
+ QList<Image> m_imageChanges;
+ QList<StyleProperty> m_stylePropertyChanges;
+ QList<QVariantMap> m_layerChanges;
+ QList<QVariantMap> m_sourceChanges;
+ QList<QVariantMap> m_filterChanges;
+ QList<QQuickMapboxGLMapParameter*> m_parameters;
+
+ QGeoServiceProvider::Error m_error = QGeoServiceProvider::NoError;
+ QString m_errorString;
+
+ qreal m_bearing = 0;
+ qreal m_pitch = 0;
+
+ int m_syncState = NothingNeedsSync;
+ bool m_styleLoaded = false;
+
+ friend class QQuickMapboxGLRenderer;
+};
diff --git a/platform/qt/src/qquickmapboxglmapparameter.cpp b/platform/qt/src/qquickmapboxglmapparameter.cpp
index 68fe8fac85..abf6e5ff1c 100644
--- a/platform/qt/src/qquickmapboxglmapparameter.cpp
+++ b/platform/qt/src/qquickmapboxglmapparameter.cpp
@@ -1,11 +1,10 @@
-#include "QQuickMapboxGLMapParameter"
+#include "qquickmapboxglmapparameter.hpp"
#include <QByteArray>
#include <QMetaObject>
#include <QMetaProperty>
#include <QSignalMapper>
-
QQuickMapboxGLMapParameter::QQuickMapboxGLMapParameter(QObject *parent)
: QObject(parent)
, m_metaPropertyOffset(metaObject()->propertyCount())
diff --git a/platform/qt/src/qquickmapboxglmapparameter.hpp b/platform/qt/src/qquickmapboxglmapparameter.hpp
new file mode 100644
index 0000000000..1dca0cf55d
--- /dev/null
+++ b/platform/qt/src/qquickmapboxglmapparameter.hpp
@@ -0,0 +1,34 @@
+#pragma once
+
+#include <QObject>
+#include <QQmlParserStatus>
+#include <QString>
+#include <qqml.h>
+
+class Q_DECL_EXPORT QQuickMapboxGLMapParameter : public QObject, public QQmlParserStatus
+{
+ Q_OBJECT
+ Q_INTERFACES(QQmlParserStatus)
+
+public:
+ QQuickMapboxGLMapParameter(QObject *parent = 0);
+ virtual ~QQuickMapboxGLMapParameter() {};
+
+ int propertyOffset() const { return m_metaPropertyOffset; }
+
+signals:
+ void propertyUpdated(const QString &name);
+
+protected:
+ // QQmlParserStatus implementation
+ void classBegin() override {}
+ void componentComplete() override;
+
+private slots:
+ void onPropertyUpdated(int index);
+
+private:
+ int m_metaPropertyOffset;
+};
+
+QML_DECLARE_TYPE(QQuickMapboxGLMapParameter)
diff --git a/platform/qt/src/qquickmapboxglrenderer.cpp b/platform/qt/src/qquickmapboxglrenderer.cpp
index 4208047380..d550794d64 100644
--- a/platform/qt/src/qquickmapboxglrenderer.cpp
+++ b/platform/qt/src/qquickmapboxglrenderer.cpp
@@ -1,7 +1,7 @@
#include "qquickmapboxglrenderer.hpp"
-#include <QMapboxGL>
-#include <QQuickMapboxGL>
+#include "qmapboxgl.hpp"
+#include "qquickmapboxgl.hpp"
#include <QSize>
#include <QOpenGLFramebufferObject>
diff --git a/platform/qt/src/qquickmapboxglrenderer.hpp b/platform/qt/src/qquickmapboxglrenderer.hpp
index fa9b81ec7f..e0fc767d58 100644
--- a/platform/qt/src/qquickmapboxglrenderer.hpp
+++ b/platform/qt/src/qquickmapboxglrenderer.hpp
@@ -1,12 +1,12 @@
#pragma once
+#include "qmapbox.hpp"
+#include "qmapboxgl.hpp"
+
#include <QObject>
#include <QQuickFramebufferObject>
#include <QScopedPointer>
-#include <QMapbox>
-#include <QMapboxGL>
-
class QGeoCoordinate;
class QOpenGLFramebufferObject;
class QSize;
diff --git a/platform/qt/src/qt_geojson.hpp b/platform/qt/src/qt_geojson.hpp
index fd2b689fed..07813623fd 100644
--- a/platform/qt/src/qt_geojson.hpp
+++ b/platform/qt/src/qt_geojson.hpp
@@ -4,12 +4,12 @@
#include <mbgl/style/conversion/geojson.hpp>
#include <mbgl/util/rapidjson.hpp>
-#include <sstream>
-#include <string>
-
#include <QByteArray>
#include <QVariant>
+#include <sstream>
+#include <string>
+
namespace mbgl {
namespace style {
namespace conversion {
diff --git a/platform/qt/src/run_loop.cpp b/platform/qt/src/run_loop.cpp
index d33eb9cda6..1c199be9de 100644
--- a/platform/qt/src/run_loop.cpp
+++ b/platform/qt/src/run_loop.cpp
@@ -4,11 +4,10 @@
#include <QCoreApplication>
+#include <cassert>
#include <functional>
#include <utility>
-#include <cassert>
-
namespace {
using namespace mbgl::util;
diff --git a/platform/qt/src/timer.cpp b/platform/qt/src/timer.cpp
index 6d0ccb41d7..a0c1328d63 100644
--- a/platform/qt/src/timer.cpp
+++ b/platform/qt/src/timer.cpp
@@ -1,11 +1,10 @@
-#include <mbgl/util/timer.hpp>
+#include "timer_impl.hpp"
#include <mbgl/util/run_loop.hpp>
+#include <mbgl/util/timer.hpp>
#include <memory>
-#include "timer_impl.hpp"
-
namespace mbgl {
namespace util {