diff options
Diffstat (limited to 'platform/qt/src')
-rw-r--r-- | platform/qt/src/async_task.cpp | 3 | ||||
-rw-r--r-- | platform/qt/src/qmapbox.cpp | 16 | ||||
-rw-r--r-- | platform/qt/src/qmapboxgl.cpp | 2 | ||||
-rw-r--r-- | platform/qt/src/qmapboxgl_p.hpp | 3 | ||||
-rw-r--r-- | platform/qt/src/qquickmapboxgl.cpp | 9 | ||||
-rw-r--r-- | platform/qt/src/qquickmapboxgl.hpp | 175 | ||||
-rw-r--r-- | platform/qt/src/qquickmapboxglmapparameter.cpp | 3 | ||||
-rw-r--r-- | platform/qt/src/qquickmapboxglmapparameter.hpp | 34 | ||||
-rw-r--r-- | platform/qt/src/qquickmapboxglrenderer.cpp | 4 | ||||
-rw-r--r-- | platform/qt/src/qquickmapboxglrenderer.hpp | 6 | ||||
-rw-r--r-- | platform/qt/src/qt_geojson.hpp | 6 | ||||
-rw-r--r-- | platform/qt/src/run_loop.cpp | 3 | ||||
-rw-r--r-- | platform/qt/src/timer.cpp | 5 |
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 ¢er); + +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 { |