diff options
author | Paolo Angelelli <paolo.angelelli@qt.io> | 2017-12-11 14:57:11 +0100 |
---|---|---|
committer | Paolo Angelelli <paolo.angelelli@qt.io> | 2018-01-15 09:06:27 +0000 |
commit | 2b6020a59ef503eeadabc532782f5e9e795fcf3f (patch) | |
tree | 2163c77dd21fef3ad21c650c3e68da1a3dea4a7e /src/location/maps | |
parent | 7b8ab37beaafbe27c258a6d80d1914f982dcc9e1 (diff) | |
download | qtlocation-2b6020a59ef503eeadabc532782f5e9e795fcf3f.tar.gz |
Fix performance issue with copyright notice
Skip evaluating copyrights when the notice is not visible.
The implication of this patch is that copyright information
won't be up to date or even available unless there is an
"attached" copyright notice that has the visible property
set to true.
Task-number: QTBUG-64880
Change-Id: I3750b61913becb0cbf31273ad9a76ae1a2b6a393
Reviewed-by: Alex Blasche <alexander.blasche@qt.io>
Diffstat (limited to 'src/location/maps')
-rw-r--r-- | src/location/maps/qgeomap.cpp | 19 | ||||
-rw-r--r-- | src/location/maps/qgeomap_p.h | 2 | ||||
-rw-r--r-- | src/location/maps/qgeomap_p_p.h | 4 | ||||
-rw-r--r-- | src/location/maps/qgeotiledmap.cpp | 16 | ||||
-rw-r--r-- | src/location/maps/qgeotiledmap_p.h | 2 |
5 files changed, 41 insertions, 2 deletions
diff --git a/src/location/maps/qgeomap.cpp b/src/location/maps/qgeomap.cpp index 0c6ce0a7..46a88003 100644 --- a/src/location/maps/qgeomap.cpp +++ b/src/location/maps/qgeomap.cpp @@ -230,6 +230,15 @@ QString QGeoMap::copyrightsStyleSheet() const return QStringLiteral("#copyright-root { background: rgba(255, 255, 255, 128) }"); } +void QGeoMap::setCopyrightVisible(bool visible) +{ + Q_D(QGeoMap); + if (d->m_copyrightVisible == visible) + return; + + d->m_copyrightVisible = visible; +} + QGeoMapPrivate::QGeoMapPrivate(QGeoMappingManagerEngine *engine, QGeoProjection *geoProjection) : QObjectPrivate(), m_geoProjection(geoProjection), @@ -287,4 +296,14 @@ void QGeoMapPrivate::removeMapItem(QDeclarativeGeoMapItemBase *item) Q_UNUSED(item) } +void QGeoMapPrivate::setCopyrightVisible(bool visible) +{ + m_copyrightVisible = visible; +} + +bool QGeoMapPrivate::copyrightVisible() const +{ + return m_copyrightVisible; +} + QT_END_NAMESPACE diff --git a/src/location/maps/qgeomap_p.h b/src/location/maps/qgeomap_p.h index bb7ade55..f465be1d 100644 --- a/src/location/maps/qgeomap_p.h +++ b/src/location/maps/qgeomap_p.h @@ -124,6 +124,8 @@ public: virtual QString copyrightsStyleSheet() const; + virtual void setCopyrightVisible(bool visible); + protected: QGeoMap(QGeoMapPrivate &dd, QObject *parent = 0); void setCameraData(const QGeoCameraData &cameraData); diff --git a/src/location/maps/qgeomap_p_p.h b/src/location/maps/qgeomap_p_p.h index ec498484..2c366610 100644 --- a/src/location/maps/qgeomap_p_p.h +++ b/src/location/maps/qgeomap_p_p.h @@ -90,6 +90,9 @@ protected: virtual void changeCameraData(const QGeoCameraData &oldCameraData) = 0; // called by QGeoMap::setCameraData() virtual void changeActiveMapType(const QGeoMapType mapType) = 0; // called by QGeoMap::setActiveMapType() + virtual void setCopyrightVisible(bool visible); + virtual bool copyrightVisible() const; + protected: QSize m_viewportSize; QGeoProjection *m_geoProjection; @@ -99,6 +102,7 @@ protected: QList<QGeoMapParameter *> m_mapParameters; QList<QDeclarativeGeoMapItemBase *> m_mapItems; QGeoCameraCapabilities m_cameraCapabilities; + bool m_copyrightVisible = true; }; QT_END_NAMESPACE diff --git a/src/location/maps/qgeotiledmap.cpp b/src/location/maps/qgeotiledmap.cpp index 0eeb189d..815a8b99 100644 --- a/src/location/maps/qgeotiledmap.cpp +++ b/src/location/maps/qgeotiledmap.cpp @@ -143,6 +143,17 @@ void QGeoTiledMap::clearData() d->m_mapScene->clearTexturedTiles(); } +void QGeoTiledMap::setCopyrightVisible(bool visible) +{ + Q_D(QGeoTiledMap); + if (visible == d->m_copyrightVisible) + return; + + QGeoMap::setCopyrightVisible(visible); + if (visible) + evaluateCopyrights(d->m_mapScene->visibleTiles()); +} + void QGeoTiledMap::clearScene(int mapId) { Q_D(QGeoTiledMap); @@ -319,7 +330,7 @@ void QGeoTiledMapPrivate::updateScene() bool newTilesIntroduced = !m_mapScene->visibleTiles().contains(tiles); m_mapScene->setVisibleTiles(tiles); - if (newTilesIntroduced) + if (newTilesIntroduced && m_copyrightVisible) q->evaluateCopyrights(tiles); // don't request tiles that are already built and textured @@ -381,7 +392,8 @@ void QGeoTiledMapPrivate::changeViewportSize(const QSize& size) m_cache->setMinTextureUsage(newSize); } - q->evaluateCopyrights(m_visibleTiles->createTiles()); + if (m_copyrightVisible) + q->evaluateCopyrights(m_mapScene->visibleTiles()); updateScene(); } diff --git a/src/location/maps/qgeotiledmap_p.h b/src/location/maps/qgeotiledmap_p.h index b709cb57..89dd1285 100644 --- a/src/location/maps/qgeotiledmap_p.h +++ b/src/location/maps/qgeotiledmap_p.h @@ -87,6 +87,8 @@ public: void prefetchData() Q_DECL_OVERRIDE; void clearData() Q_DECL_OVERRIDE; + void setCopyrightVisible(bool visible) override; + public Q_SLOTS: virtual void clearScene(int mapId); |