summaryrefslogtreecommitdiff
path: root/platform/qt/src
diff options
context:
space:
mode:
authorBruno de Oliveira Abinader <bruno@mapbox.com>2016-09-22 18:06:08 +0300
committerBruno de Oliveira Abinader <bruno@mapbox.com>2016-09-26 11:47:34 +0200
commit39e30c7687a816e8f6fd834e05e14c8d8c6c1bb5 (patch)
tree68c1ff4b40e9c292efd9586db3c736a25d72465a /platform/qt/src
parent1ce6e1b4bb164a9735742b0cf3f63b7417bc96ae (diff)
downloadqtlocation-mapboxgl-39e30c7687a816e8f6fd834e05e14c8d8c6c1bb5.tar.gz
[Qt] QQuickMapboxGLRenderer is now a friend of QQuickMapboxGL
Simplify implementation by removing unsafe accessors from QQuickMapboxGL meant only to be used by QQuickMapboxGLRenderer.
Diffstat (limited to 'platform/qt/src')
-rw-r--r--platform/qt/src/qquickmapboxgl.cpp31
-rw-r--r--platform/qt/src/qquickmapboxglrenderer.cpp67
-rw-r--r--platform/qt/src/qquickmapboxglrenderer.hpp5
3 files changed, 30 insertions, 73 deletions
diff --git a/platform/qt/src/qquickmapboxgl.cpp b/platform/qt/src/qquickmapboxgl.cpp
index 73241460cc..2174c92139 100644
--- a/platform/qt/src/qquickmapboxgl.cpp
+++ b/platform/qt/src/qquickmapboxgl.cpp
@@ -23,9 +23,7 @@ QQuickMapboxGL::~QQuickMapboxGL()
QQuickFramebufferObject::Renderer *QQuickMapboxGL::createRenderer() const
{
- QQuickMapboxGLRenderer *renderer = new QQuickMapboxGLRenderer();
- connect(renderer, SIGNAL(styleChanged()), this, SIGNAL(styleChanged()));
- return renderer;
+ return new QQuickMapboxGLRenderer;
}
void QQuickMapboxGL::setPlugin(QDeclarativeGeoServiceProvider *)
@@ -199,6 +197,7 @@ void QQuickMapboxGL::setStyle(QQuickMapboxGLStyle *style)
}
m_syncState |= StyleNeedsSync;
+ m_styleLoaded = false;
update();
emit styleChanged();
@@ -251,24 +250,6 @@ qreal QQuickMapboxGL::pitch() const
return m_pitch;
}
-QPointF QQuickMapboxGL::swapPan()
-{
- QPointF oldPan = m_pan;
-
- m_pan = QPointF(0, 0);
-
- return oldPan;
-}
-
-int QQuickMapboxGL::swapSyncState()
-{
- int oldState = m_syncState;
-
- m_syncState = NothingNeedsSync;
-
- return oldState;
-}
-
void QQuickMapboxGL::itemChange(QQuickItem::ItemChange change, const QQuickItem::ItemChangeData &value)
{
QQuickFramebufferObject::itemChange(change, value);
@@ -290,6 +271,14 @@ void QQuickMapboxGL::itemChange(QQuickItem::ItemChange change, const QQuickItem:
}
}
+void QQuickMapboxGL::onMapChanged(QMapbox::MapChange change)
+{
+ if (change == QMapbox::MapChangeDidFinishLoadingStyle) {
+ m_styleLoaded = true;
+ update();
+ }
+}
+
void QQuickMapboxGL::onStylePropertyUpdated(const QVariantMap &params)
{
switch (params.value("type").toInt()) {
diff --git a/platform/qt/src/qquickmapboxglrenderer.cpp b/platform/qt/src/qquickmapboxglrenderer.cpp
index 862f6a133c..0401c7231d 100644
--- a/platform/qt/src/qquickmapboxglrenderer.cpp
+++ b/platform/qt/src/qquickmapboxglrenderer.cpp
@@ -20,36 +20,12 @@ QQuickMapboxGLRenderer::QQuickMapboxGLRenderer()
settings.setViewportMode(QMapboxGLSettings::FlippedYViewport);
m_map.reset(new QMapboxGL(nullptr, settings));
- connect(m_map.data(), SIGNAL(mapChanged(QMapbox::MapChange)), this, SLOT(onMapChanged(QMapbox::MapChange)));
}
QQuickMapboxGLRenderer::~QQuickMapboxGLRenderer()
{
}
-void QQuickMapboxGLRenderer::onMapChanged(QMapbox::MapChange change)
-{
- auto onMapChangeWillStartLoadingMap = [&]() {
- m_styleLoaded = false;
- };
-
- auto onMapChangeDidFinishLoadingMap = [&]() {
- m_styleLoaded = true;
- emit styleChanged();
- };
-
- switch (change) {
- case QMapbox::MapChangeWillStartLoadingMap:
- onMapChangeWillStartLoadingMap();
- break;
- case QMapbox::MapChangeDidFinishLoadingMap:
- onMapChangeDidFinishLoadingMap();
- break;
- default:
- break;
- }
-}
-
QOpenGLFramebufferObject* QQuickMapboxGLRenderer::createFramebufferObject(const QSize &size)
{
m_map->resize(size);
@@ -67,17 +43,16 @@ void QQuickMapboxGLRenderer::render()
void QQuickMapboxGLRenderer::synchronize(QQuickFramebufferObject *item)
{
+ auto quickMap = qobject_cast<QQuickMapboxGL*>(item);
if (!m_initialized) {
- auto qquickMapbox = static_cast<QQuickMapboxGL*>(item);
-
- QObject::connect(m_map.data(), &QMapboxGL::needsRendering, qquickMapbox, &QQuickMapboxGL::update);
- QObject::connect(this, &QQuickMapboxGLRenderer::centerChanged, qquickMapbox, &QQuickMapboxGL::setCenter);
-
+ QObject::connect(m_map.data(), &QMapboxGL::needsRendering, quickMap, &QQuickMapboxGL::update);
+ QObject::connect(m_map.data(), SIGNAL(mapChanged(QMapbox::MapChange)), quickMap, SLOT(onMapChanged(QMapbox::MapChange)));
+ QObject::connect(this, &QQuickMapboxGLRenderer::centerChanged, quickMap, &QQuickMapboxGL::setCenter);
m_initialized = true;
}
- auto quickMap = static_cast<QQuickMapboxGL*>(item);
- auto syncStatus = quickMap->swapSyncState();
+ auto syncStatus = quickMap->m_syncState;
+ quickMap->m_syncState = QQuickMapboxGL::NothingNeedsSync;
if (syncStatus & QQuickMapboxGL::CenterNeedsSync || syncStatus & QQuickMapboxGL::ZoomNeedsSync) {
const auto& center = quickMap->center();
@@ -86,11 +61,11 @@ void QQuickMapboxGLRenderer::synchronize(QQuickFramebufferObject *item)
if (syncStatus & QQuickMapboxGL::StyleNeedsSync && quickMap->style()) {
m_map->setStyleUrl(quickMap->style()->url());
- m_styleLoaded = false;
}
if (syncStatus & QQuickMapboxGL::PanNeedsSync) {
- m_map->moveBy(quickMap->swapPan());
+ m_map->moveBy(quickMap->m_pan);
+ quickMap->m_pan = QPointF();
emit centerChanged(QGeoCoordinate(m_map->latitude(), m_map->longitude()));
}
@@ -102,19 +77,17 @@ void QQuickMapboxGLRenderer::synchronize(QQuickFramebufferObject *item)
m_map->setPitch(quickMap->pitch());
}
- if (m_styleLoaded) {
- if (!quickMap->layoutPropertyChanges().empty()) {
- for (const auto& change: quickMap->layoutPropertyChanges()) {
- m_map->setLayoutProperty(change.value("layer").toString(), change.value("property").toString(), change.value("value"));
- }
- quickMap->layoutPropertyChanges().clear();
- }
-
- if (!quickMap->paintPropertyChanges().empty()) {
- for (const auto& change: quickMap->paintPropertyChanges()) {
- m_map->setPaintProperty(change.value("layer").toString(), change.value("property").toString(), change.value("value"), change.value("class").toString());
- }
- quickMap->paintPropertyChanges().clear();
- }
+ if (!quickMap->m_styleLoaded) {
+ return;
+ }
+
+ for (const auto& change: quickMap->m_layoutChanges) {
+ m_map->setLayoutProperty(change.value("layer").toString(), change.value("property").toString(), change.value("value"));
+ }
+ quickMap->m_layoutChanges.clear();
+
+ for (const auto& change: quickMap->m_paintChanges) {
+ m_map->setPaintProperty(change.value("layer").toString(), change.value("property").toString(), change.value("value"), change.value("class").toString());
}
+ quickMap->m_paintChanges.clear();
}
diff --git a/platform/qt/src/qquickmapboxglrenderer.hpp b/platform/qt/src/qquickmapboxglrenderer.hpp
index 91a5ed6065..0181cbd611 100644
--- a/platform/qt/src/qquickmapboxglrenderer.hpp
+++ b/platform/qt/src/qquickmapboxglrenderer.hpp
@@ -25,14 +25,9 @@ public:
signals:
void centerChanged(const QGeoCoordinate &);
- void styleChanged();
-
-public slots:
- void onMapChanged(QMapbox::MapChange);
private:
bool m_initialized = false;
- bool m_styleLoaded = false;
QScopedPointer<QMapboxGL> m_map;
};