summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThiago Marcos P. Santos <tmpsantos@gmail.com>2017-02-08 16:15:58 +0200
committerPaolo Angelelli <paolo.angelelli@qt.io>2017-02-13 15:26:39 +0000
commit68b515cdff46dc1030b027a664ef5f3f6cde946a (patch)
tree6d4ac87cd512f25c21005be46e17d446d3ac379b
parent331d8fe606ce0355a7126eb8b68749ceb8b3f15f (diff)
downloadqtlocation-68b515cdff46dc1030b027a664ef5f3f6cde946a.tar.gz
Default style for the copyright defined on the plugin
The Mapbox GL plugin defines a logo image on the copyright notice that needs styling in order to have an appealing look and feel. The default style is empty, so we need to fetch one for the plugin to make this work. Task-number: QTBUG-58601 Change-Id: Ib3f7d7d7fcb2797c6381fc862ce7513b516c9ff5 Reviewed-by: Paolo Angelelli <paolo.angelelli@qt.io>
-rw-r--r--src/location/declarativemaps/qdeclarativegeomap.cpp9
-rw-r--r--src/location/declarativemaps/qdeclarativegeomapcopyrightsnotice.cpp54
-rw-r--r--src/location/declarativemaps/qdeclarativegeomapcopyrightsnotice_p.h5
-rw-r--r--src/location/maps/qgeomap.cpp5
-rw-r--r--src/location/maps/qgeomap_p.h3
-rw-r--r--src/plugins/geoservices/esri/geotiledmap_esri.cpp7
-rw-r--r--src/plugins/geoservices/mapboxgl/logo.pngbin0 -> 3620 bytes
-rw-r--r--src/plugins/geoservices/mapboxgl/mapboxgl.pro2
-rw-r--r--src/plugins/geoservices/mapboxgl/mapboxgl.qrc5
-rw-r--r--src/plugins/geoservices/mapboxgl/qgeomapmapboxgl.cpp22
-rw-r--r--src/plugins/geoservices/mapboxgl/qgeomapmapboxgl.h1
-rw-r--r--src/plugins/geoservices/nokia/qgeotiledmap_nokia.cpp2
-rw-r--r--src/plugins/geoservices/nokia/resource.qrc2
-rw-r--r--src/plugins/geoservices/osm/qgeotiledmaposm.cpp7
14 files changed, 79 insertions, 45 deletions
diff --git a/src/location/declarativemaps/qdeclarativegeomap.cpp b/src/location/declarativemaps/qdeclarativegeomap.cpp
index 20e61ed3..95df9235 100644
--- a/src/location/declarativemaps/qdeclarativegeomap.cpp
+++ b/src/location/declarativemaps/qdeclarativegeomap.cpp
@@ -255,6 +255,8 @@ void QDeclarativeGeoMap::onMapChildrenChanged()
if (!copyrights) {
// create a new one and set its parent, re-assign it to the weak pointer, then connect the copyrights-change signal
m_copyrights = new QDeclarativeGeoMapCopyrightNotice(this);
+ m_copyrights->onCopyrightsStyleSheetChanged(m_map->copyrightsStyleSheet());
+
copyrights = m_copyrights.data();
connect(m_map, SIGNAL(copyrightsChanged(QImage)),
@@ -267,6 +269,9 @@ void QDeclarativeGeoMap::onMapChildrenChanged()
connect(m_map, SIGNAL(copyrightsChanged(QString)),
this, SIGNAL(copyrightsChanged(QString)));
+ connect(m_map, SIGNAL(copyrightsStyleSheetChanged(QString)),
+ copyrights, SLOT(onCopyrightsStyleSheetChanged(QString)));
+
connect(copyrights, SIGNAL(linkActivated(QString)),
this, SIGNAL(copyrightLinkActivated(QString)));
@@ -671,6 +676,7 @@ void QDeclarativeGeoMap::mappingManagerInitialized()
}
m_copyrights = new QDeclarativeGeoMapCopyrightNotice(this);
+ m_copyrights->onCopyrightsStyleSheetChanged(m_map->copyrightsStyleSheet());
connect(m_map, SIGNAL(copyrightsChanged(QImage)),
m_copyrights.data(), SLOT(copyrightsChanged(QImage)));
@@ -682,6 +688,9 @@ void QDeclarativeGeoMap::mappingManagerInitialized()
connect(m_map, SIGNAL(copyrightsChanged(QString)),
this, SIGNAL(copyrightsChanged(QString)));
+ connect(m_map, SIGNAL(copyrightsStyleSheetChanged(QString)),
+ m_copyrights.data(), SLOT(onCopyrightsStyleSheetChanged(QString)));
+
connect(m_copyrights.data(), SIGNAL(linkActivated(QString)),
this, SIGNAL(copyrightLinkActivated(QString)));
connect(m_map, &QGeoMap::sgNodeChanged, this, &QQuickItem::update);
diff --git a/src/location/declarativemaps/qdeclarativegeomapcopyrightsnotice.cpp b/src/location/declarativemaps/qdeclarativegeomapcopyrightsnotice.cpp
index d7fa9f3d..fdfb645a 100644
--- a/src/location/declarativemaps/qdeclarativegeomapcopyrightsnotice.cpp
+++ b/src/location/declarativemaps/qdeclarativegeomapcopyrightsnotice.cpp
@@ -75,12 +75,6 @@ QT_BEGIN_NAMESPACE
*/
/*!
- \qmlproperty color QtLocation::MapCopyrightNotice::backgroundColor
-
- This property holds the current background color of the copyright notice.
-*/
-
-/*!
\qmlproperty string QtLocation::MapCopyrightNotice::styleSheet
This property holds the current css2.1 style sheet used to style the copyright notice, if in HTML form.
@@ -96,7 +90,7 @@ QT_BEGIN_NAMESPACE
QDeclarativeGeoMapCopyrightNotice::QDeclarativeGeoMapCopyrightNotice(QQuickItem *parent)
: QQuickPaintedItem(parent), m_copyrightsHtml(0), m_copyrightsVisible(true), m_mapSource(0),
- m_backgroundColor(255, 255, 255, 128)
+ m_userDefinedStyleSheet(false)
{
// If this item is constructed inside the map, automatically anchor it where it always used to be.
if (qobject_cast<QDeclarativeGeoMap *>(parent))
@@ -126,6 +120,7 @@ void QDeclarativeGeoMapCopyrightNotice::setMapSource(QDeclarativeGeoMap *mapSour
if (m_mapSource) {
// disconnect this object from current map source
m_mapSource->disconnect(this);
+ m_mapSource->m_map->disconnect(this);
m_copyrightsHtml->clear();
m_copyrightsImage = QImage();
m_mapSource = Q_NULLPTR;
@@ -141,8 +136,12 @@ void QDeclarativeGeoMapCopyrightNotice::setMapSource(QDeclarativeGeoMap *mapSour
this, SLOT(copyrightsChanged(QImage)));
connect(m_mapSource, SIGNAL(copyrightsChanged(QString)),
this, SLOT(copyrightsChanged(QString)));
+ connect(m_mapSource->m_map, SIGNAL(copyrightsStyleSheetChanged(QString)),
+ this, SLOT(onCopyrightsStyleSheetChanged(QString)));
connect(this, SIGNAL(linkActivated(QString)),
m_mapSource, SIGNAL(copyrightLinkActivated(QString)));
+
+ onCopyrightsStyleSheetChanged(m_mapSource->m_map->copyrightsStyleSheet());
}
update();
@@ -154,25 +153,15 @@ QDeclarativeGeoMap *QDeclarativeGeoMapCopyrightNotice::mapSource()
return m_mapSource;
}
-QColor QDeclarativeGeoMapCopyrightNotice::backgroundColor() const
-{
- return m_backgroundColor;
-}
-
QString QDeclarativeGeoMapCopyrightNotice::styleSheet() const
{
return m_styleSheet;
}
-void QDeclarativeGeoMapCopyrightNotice::setBackgroundColor(const QColor &color)
-{
- m_backgroundColor = color;
- rasterizeHtmlAndUpdate();
- emit backgroundColorChanged(m_backgroundColor);
-}
-
void QDeclarativeGeoMapCopyrightNotice::setStyleSheet(const QString &styleSheet)
{
+ m_userDefinedStyleSheet = true;
+
if (styleSheet == m_styleSheet)
return;
@@ -224,7 +213,7 @@ void QDeclarativeGeoMapCopyrightNotice::rasterizeHtmlAndUpdate()
m_copyrightsImage = QImage(m_copyrightsHtml->size().toSize(),
QImage::Format_ARGB32_Premultiplied);
- m_copyrightsImage.fill(qPremultiply(m_backgroundColor.rgba()));
+ m_copyrightsImage.fill(qPremultiply(QColor(Qt::transparent).rgba()));
QPainter painter(&m_copyrightsImage);
QAbstractTextDocumentLayout::PaintContext ctx;
ctx.palette.setColor(QPalette::Text, QStringLiteral("black"));
@@ -244,6 +233,9 @@ void QDeclarativeGeoMapCopyrightNotice::createCopyright()
m_copyrightsHtml = new QTextDocument(this);
if (!m_styleSheet.isEmpty())
m_copyrightsHtml->setDefaultStyleSheet(m_styleSheet);
+
+ // The default 4 makes the copyright too wide and tall.
+ m_copyrightsHtml->setDocumentMargin(0);
}
/*!
@@ -295,12 +287,30 @@ void QDeclarativeGeoMapCopyrightNotice::copyrightsChanged(const QString &copyrig
setVisible(true);
}
- m_html = copyrightsHtml;
+ // Divfy, so we can style the background. The extra <span> is a
+ // workaround to QTBUG-58838 and should be removed when it gets fixed.
+ m_html = QStringLiteral("<div id='copyright-root'><span>") + copyrightsHtml + QStringLiteral("</span></div>");
+
if (!m_copyrightsHtml)
createCopyright();
- m_copyrightsHtml->setHtml(copyrightsHtml);
+ m_copyrightsHtml->setHtml(m_html);
+ rasterizeHtmlAndUpdate();
+}
+
+void QDeclarativeGeoMapCopyrightNotice::onCopyrightsStyleSheetChanged(const QString &styleSheet)
+{
+ if (m_userDefinedStyleSheet || styleSheet == m_styleSheet)
+ return;
+
+ m_styleSheet = styleSheet;
+ if (!m_html.isEmpty() && m_copyrightsHtml) {
+ delete m_copyrightsHtml;
+ createCopyright();
+ m_copyrightsHtml->setHtml(m_html);
+ }
rasterizeHtmlAndUpdate();
+ emit styleSheetChanged(m_styleSheet);
}
QT_END_NAMESPACE
diff --git a/src/location/declarativemaps/qdeclarativegeomapcopyrightsnotice_p.h b/src/location/declarativemaps/qdeclarativegeomapcopyrightsnotice_p.h
index 4501fdf7..b09d7c1d 100644
--- a/src/location/declarativemaps/qdeclarativegeomapcopyrightsnotice_p.h
+++ b/src/location/declarativemaps/qdeclarativegeomapcopyrightsnotice_p.h
@@ -63,7 +63,6 @@ class Q_LOCATION_PRIVATE_EXPORT QDeclarativeGeoMapCopyrightNotice : public QQuic
{
Q_OBJECT
Q_PROPERTY(QDeclarativeGeoMap *mapSource READ mapSource WRITE setMapSource NOTIFY mapSourceChanged)
- Q_PROPERTY(QColor backgroundColor READ backgroundColor WRITE setBackgroundColor NOTIFY backgroundColorChanged)
Q_PROPERTY(QString styleSheet READ styleSheet WRITE setStyleSheet NOTIFY styleSheetChanged)
public:
@@ -78,14 +77,13 @@ public:
void setMapSource(QDeclarativeGeoMap *mapSource);
QDeclarativeGeoMap *mapSource();
- QColor backgroundColor() const;
QString styleSheet() const;
- void setBackgroundColor(const QColor &color);
void setStyleSheet(const QString &styleSheet);
public Q_SLOTS:
void copyrightsChanged(const QImage &copyrightsImage);
void copyrightsChanged(const QString &copyrightsHtml);
+ void onCopyrightsStyleSheetChanged(const QString &styleSheet);
signals:
void linkActivated(const QString &link);
@@ -110,6 +108,7 @@ private:
QDeclarativeGeoMap *m_mapSource;
QColor m_backgroundColor;
QString m_styleSheet;
+ bool m_userDefinedStyleSheet;
};
QT_END_NAMESPACE
diff --git a/src/location/maps/qgeomap.cpp b/src/location/maps/qgeomap.cpp
index 4529cc0a..978957e7 100644
--- a/src/location/maps/qgeomap.cpp
+++ b/src/location/maps/qgeomap.cpp
@@ -221,6 +221,11 @@ void QGeoMap::clearMapItems()
d->m_mapItems.clear();
}
+QString QGeoMap::copyrightsStyleSheet() const
+{
+ return QStringLiteral("#copyright-root { background: rgba(255, 255, 255, 128) }");
+}
+
QGeoMapPrivate::QGeoMapPrivate(QGeoMappingManagerEngine *engine, QGeoProjection *geoProjection)
: QObjectPrivate(),
m_geoProjection(geoProjection),
diff --git a/src/location/maps/qgeomap_p.h b/src/location/maps/qgeomap_p.h
index 4838cb4e..bb8ca9b4 100644
--- a/src/location/maps/qgeomap_p.h
+++ b/src/location/maps/qgeomap_p.h
@@ -121,6 +121,8 @@ public:
void removeMapItem(QDeclarativeGeoMapItemBase *item);
void clearMapItems();
+ virtual QString copyrightsStyleSheet() const;
+
protected:
QGeoMap(QGeoMapPrivate &dd, QObject *parent = 0);
void setCameraData(const QGeoCameraData &cameraData);
@@ -132,6 +134,7 @@ Q_SIGNALS:
void activeMapTypeChanged();
void copyrightsChanged(const QImage &copyrightsImage);
void copyrightsChanged(const QString &copyrightsHtml);
+ void copyrightsStyleSheetChanged(const QString &styleSheet);
private:
Q_DISABLE_COPY(QGeoMap)
diff --git a/src/plugins/geoservices/esri/geotiledmap_esri.cpp b/src/plugins/geoservices/esri/geotiledmap_esri.cpp
index 8caf055d..9171fc2b 100644
--- a/src/plugins/geoservices/esri/geotiledmap_esri.cpp
+++ b/src/plugins/geoservices/esri/geotiledmap_esri.cpp
@@ -44,11 +44,6 @@
QT_BEGIN_NAMESPACE
-static QString bodify(const QString &html)
-{
- return QStringLiteral("<body>") + html + QStringLiteral("</body>");
-}
-
GeoTiledMapEsri::GeoTiledMapEsri(GeoTiledMappingManagerEngineEsri *engine, QObject *parent) :
QGeoTiledMap(engine, parent), m_engine(engine), m_mapId(-1)
{
@@ -72,7 +67,7 @@ void GeoTiledMapEsri::evaluateCopyrights(const QSet<QGeoTileSpec> &visibleTiles)
GeoMapSource *mapSource = engine()->mapSource(m_mapId);
if (mapSource)
- emit copyrightsChanged(bodify(mapSource->copyright()));
+ emit copyrightsChanged(mapSource->copyright());
}
QT_END_NAMESPACE
diff --git a/src/plugins/geoservices/mapboxgl/logo.png b/src/plugins/geoservices/mapboxgl/logo.png
new file mode 100644
index 00000000..57410f79
--- /dev/null
+++ b/src/plugins/geoservices/mapboxgl/logo.png
Binary files differ
diff --git a/src/plugins/geoservices/mapboxgl/mapboxgl.pro b/src/plugins/geoservices/mapboxgl/mapboxgl.pro
index 6714ee55..81dd37e2 100644
--- a/src/plugins/geoservices/mapboxgl/mapboxgl.pro
+++ b/src/plugins/geoservices/mapboxgl/mapboxgl.pro
@@ -20,6 +20,8 @@ SOURCES += \
qgeomapmapboxgl.cpp \
qsgmapboxglnode.cpp
+RESOURCES += mapboxgl.qrc
+
OTHER_FILES += \
mapboxgl_plugin.json
diff --git a/src/plugins/geoservices/mapboxgl/mapboxgl.qrc b/src/plugins/geoservices/mapboxgl/mapboxgl.qrc
new file mode 100644
index 00000000..55ff337b
--- /dev/null
+++ b/src/plugins/geoservices/mapboxgl/mapboxgl.qrc
@@ -0,0 +1,5 @@
+<RCC>
+ <qresource prefix="/mapboxgl">
+ <file>logo.png</file>
+ </qresource>
+</RCC>
diff --git a/src/plugins/geoservices/mapboxgl/qgeomapmapboxgl.cpp b/src/plugins/geoservices/mapboxgl/qgeomapmapboxgl.cpp
index 053a926e..0bcd27de 100644
--- a/src/plugins/geoservices/mapboxgl/qgeomapmapboxgl.cpp
+++ b/src/plugins/geoservices/mapboxgl/qgeomapmapboxgl.cpp
@@ -336,6 +336,11 @@ QGeoMapMapboxGL::~QGeoMapMapboxGL()
{
}
+QString QGeoMapMapboxGL::copyrightsStyleSheet() const
+{
+ return QStringLiteral("* { vertical-align: middle; font-weight: normal }");
+}
+
void QGeoMapMapboxGL::setMapboxGLSettings(const QMapboxGLSettings& settings)
{
Q_D(QGeoMapMapboxGL);
@@ -395,12 +400,17 @@ void QGeoMapMapboxGL::copyrightsChanged(const QString &copyrightsHtml)
{
Q_D(QGeoMapMapboxGL);
+ QString copyrightsHtmlFinal = copyrightsHtml;
+
if (d->m_developmentMode) {
- QString copyrightsHtmlDev = "<a href=\"https://www.mapbox.com/pricing/\">"
- + tr("Development access token, do not use in production!") + "</a> - "
- + copyrightsHtml;
- QGeoMap::copyrightsChanged(copyrightsHtmlDev);
- } else {
- QGeoMap::copyrightsChanged(copyrightsHtml);
+ copyrightsHtmlFinal.prepend("<a href='https://www.mapbox.com/pricing'>"
+ + QObject::tr("Development access token, do not use in production!") + "</a> - ");
}
+
+ if (d->m_activeMapType.name().startsWith("mapbox://")) {
+ copyrightsHtmlFinal = "<table><tr><th><img src='qrc:/mapboxgl/logo.png'/></th><th>"
+ + copyrightsHtmlFinal + "</th></tr></table>";
+ }
+
+ QGeoMap::copyrightsChanged(copyrightsHtmlFinal);
}
diff --git a/src/plugins/geoservices/mapboxgl/qgeomapmapboxgl.h b/src/plugins/geoservices/mapboxgl/qgeomapmapboxgl.h
index 4e6bf575..d16d0a6a 100644
--- a/src/plugins/geoservices/mapboxgl/qgeomapmapboxgl.h
+++ b/src/plugins/geoservices/mapboxgl/qgeomapmapboxgl.h
@@ -51,6 +51,7 @@ public:
QGeoMapMapboxGL(QGeoMappingManagerEngineMapboxGL *engine, QObject *parent);
virtual ~QGeoMapMapboxGL();
+ QString copyrightsStyleSheet() const Q_DECL_OVERRIDE;
void setMapboxGLSettings(const QMapboxGLSettings &);
private Q_SLOTS:
diff --git a/src/plugins/geoservices/nokia/qgeotiledmap_nokia.cpp b/src/plugins/geoservices/nokia/qgeotiledmap_nokia.cpp
index 5179fff4..90be0ae9 100644
--- a/src/plugins/geoservices/nokia/qgeotiledmap_nokia.cpp
+++ b/src/plugins/geoservices/nokia/qgeotiledmap_nokia.cpp
@@ -55,7 +55,7 @@ QT_BEGIN_NAMESPACE
*/
QGeoTiledMapNokia::QGeoTiledMapNokia(QGeoTiledMappingManagerEngineNokia *engine, QObject *parent /*= 0*/) :
QGeoTiledMap(engine, parent),
- m_logo(":/images/logo.png"), // HERE logo image
+ m_logo(":/nokia/logo.png"), // HERE logo image
m_engine(engine)
{}
diff --git a/src/plugins/geoservices/nokia/resource.qrc b/src/plugins/geoservices/nokia/resource.qrc
index d48a6ca2..41d973c5 100644
--- a/src/plugins/geoservices/nokia/resource.qrc
+++ b/src/plugins/geoservices/nokia/resource.qrc
@@ -1,5 +1,5 @@
<RCC>
- <qresource prefix="/images">
+ <qresource prefix="/nokia">
<file>logo.png</file>
</qresource>
</RCC>
diff --git a/src/plugins/geoservices/osm/qgeotiledmaposm.cpp b/src/plugins/geoservices/osm/qgeotiledmaposm.cpp
index e1383afb..e31cbdd5 100644
--- a/src/plugins/geoservices/osm/qgeotiledmaposm.cpp
+++ b/src/plugins/geoservices/osm/qgeotiledmaposm.cpp
@@ -45,11 +45,6 @@
QT_BEGIN_NAMESPACE
-static QString bodify(const QString &html)
-{
- return QStringLiteral("<body>") + html + QStringLiteral("</body>");
-}
-
QGeoTiledMapOsm::QGeoTiledMapOsm(QGeoTiledMappingManagerEngineOsm *engine, QObject *parent)
: QGeoTiledMap(engine, parent), m_mapId(-1), m_engine(engine)
{
@@ -114,7 +109,7 @@ void QGeoTiledMapOsm::onProviderDataUpdated(const QGeoTileProviderOsm *provider)
if (copyRights.isEmpty() && provider->mapType().style() == QGeoMapType::CustomMap)
copyRights = m_engine->customCopyright();
- emit copyrightsChanged(bodify(copyRights));
+ emit copyrightsChanged(copyRights);
}
QT_END_NAMESPACE