diff options
author | Bruno de Oliveira Abinader <bruno@mapbox.com> | 2016-05-11 14:12:22 +0300 |
---|---|---|
committer | Bruno de Oliveira Abinader <bruno@mapbox.com> | 2016-05-11 15:50:28 +0300 |
commit | ae7a0ddea43e1ffe2681ba1202479197b602fa90 (patch) | |
tree | 3b6f7a56be14f01ca69b8e021c7a30b89a0a7ffb | |
parent | c13dd32242b559b00b0b716dc524ed5161c2b147 (diff) | |
download | qtlocation-mapboxgl-ae7a0ddea43e1ffe2681ba1202479197b602fa90.tar.gz |
[Qt] Added viewport mode
Qt Quick requires third-party rendering codes to follow its standards
with regards to viewport transform. Qt 5.6 adds a 'mirrorVertically'
property but that only solves the solution for that version of Qt
onwards. Telling Mapbox GL core to flip the Y axis makes QQuickMapboxGL
item available for Qt 5.2 onwards.
Qt 'mirrorVertically' property documentation:
http://doc.qt.io/qt-5/qquickframebufferobject.html#mirrorVertically-prop
Fixes #4866.
-rw-r--r-- | platform/qt/include/qmapboxgl.hpp | 9 | ||||
-rw-r--r-- | platform/qt/src/qmapboxgl.cpp | 18 | ||||
-rw-r--r-- | platform/qt/src/qquickmapboxgl.cpp | 6 | ||||
-rw-r--r-- | platform/qt/src/qquickmapboxglrenderer.cpp | 1 |
4 files changed, 28 insertions, 6 deletions
diff --git a/platform/qt/include/qmapboxgl.hpp b/platform/qt/include/qmapboxgl.hpp index 4c02c42736..3b10dadc9c 100644 --- a/platform/qt/include/qmapboxgl.hpp +++ b/platform/qt/include/qmapboxgl.hpp @@ -36,6 +36,11 @@ public: ConstrainWidthAndHeight }; + enum ViewportMode { + DefaultViewport = 0, + FlippedYViewport + }; + MapMode mapMode() const; void setMapMode(MapMode); @@ -45,6 +50,9 @@ public: ConstrainMode constrainMode() const; void setConstrainMode(ConstrainMode); + ViewportMode viewportMode() const; + void setViewportMode(ViewportMode); + unsigned cacheDatabaseMaximumSize() const; void setCacheDatabaseMaximumSize(unsigned); @@ -61,6 +69,7 @@ private: MapMode m_mapMode; GLContextMode m_contextMode; ConstrainMode m_constrainMode; + ViewportMode m_viewportMode; unsigned m_cacheMaximumSize; QString m_cacheDatabasePath; diff --git a/platform/qt/src/qmapboxgl.cpp b/platform/qt/src/qmapboxgl.cpp index 633223488e..e0f57cc0dc 100644 --- a/platform/qt/src/qmapboxgl.cpp +++ b/platform/qt/src/qmapboxgl.cpp @@ -35,6 +35,10 @@ static_assert(mbgl::underlying_type(QMapboxGLSettings::NoConstrain) == mbgl::und static_assert(mbgl::underlying_type(QMapboxGLSettings::ConstrainHeightOnly) == mbgl::underlying_type(mbgl::ConstrainMode::HeightOnly), "error"); static_assert(mbgl::underlying_type(QMapboxGLSettings::ConstrainWidthAndHeight) == mbgl::underlying_type(mbgl::ConstrainMode::WidthAndHeight), "error"); +// mbgl::ViewportMode +static_assert(mbgl::underlying_type(QMapboxGLSettings::DefaultViewport) == mbgl::underlying_type(mbgl::ViewportMode::Default), "error"); +static_assert(mbgl::underlying_type(QMapboxGLSettings::FlippedYViewport) == mbgl::underlying_type(mbgl::ViewportMode::FlippedY), "error"); + // mbgl::NorthOrientation static_assert(mbgl::underlying_type(QMapboxGL::NorthUpwards) == mbgl::underlying_type(mbgl::NorthOrientation::Upwards), "error"); static_assert(mbgl::underlying_type(QMapboxGL::NorthRightwards) == mbgl::underlying_type(mbgl::NorthOrientation::Rightwards), "error"); @@ -61,6 +65,7 @@ QMapboxGLSettings::QMapboxGLSettings() : m_mapMode(QMapboxGLSettings::ContinuousMap) , m_contextMode(QMapboxGLSettings::SharedGLContext) , m_constrainMode(QMapboxGLSettings::ConstrainHeightOnly) + , m_viewportMode(QMapboxGLSettings::DefaultViewport) , m_cacheMaximumSize(mbgl::util::DEFAULT_MAX_CACHE_SIZE) , m_cacheDatabasePath(":memory:") , m_assetPath(QCoreApplication::applicationDirPath()) @@ -97,6 +102,16 @@ void QMapboxGLSettings::setConstrainMode(ConstrainMode mode) m_constrainMode = mode; } +QMapboxGLSettings::ViewportMode QMapboxGLSettings::viewportMode() const +{ + return m_viewportMode; +} + +void QMapboxGLSettings::setViewportMode(ViewportMode mode) +{ + m_viewportMode = mode; +} + unsigned QMapboxGLSettings::cacheDatabaseMaximumSize() const { return m_cacheMaximumSize; @@ -605,7 +620,8 @@ QMapboxGLPrivate::QMapboxGLPrivate(QMapboxGL *q, const QMapboxGLSettings &settin *this, *fileSourceObj, static_cast<mbgl::MapMode>(settings.mapMode()), static_cast<mbgl::GLContextMode>(settings.contextMode()), - static_cast<mbgl::ConstrainMode>(settings.constrainMode()))) + static_cast<mbgl::ConstrainMode>(settings.constrainMode()), + static_cast<mbgl::ViewportMode>(settings.viewportMode()))) { qRegisterMetaType<QMapboxGL::MapChange>("QMapboxGL::MapChange"); diff --git a/platform/qt/src/qquickmapboxgl.cpp b/platform/qt/src/qquickmapboxgl.cpp index d705fa1083..2961925c8b 100644 --- a/platform/qt/src/qquickmapboxgl.cpp +++ b/platform/qt/src/qquickmapboxgl.cpp @@ -14,10 +14,6 @@ QQuickMapboxGL::QQuickMapboxGL(QQuickItem *parent_) : QQuickFramebufferObject(parent_) { -#if QT_VERSION >= 0x050600 - // FIXME: https://github.com/mapbox/mapbox-gl-native/issues/4866 - setMirrorVertically(true); -#endif } QQuickMapboxGL::~QQuickMapboxGL() @@ -166,7 +162,7 @@ QColor QQuickMapboxGL::color() const void QQuickMapboxGL::pan(int dx, int dy) { - m_pan += QPointF(dx, dy); + m_pan += QPointF(dx, -dy); m_syncState |= PanNeedsSync; update(); diff --git a/platform/qt/src/qquickmapboxglrenderer.cpp b/platform/qt/src/qquickmapboxglrenderer.cpp index c76c98fb62..6212c4f128 100644 --- a/platform/qt/src/qquickmapboxglrenderer.cpp +++ b/platform/qt/src/qquickmapboxglrenderer.cpp @@ -16,6 +16,7 @@ QQuickMapboxGLRenderer::QQuickMapboxGLRenderer() settings.setAccessToken(qgetenv("MAPBOX_ACCESS_TOKEN")); settings.setCacheDatabasePath("/tmp/mbgl-cache.db"); settings.setCacheDatabaseMaximumSize(20 * 1024 * 1024); + settings.setViewportMode(QMapboxGLSettings::FlippedYViewport); m_map.reset(new QMapboxGL(nullptr, settings)); } |