summaryrefslogtreecommitdiff
path: root/src/location/declarativemaps/qdeclarativegeomapcopyrightsnotice.cpp
diff options
context:
space:
mode:
authorPaolo Angelelli <paolo.angelelli@qt.io>2017-12-11 14:57:11 +0100
committerPaolo Angelelli <paolo.angelelli@qt.io>2018-01-15 09:06:27 +0000
commit2b6020a59ef503eeadabc532782f5e9e795fcf3f (patch)
tree2163c77dd21fef3ad21c650c3e68da1a3dea4a7e /src/location/declarativemaps/qdeclarativegeomapcopyrightsnotice.cpp
parent7b8ab37beaafbe27c258a6d80d1914f982dcc9e1 (diff)
downloadqtlocation-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/declarativemaps/qdeclarativegeomapcopyrightsnotice.cpp')
-rw-r--r--src/location/declarativemaps/qdeclarativegeomapcopyrightsnotice.cpp69
1 files changed, 50 insertions, 19 deletions
diff --git a/src/location/declarativemaps/qdeclarativegeomapcopyrightsnotice.cpp b/src/location/declarativemaps/qdeclarativegeomapcopyrightsnotice.cpp
index 1a8489eb..9edcafed 100644
--- a/src/location/declarativemaps/qdeclarativegeomapcopyrightsnotice.cpp
+++ b/src/location/declarativemaps/qdeclarativegeomapcopyrightsnotice.cpp
@@ -43,9 +43,17 @@
#include <QtQuick/private/qquickanchors_p.h>
#include <QtQuick/private/qquickanchors_p_p.h>
#include <QtLocation/private/qdeclarativegeomap_p.h>
+#include <QtQuick/private/qquickpainteditem_p.h>
QT_BEGIN_NAMESPACE
+class QDeclarativeGeoMapCopyrightNoticePrivate: public QQuickPaintedItemPrivate
+{
+ Q_DECLARE_PUBLIC(QDeclarativeGeoMapCopyrightNotice)
+public:
+ virtual void setVisible(bool visible);
+};
+
/*!
\qmltype MapCopyrightNotice
\instantiates QDeclarativeGeoMapCopyrightNotice
@@ -99,6 +107,7 @@ QDeclarativeGeoMapCopyrightNotice::QDeclarativeGeoMapCopyrightNotice(QQuickItem
QDeclarativeGeoMapCopyrightNotice::~QDeclarativeGeoMapCopyrightNotice()
{
+ setMapSource(nullptr);
}
void QDeclarativeGeoMapCopyrightNotice::anchorToBottomLeft()
@@ -112,35 +121,41 @@ void QDeclarativeGeoMapCopyrightNotice::anchorToBottomLeft()
}
}
-void QDeclarativeGeoMapCopyrightNotice::setMapSource(QDeclarativeGeoMap *mapSource)
+void QDeclarativeGeoMapCopyrightNotice::setMapSource(QDeclarativeGeoMap *map)
{
- if (m_mapSource == mapSource)
+ if (m_mapSource == map)
return;
if (m_mapSource) {
// disconnect this object from current map source
+ m_mapSource->detachCopyrightNotice(copyrightsVisible());
m_mapSource->disconnect(this);
m_mapSource->m_map->disconnect(this);
- m_copyrightsHtml->clear();
+ if (m_copyrightsHtml)
+ m_copyrightsHtml->clear();
m_copyrightsImage = QImage();
m_mapSource = Q_NULLPTR;
}
- if (mapSource) {
- m_mapSource = mapSource;
+ if (map) {
+ m_mapSource = map;
+ m_mapSource->attachCopyrightNotice(copyrightsVisible());
+ connect(this, &QDeclarativeGeoMapCopyrightNotice::copyrightsVisibleChanged,
+ mapSource(), &QDeclarativeGeoMap::onAttachedCopyrightNoticeVisibilityChanged);
+
// First update the copyright. Only Image will do here, no need to store HTML right away.
- if (mapSource->m_copyrights && !mapSource->m_copyrights->m_copyrightsImage.isNull())
- m_copyrightsImage = mapSource->m_copyrights->m_copyrightsImage;
+ if (m_mapSource->m_copyrights && !m_mapSource->m_copyrights->m_copyrightsImage.isNull())
+ m_copyrightsImage = m_mapSource->m_copyrights->m_copyrightsImage;
- connect(m_mapSource, SIGNAL(copyrightsChanged(QImage)),
+ connect(mapSource(), SIGNAL(copyrightsChanged(QImage)),
this, SLOT(copyrightsChanged(QImage)));
- connect(m_mapSource, SIGNAL(copyrightsChanged(QString)),
+ connect(mapSource(), SIGNAL(copyrightsChanged(QString)),
this, SLOT(copyrightsChanged(QString)));
if (m_mapSource->m_map)
connectMap();
else
- connect(m_mapSource, &QDeclarativeGeoMap::mapReadyChanged, this, &QDeclarativeGeoMapCopyrightNotice::connectMap);
+ connect(mapSource(), &QDeclarativeGeoMap::mapReadyChanged, this, &QDeclarativeGeoMapCopyrightNotice::connectMap);
}
}
@@ -149,7 +164,7 @@ void QDeclarativeGeoMapCopyrightNotice::connectMap()
connect(m_mapSource->m_map, SIGNAL(copyrightsStyleSheetChanged(QString)),
this, SLOT(onCopyrightsStyleSheetChanged(QString)));
connect(this, SIGNAL(linkActivated(QString)),
- m_mapSource, SIGNAL(copyrightLinkActivated(QString)));
+ mapSource(), SIGNAL(copyrightLinkActivated(QString)));
onCopyrightsStyleSheetChanged(m_mapSource->m_map->copyrightsStyleSheet());
@@ -159,7 +174,7 @@ void QDeclarativeGeoMapCopyrightNotice::connectMap()
QDeclarativeGeoMap *QDeclarativeGeoMapCopyrightNotice::mapSource()
{
- return m_mapSource;
+ return m_mapSource.data();
}
QString QDeclarativeGeoMapCopyrightNotice::styleSheet() const
@@ -253,14 +268,30 @@ void QDeclarativeGeoMapCopyrightNotice::createCopyright()
m_copyrightsHtml->setDocumentMargin(0);
}
+void QDeclarativeGeoMapCopyrightNoticePrivate::setVisible(bool visible)
+{
+ Q_Q(QDeclarativeGeoMapCopyrightNotice);
+ q->m_copyrightsVisible = visible;
+ QQuickItemPrivate::setVisible(visible);
+}
+
/*!
\internal
*/
void QDeclarativeGeoMapCopyrightNotice::setCopyrightsVisible(bool visible)
{
+ Q_D(QDeclarativeGeoMapCopyrightNotice);
+ if (visible == m_copyrightsVisible)
+ return;
+
m_copyrightsVisible = visible;
+ d->QQuickItemPrivate::setVisible(!m_copyrightsImage.isNull() && visible);
+ emit copyrightsVisibleChanged();
+}
- setVisible(!m_copyrightsImage.isNull() && visible);
+bool QDeclarativeGeoMapCopyrightNotice::copyrightsVisible() const
+{
+ return m_copyrightsVisible;
}
/*!
@@ -277,6 +308,7 @@ void QDeclarativeGeoMapCopyrightNotice::setCopyrightsZ(int copyrightsZ)
*/
void QDeclarativeGeoMapCopyrightNotice::copyrightsChanged(const QImage &copyrightsImage)
{
+ Q_D(QDeclarativeGeoMapCopyrightNotice);
delete m_copyrightsHtml;
m_copyrightsHtml = 0;
@@ -286,20 +318,19 @@ void QDeclarativeGeoMapCopyrightNotice::copyrightsChanged(const QImage &copyrigh
setKeepMouseGrab(false);
setAcceptedMouseButtons(Qt::NoButton);
- setVisible(m_copyrightsVisible);
+ d->QQuickItemPrivate::setVisible(m_copyrightsVisible && !m_copyrightsImage.isNull());
update();
}
void QDeclarativeGeoMapCopyrightNotice::copyrightsChanged(const QString &copyrightsHtml)
{
+ Q_D(QDeclarativeGeoMapCopyrightNotice);
if (copyrightsHtml.isEmpty()) {
- setVisible(false);
+ d->QQuickItemPrivate::setVisible(false);
return;
- } else if (!m_copyrightsVisible) {
- setVisible(false);
- } else {
- setVisible(true);
+ } else {
+ d->QQuickItemPrivate::setVisible(m_copyrightsVisible);
}
// Divfy, so we can style the background. The extra <span> is a