diff options
author | Paolo Angelelli <paolo.angelelli@qt.io> | 2018-03-01 12:15:57 +0100 |
---|---|---|
committer | Paolo Angelelli <paolo.angelelli@qt.io> | 2018-03-01 12:46:30 +0000 |
commit | 8666201dcc76b277a2d5a77b84ed7e7114b76987 (patch) | |
tree | 22e28e6c9d26d405001e61305b37eee849f89321 /src/location | |
parent | ae00734245f30de4a777bbfc4be73917dfae142a (diff) | |
download | qtlocation-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>
Diffstat (limited to 'src/location')
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()); |