summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBruno de Oliveira Abinader <bruno@mapbox.com>2016-05-11 14:12:22 +0300
committerBruno de Oliveira Abinader <bruno@mapbox.com>2016-05-11 15:50:28 +0300
commitae7a0ddea43e1ffe2681ba1202479197b602fa90 (patch)
tree3b6f7a56be14f01ca69b8e021c7a30b89a0a7ffb
parentc13dd32242b559b00b0b716dc524ed5161c2b147 (diff)
downloadqtlocation-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.hpp9
-rw-r--r--platform/qt/src/qmapboxgl.cpp18
-rw-r--r--platform/qt/src/qquickmapboxgl.cpp6
-rw-r--r--platform/qt/src/qquickmapboxglrenderer.cpp1
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));
}