[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.
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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");
|
||||
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user