summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaolo Angelelli <paolo.angelelli@qt.io>2018-03-01 12:15:57 +0100
committerPaolo Angelelli <paolo.angelelli@qt.io>2018-03-01 12:46:30 +0000
commit8666201dcc76b277a2d5a77b84ed7e7114b76987 (patch)
tree22e28e6c9d26d405001e61305b37eee849f89321
parentae00734245f30de4a777bbfc4be73917dfae142a (diff)
downloadqtlocation-8666201dcc76b277a2d5a77b84ed7e7114b76987.tar.gz
Fix re-set map items rendering stale geometry
Geometries are now cleared if data is invalid, before early return. Task-number: QTBUG-66758 Change-Id: Ie89248f78b5fd817a33ed5d6ff56b3547d64a50b Reviewed-by: Alex Blasche <alexander.blasche@qt.io>
-rw-r--r--src/location/declarativemaps/qdeclarativecirclemapitem.cpp10
-rw-r--r--src/location/declarativemaps/qdeclarativepolygonmapitem.cpp10
-rw-r--r--src/location/declarativemaps/qdeclarativepolylinemapitem.cpp9
-rw-r--r--src/location/declarativemaps/qdeclarativerectanglemapitem.cpp10
4 files changed, 31 insertions, 8 deletions
diff --git a/src/location/declarativemaps/qdeclarativecirclemapitem.cpp b/src/location/declarativemaps/qdeclarativecirclemapitem.cpp
index a1e34a30..68e61ee5 100644
--- a/src/location/declarativemaps/qdeclarativecirclemapitem.cpp
+++ b/src/location/declarativemaps/qdeclarativecirclemapitem.cpp
@@ -484,9 +484,15 @@ QSGNode *QDeclarativeCircleMapItem::updateMapItemPaintNode(QSGNode *oldNode, Upd
*/
void QDeclarativeCircleMapItem::updatePolish()
{
- if (!map() || !circle_.isValid()
- || map()->geoProjection().projectionType() != QGeoProjection::ProjectionWebMercator)
+ if (!map() || map()->geoProjection().projectionType() != QGeoProjection::ProjectionWebMercator)
+ return;
+ if (!circle_.isValid()) {
+ geometry_.clear();
+ borderGeometry_.clear();
+ setWidth(0);
+ setHeight(0);
return;
+ }
const QGeoProjectionWebMercator &p = static_cast<const QGeoProjectionWebMercator&>(map()->geoProjection());
QScopedValueRollback<bool> rollback(updatingGeometry_);
diff --git a/src/location/declarativemaps/qdeclarativepolygonmapitem.cpp b/src/location/declarativemaps/qdeclarativepolygonmapitem.cpp
index 5eda137c..7493c962 100644
--- a/src/location/declarativemaps/qdeclarativepolygonmapitem.cpp
+++ b/src/location/declarativemaps/qdeclarativepolygonmapitem.cpp
@@ -500,9 +500,15 @@ QSGNode *QDeclarativePolygonMapItem::updateMapItemPaintNode(QSGNode *oldNode, Up
*/
void QDeclarativePolygonMapItem::updatePolish()
{
- if (!map() || geopath_.path().length() == 0
- || map()->geoProjection().projectionType() != QGeoProjection::ProjectionWebMercator)
+ if (!map() || map()->geoProjection().projectionType() != QGeoProjection::ProjectionWebMercator)
+ return;
+ if (geopath_.path().length() == 0) { // Possibly cleared
+ geometry_.clear();
+ borderGeometry_.clear();
+ setWidth(0);
+ setHeight(0);
return;
+ }
const QGeoProjectionWebMercator &p = static_cast<const QGeoProjectionWebMercator&>(map()->geoProjection());
QScopedValueRollback<bool> rollback(updatingGeometry_);
diff --git a/src/location/declarativemaps/qdeclarativepolylinemapitem.cpp b/src/location/declarativemaps/qdeclarativepolylinemapitem.cpp
index 90ed95e4..3b004dce 100644
--- a/src/location/declarativemaps/qdeclarativepolylinemapitem.cpp
+++ b/src/location/declarativemaps/qdeclarativepolylinemapitem.cpp
@@ -748,9 +748,14 @@ void QDeclarativePolylineMapItem::updateCache()
*/
void QDeclarativePolylineMapItem::updatePolish()
{
- if (!map() || geopath_.path().length() == 0
- || map()->geoProjection().projectionType() != QGeoProjection::ProjectionWebMercator)
+ if (!map() || map()->geoProjection().projectionType() != QGeoProjection::ProjectionWebMercator)
+ return;
+ if (geopath_.path().length() == 0) { // Possibly cleared
+ geometry_.clear();
+ setWidth(0);
+ setHeight(0);
return;
+ }
QScopedValueRollback<bool> rollback(updatingGeometry_);
updatingGeometry_ = true;
diff --git a/src/location/declarativemaps/qdeclarativerectanglemapitem.cpp b/src/location/declarativemaps/qdeclarativerectanglemapitem.cpp
index 0206ac96..54706ad7 100644
--- a/src/location/declarativemaps/qdeclarativerectanglemapitem.cpp
+++ b/src/location/declarativemaps/qdeclarativerectanglemapitem.cpp
@@ -273,9 +273,15 @@ QSGNode *QDeclarativeRectangleMapItem::updateMapItemPaintNode(QSGNode *oldNode,
*/
void QDeclarativeRectangleMapItem::updatePolish()
{
- if (!map() || !topLeft().isValid() || !bottomRight().isValid()
- || map()->geoProjection().projectionType() != QGeoProjection::ProjectionWebMercator)
+ if (!map() || map()->geoProjection().projectionType() != QGeoProjection::ProjectionWebMercator)
return;
+ if (!topLeft().isValid() || !bottomRight().isValid()) {
+ geometry_.clear();
+ borderGeometry_.clear();
+ setWidth(0);
+ setHeight(0);
+ return;
+ }
const QGeoProjectionWebMercator &p = static_cast<const QGeoProjectionWebMercator&>(map()->geoProjection());