From 39e30c7687a816e8f6fd834e05e14c8d8c6c1bb5 Mon Sep 17 00:00:00 2001 From: Bruno de Oliveira Abinader Date: Thu, 22 Sep 2016 18:06:08 +0300 Subject: [Qt] QQuickMapboxGLRenderer is now a friend of QQuickMapboxGL Simplify implementation by removing unsafe accessors from QQuickMapboxGL meant only to be used by QQuickMapboxGLRenderer. --- platform/qt/src/qquickmapboxgl.cpp | 31 +++++--------- platform/qt/src/qquickmapboxglrenderer.cpp | 67 +++++++++--------------------- platform/qt/src/qquickmapboxglrenderer.hpp | 5 --- 3 files changed, 30 insertions(+), 73 deletions(-) (limited to 'platform/qt/src') 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 ¶ms) { 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(item); if (!m_initialized) { - auto qquickMapbox = static_cast(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(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 m_map; }; -- cgit v1.2.1