diff options
19 files changed, 155 insertions, 133 deletions
diff --git a/src/imports/location/qdeclarativecirclemapitem.cpp b/src/imports/location/qdeclarativecirclemapitem.cpp index 92977179..eb3de7a2 100644 --- a/src/imports/location/qdeclarativecirclemapitem.cpp +++ b/src/imports/location/qdeclarativecirclemapitem.cpp @@ -35,7 +35,6 @@ ****************************************************************************/ #include "qdeclarativecirclemapitem_p.h" -#include "qdeclarativegeomapquickitem_p.h" #include "qdeclarativepolygonmapitem_p.h" #include "qgeocameracapabilities_p.h" #include "qgeoprojection_p.h" @@ -302,9 +301,9 @@ QDeclarativeCircleMapItem::QDeclarativeCircleMapItem(QQuickItem *parent) { setFlag(ItemHasContents, true); QObject::connect(&border_, SIGNAL(colorChanged(QColor)), - this, SLOT(updateMapItemAssumeDirty())); + this, SLOT(markSourceDirtyAndUpdate())); QObject::connect(&border_, SIGNAL(widthChanged(qreal)), - this, SLOT(updateMapItemAssumeDirty())); + this, SLOT(markSourceDirtyAndUpdate())); // assume that circles are not self-intersecting // to speed up processing @@ -335,21 +334,18 @@ QDeclarativeMapLineProperties *QDeclarativeCircleMapItem::border() return &border_; } -void QDeclarativeCircleMapItem::updateMapItemAssumeDirty() +void QDeclarativeCircleMapItem::markSourceDirtyAndUpdate() { geometry_.markSourceDirty(); borderGeometry_.markSourceDirty(); - updateMapItem(); + polishAndUpdate(); } void QDeclarativeCircleMapItem::setMap(QDeclarativeGeoMap *quickMap, QGeoMap *map) { QDeclarativeGeoMapItemBase::setMap(quickMap,map); - if (map) { - geometry_.markSourceDirty(); - borderGeometry_.markSourceDirty(); - updateMapItem(); - } + if (map) + markSourceDirtyAndUpdate(); } /*! @@ -365,10 +361,7 @@ void QDeclarativeCircleMapItem::setCenter(const QGeoCoordinate ¢er) return; center_ = center; - - geometry_.markSourceDirty(); - borderGeometry_.markSourceDirty(); - updateMapItem(); + markSourceDirtyAndUpdate(); emit centerChanged(center_); } @@ -389,7 +382,7 @@ void QDeclarativeCircleMapItem::setColor(const QColor &color) return; color_ = color; dirtyMaterial_ = true; - updateMapItem(); + update(); emit colorChanged(color_); } @@ -411,9 +404,7 @@ void QDeclarativeCircleMapItem::setRadius(qreal radius) return; radius_ = radius; - geometry_.markSourceDirty(); - borderGeometry_.markSourceDirty(); - updateMapItem(); + markSourceDirtyAndUpdate(); emit radiusChanged(radius); } @@ -459,7 +450,7 @@ QSGNode *QDeclarativeCircleMapItem::updateMapItemPaintNode(QSGNode *oldNode, Upd /*! \internal */ -void QDeclarativeCircleMapItem::updateMapItem() +void QDeclarativeCircleMapItem::updatePolish() { if (!map() || !center().isValid()) return; @@ -501,7 +492,6 @@ void QDeclarativeCircleMapItem::updateMapItem() } setPositionOnMap(circlePath_.at(0), geometry_.firstPointOffset()); - update(); } /*! @@ -541,7 +531,7 @@ void QDeclarativeCircleMapItem::afterViewportChanged(const QGeoMapViewportChange geometry_.markScreenDirty(); borderGeometry_.markScreenDirty(); - updateMapItem(); + polishAndUpdate(); } /*! diff --git a/src/imports/location/qdeclarativecirclemapitem_p.h b/src/imports/location/qdeclarativecirclemapitem_p.h index fb786e08..9b142309 100644 --- a/src/imports/location/qdeclarativecirclemapitem_p.h +++ b/src/imports/location/qdeclarativecirclemapitem_p.h @@ -56,8 +56,6 @@ QT_BEGIN_NAMESPACE -class QDeclarativeGeoMapQuickItem; - class QGeoMapCircleGeometry : public QGeoMapPolygonGeometry { public: @@ -101,10 +99,10 @@ Q_SIGNALS: protected: void geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry) Q_DECL_OVERRIDE; + void updatePolish() Q_DECL_OVERRIDE; protected Q_SLOTS: - virtual void updateMapItem() Q_DECL_OVERRIDE; - void updateMapItemAssumeDirty(); + void markSourceDirtyAndUpdate(); virtual void afterViewportChanged(const QGeoMapViewportChangeEvent &event) Q_DECL_OVERRIDE; private: diff --git a/src/imports/location/qdeclarativegeomap.cpp b/src/imports/location/qdeclarativegeomap.cpp index 2b76d318..d9981b69 100644 --- a/src/imports/location/qdeclarativegeomap.cpp +++ b/src/imports/location/qdeclarativegeomap.cpp @@ -1227,6 +1227,10 @@ void QDeclarativeGeoMap::fitViewportToMapItemsRefine(bool refine) continue; } } + // Force map items to update immediately. Needed to ensure correct item size and positions + // when recursively calling this function. + if (item->isPolishScheduled()) + item->updatePolish(); topLeftX = item->position().x(); topLeftY = item->position().y(); diff --git a/src/imports/location/qdeclarativegeomapitembase.cpp b/src/imports/location/qdeclarativegeomapitembase.cpp index e76c11b0..cde00abf 100644 --- a/src/imports/location/qdeclarativegeomapitembase.cpp +++ b/src/imports/location/qdeclarativegeomapitembase.cpp @@ -39,6 +39,7 @@ #include <QtQml/QQmlInfo> #include <QtQuick/QSGOpacityNode> #include <QtQuick/private/qquickmousearea_p.h> +#include <QtQuick/private/qquickitem_p.h> QT_BEGIN_NAMESPACE @@ -248,6 +249,17 @@ QSGNode *QDeclarativeGeoMapItemBase::updateMapItemPaintNode(QSGNode *oldNode, Up return 0; } +bool QDeclarativeGeoMapItemBase::isPolishScheduled() const +{ + return QQuickItemPrivate::get(this)->polishScheduled; +} + +void QDeclarativeGeoMapItemBase::polishAndUpdate() +{ + polish(); + update(); +} + #include "moc_qdeclarativegeomapitembase_p.cpp" diff --git a/src/imports/location/qdeclarativegeomapitembase_p.h b/src/imports/location/qdeclarativegeomapitembase_p.h index d4ad34c5..c7793fbd 100644 --- a/src/imports/location/qdeclarativegeomapitembase_p.h +++ b/src/imports/location/qdeclarativegeomapitembase_p.h @@ -89,13 +89,14 @@ public: virtual QSGNode *updateMapItemPaintNode(QSGNode *, UpdatePaintNodeData *); protected Q_SLOTS: - virtual void updateMapItem() = 0; virtual void afterChildrenChanged(); virtual void afterViewportChanged(const QGeoMapViewportChangeEvent &event) = 0; + void polishAndUpdate(); protected: float zoomLevelOpacity() const; bool childMouseEventFilter(QQuickItem *item, QEvent *event); + bool isPolishScheduled() const; private Q_SLOTS: void baseCameraDataChanged(const QGeoCameraData &camera); @@ -106,6 +107,8 @@ private: QSizeF lastSize_; QGeoCameraData lastCameraData_; + + friend class QDeclarativeGeoMap; }; QT_END_NAMESPACE diff --git a/src/imports/location/qdeclarativegeomapquickitem.cpp b/src/imports/location/qdeclarativegeomapquickitem.cpp index 81f88dac..ca67b183 100644 --- a/src/imports/location/qdeclarativegeomapquickitem.cpp +++ b/src/imports/location/qdeclarativegeomapquickitem.cpp @@ -146,8 +146,7 @@ void QDeclarativeGeoMapQuickItem::setCoordinate(const QGeoCoordinate &coordinate coordinate_ = coordinate; - updateMapItem(); - + polishAndUpdate(); emit coordinateChanged(); } @@ -158,10 +157,11 @@ void QDeclarativeGeoMapQuickItem::setMap(QDeclarativeGeoMap *quickMap, QGeoMap * { QDeclarativeGeoMapItemBase::setMap(quickMap,map); if (map && quickMap) { - QObject::connect(quickMap, SIGNAL(heightChanged()), this, SLOT(updateMapItem())); - QObject::connect(quickMap, SIGNAL(widthChanged()), this, SLOT(updateMapItem())); - QObject::connect(map, SIGNAL(cameraDataChanged(QGeoCameraData)), this, SLOT(updateMapItem())); - updateMapItem(); + connect(quickMap, SIGNAL(heightChanged()), this, SLOT(polishAndUpdate())); + connect(quickMap, SIGNAL(widthChanged()), this, SLOT(polishAndUpdate())); + connect(map, SIGNAL(cameraDataChanged(QGeoCameraData)), + this, SLOT(polishAndUpdate())); + polishAndUpdate(); } } @@ -203,8 +203,7 @@ void QDeclarativeGeoMapQuickItem::setSourceItem(QQuickItem *sourceItem) return; sourceItem_ = sourceItem; - updateMapItem(); - + polishAndUpdate(); emit sourceItemChanged(); } @@ -249,7 +248,7 @@ void QDeclarativeGeoMapQuickItem::setAnchorPoint(const QPointF &anchorPoint) if (anchorPoint == anchorPoint_) return; anchorPoint_ = anchorPoint; - updateMapItem(); + polishAndUpdate(); emit anchorPointChanged(); } @@ -281,7 +280,7 @@ void QDeclarativeGeoMapQuickItem::setZoomLevel(qreal zoomLevel) if (zoomLevel == zoomLevel_) return; zoomLevel_ = zoomLevel; - updateMapItem(); + polishAndUpdate(); emit zoomLevelChanged(); } @@ -293,7 +292,7 @@ qreal QDeclarativeGeoMapQuickItem::zoomLevel() const /*! \internal */ -void QDeclarativeGeoMapQuickItem::updateMapItem() +void QDeclarativeGeoMapQuickItem::updatePolish() { if (!quickMap() && sourceItem_) { mapAndSourceItemSet_ = false; @@ -311,13 +310,13 @@ void QDeclarativeGeoMapQuickItem::updateMapItem() sourceItem_.data()->setParentItem(opacityContainer_); sourceItem_.data()->setTransformOrigin(QQuickItem::TopLeft); connect(sourceItem_.data(), SIGNAL(xChanged()), - this, SLOT(updateMapItem())); + this, SLOT(polishAndUpdate())); connect(sourceItem_.data(), SIGNAL(yChanged()), - this, SLOT(updateMapItem())); + this, SLOT(polishAndUpdate())); connect(sourceItem_.data(), SIGNAL(widthChanged()), - this, SLOT(updateMapItem())); + this, SLOT(polishAndUpdate())); connect(sourceItem_.data(), SIGNAL(heightChanged()), - this, SLOT(updateMapItem())); + this, SLOT(polishAndUpdate())); } QScopedValueRollback<bool> rollback(updatingGeometry_); @@ -330,7 +329,6 @@ void QDeclarativeGeoMapQuickItem::updateMapItem() setWidth(sourceItem_.data()->width()); setHeight(sourceItem_.data()->height()); setPositionOnMap(coordinate(), scaleFactor() * anchorPoint_); - update(); } /*! diff --git a/src/imports/location/qdeclarativegeomapquickitem_p.h b/src/imports/location/qdeclarativegeomapquickitem_p.h index af9f6ec6..0410f060 100644 --- a/src/imports/location/qdeclarativegeomapquickitem_p.h +++ b/src/imports/location/qdeclarativegeomapquickitem_p.h @@ -90,9 +90,9 @@ Q_SIGNALS: protected: void geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry) Q_DECL_OVERRIDE; + void updatePolish() Q_DECL_OVERRIDE; protected Q_SLOTS: - virtual void updateMapItem() Q_DECL_OVERRIDE; virtual void afterChildrenChanged() Q_DECL_OVERRIDE; virtual void afterViewportChanged(const QGeoMapViewportChangeEvent &event) Q_DECL_OVERRIDE; diff --git a/src/imports/location/qdeclarativepolygonmapitem.cpp b/src/imports/location/qdeclarativepolygonmapitem.cpp index 9a71614f..6fdef816 100644 --- a/src/imports/location/qdeclarativepolygonmapitem.cpp +++ b/src/imports/location/qdeclarativepolygonmapitem.cpp @@ -332,7 +332,7 @@ QDeclarativePolygonMapItem::QDeclarativePolygonMapItem(QQuickItem *parent) void QDeclarativePolygonMapItem::handleBorderUpdated() { borderGeometry_.markSourceDirty(); - updateMapItem(); + polishAndUpdate(); } QDeclarativePolygonMapItem::~QDeclarativePolygonMapItem() @@ -367,7 +367,7 @@ void QDeclarativePolygonMapItem::setMap(QDeclarativeGeoMap *quickMap, QGeoMap *m if (map) { geometry_.markSourceDirty(); borderGeometry_.markSourceDirty(); - updateMapItem(); + polishAndUpdate(); } } @@ -423,7 +423,7 @@ void QDeclarativePolygonMapItem::setPath(const QJSValue &value) geometry_.markSourceDirty(); borderGeometry_.markSourceDirty(); - updateMapItem(); + polishAndUpdate(); emit pathChanged(); } @@ -441,7 +441,7 @@ void QDeclarativePolygonMapItem::addCoordinate(const QGeoCoordinate &coordinate) geometry_.markSourceDirty(); borderGeometry_.markSourceDirty(); - updateMapItem(); + polishAndUpdate(); emit pathChanged(); } @@ -465,7 +465,7 @@ void QDeclarativePolygonMapItem::removeCoordinate(const QGeoCoordinate &coordina geometry_.markSourceDirty(); borderGeometry_.markSourceDirty(); - updateMapItem(); + polishAndUpdate(); emit pathChanged(); } @@ -489,7 +489,7 @@ void QDeclarativePolygonMapItem::setColor(const QColor &color) color_ = color; dirtyMaterial_ = true; - updateMapItem(); + update(); emit colorChanged(color_); } @@ -519,7 +519,7 @@ QSGNode *QDeclarativePolygonMapItem::updateMapItemPaintNode(QSGNode *oldNode, Up /*! \internal */ -void QDeclarativePolygonMapItem::updateMapItem() +void QDeclarativePolygonMapItem::updatePolish() { if (!map() || path_.count() == 0) return; @@ -546,7 +546,6 @@ void QDeclarativePolygonMapItem::updateMapItem() setHeight(combined.height()); setPositionOnMap(path_.at(0), -1 * geometry_.sourceBoundingBox().topLeft()); - update(); } /*! @@ -582,7 +581,7 @@ void QDeclarativePolygonMapItem::afterViewportChanged(const QGeoMapViewportChang borderGeometry_.setPreserveGeometry(true, borderGeometry_.geoLeftBound()); geometry_.markScreenDirty(); borderGeometry_.markScreenDirty(); - updateMapItem(); + polishAndUpdate(); } /*! @@ -639,7 +638,7 @@ void QDeclarativePolygonMapItem::geometryChanged(const QRectF &newGeometry, cons borderGeometry_.setPreserveGeometry(true, leftBoundCoord); geometry_.markSourceDirty(); borderGeometry_.markSourceDirty(); - updateMapItem(); + polishAndUpdate(); emit pathChanged(); } diff --git a/src/imports/location/qdeclarativepolygonmapitem_p.h b/src/imports/location/qdeclarativepolygonmapitem_p.h index 86a9ec4c..8b803b1d 100644 --- a/src/imports/location/qdeclarativepolygonmapitem_p.h +++ b/src/imports/location/qdeclarativepolygonmapitem_p.h @@ -111,9 +111,9 @@ Q_SIGNALS: protected: void geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry) Q_DECL_OVERRIDE; + void updatePolish() Q_DECL_OVERRIDE; protected Q_SLOTS: - virtual void updateMapItem() Q_DECL_OVERRIDE; void handleBorderUpdated(); virtual void afterViewportChanged(const QGeoMapViewportChangeEvent &event) Q_DECL_OVERRIDE; diff --git a/src/imports/location/qdeclarativepolylinemapitem.cpp b/src/imports/location/qdeclarativepolylinemapitem.cpp index 9201701c..71a205d3 100644 --- a/src/imports/location/qdeclarativepolylinemapitem.cpp +++ b/src/imports/location/qdeclarativepolylinemapitem.cpp @@ -472,7 +472,7 @@ void QDeclarativePolylineMapItem::updateAfterLinePropertiesChanged() { // mark dirty just in case we're a width change geometry_.markSourceDirty(); - updateMapItem(); + polishAndUpdate(); } /*! @@ -483,7 +483,7 @@ void QDeclarativePolylineMapItem::setMap(QDeclarativeGeoMap *quickMap, QGeoMap * QDeclarativeGeoMapItemBase::setMap(quickMap,map); if (map) { geometry_.markSourceDirty(); - updateMapItem(); + polishAndUpdate(); } } @@ -546,7 +546,7 @@ void QDeclarativePolylineMapItem::setPathFromGeoList(const QList<QGeoCoordinate> path_ = path; geometry_.markSourceDirty(); - updateMapItem(); + polishAndUpdate(); emit pathChanged(); } @@ -563,7 +563,7 @@ void QDeclarativePolylineMapItem::addCoordinate(const QGeoCoordinate &coordinate path_.append(coordinate); geometry_.markSourceDirty(); - updateMapItem(); + polishAndUpdate(); emit pathChanged(); } @@ -586,7 +586,7 @@ void QDeclarativePolylineMapItem::removeCoordinate(const QGeoCoordinate &coordin path_.removeAt(index); geometry_.markSourceDirty(); - updateMapItem(); + polishAndUpdate(); emit pathChanged(); } @@ -652,7 +652,7 @@ void QDeclarativePolylineMapItem::geometryChanged(const QRectF &newGeometry, con + newCoordinate.longitude() - firstLongitude)); geometry_.setPreserveGeometry(true, leftBoundCoord); geometry_.markSourceDirty(); - updateMapItem(); + polishAndUpdate(); emit pathChanged(); } @@ -688,13 +688,13 @@ void QDeclarativePolylineMapItem::afterViewportChanged(const QGeoMapViewportChan } geometry_.setPreserveGeometry(true, geometry_.geoLeftBound()); geometry_.markScreenDirty(); - updateMapItem(); + polishAndUpdate(); } /*! \internal */ -void QDeclarativePolylineMapItem::updateMapItem() +void QDeclarativePolylineMapItem::updatePolish() { if (!map() || path_.count() == 0) return; @@ -709,7 +709,6 @@ void QDeclarativePolylineMapItem::updateMapItem() setHeight(geometry_.sourceBoundingBox().height()); setPositionOnMap(path_.at(0), -1 * geometry_.sourceBoundingBox().topLeft()); - update(); } /*! diff --git a/src/imports/location/qdeclarativepolylinemapitem_p.h b/src/imports/location/qdeclarativepolylinemapitem_p.h index 6eeeb11f..a7b7f167 100644 --- a/src/imports/location/qdeclarativepolylinemapitem_p.h +++ b/src/imports/location/qdeclarativepolylinemapitem_p.h @@ -132,9 +132,9 @@ Q_SIGNALS: protected: void geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry) Q_DECL_OVERRIDE; void setPathFromGeoList(const QList<QGeoCoordinate> &path); + void updatePolish() Q_DECL_OVERRIDE; protected Q_SLOTS: - virtual void updateMapItem() Q_DECL_OVERRIDE; void updateAfterLinePropertiesChanged(); virtual void afterViewportChanged(const QGeoMapViewportChangeEvent &event) Q_DECL_OVERRIDE; diff --git a/src/imports/location/qdeclarativerectanglemapitem.cpp b/src/imports/location/qdeclarativerectanglemapitem.cpp index 2dbb630b..c28bcf3e 100644 --- a/src/imports/location/qdeclarativerectanglemapitem.cpp +++ b/src/imports/location/qdeclarativerectanglemapitem.cpp @@ -177,9 +177,9 @@ QDeclarativeRectangleMapItem::QDeclarativeRectangleMapItem(QQuickItem *parent) { setFlag(ItemHasContents, true); QObject::connect(&border_, SIGNAL(colorChanged(QColor)), - this, SLOT(updateMapItemAssumeDirty())); + this, SLOT(markSourceDirtyAndUpdate())); QObject::connect(&border_, SIGNAL(widthChanged(qreal)), - this, SLOT(updateMapItemAssumeDirty())); + this, SLOT(markSourceDirtyAndUpdate())); } QDeclarativeRectangleMapItem::~QDeclarativeRectangleMapItem() @@ -192,11 +192,8 @@ QDeclarativeRectangleMapItem::~QDeclarativeRectangleMapItem() void QDeclarativeRectangleMapItem::setMap(QDeclarativeGeoMap *quickMap, QGeoMap *map) { QDeclarativeGeoMapItemBase::setMap(quickMap,map); - if (map) { - geometry_.markSourceDirty(); - borderGeometry_.markSourceDirty(); - updateMapItem(); - } + if (map) + markSourceDirtyAndUpdate(); } /*! @@ -229,9 +226,7 @@ void QDeclarativeRectangleMapItem::setTopLeft(const QGeoCoordinate &topLeft) topLeft_ = topLeft; - geometry_.markSourceDirty(); - borderGeometry_.markSourceDirty(); - updateMapItem(); + markSourceDirtyAndUpdate(); emit topLeftChanged(topLeft_); } @@ -243,11 +238,11 @@ QGeoCoordinate QDeclarativeRectangleMapItem::topLeft() /*! \internal */ -void QDeclarativeRectangleMapItem::updateMapItemAssumeDirty() +void QDeclarativeRectangleMapItem::markSourceDirtyAndUpdate() { geometry_.markSourceDirty(); borderGeometry_.markSourceDirty(); - updateMapItem(); + polishAndUpdate(); } /*! @@ -263,9 +258,7 @@ void QDeclarativeRectangleMapItem::setBottomRight(const QGeoCoordinate &bottomRi bottomRight_ = bottomRight; - geometry_.markSourceDirty(); - borderGeometry_.markSourceDirty(); - updateMapItem(); + markSourceDirtyAndUpdate(); emit bottomRightChanged(bottomRight_); } @@ -291,7 +284,7 @@ void QDeclarativeRectangleMapItem::setColor(const QColor &color) return; color_ = color; dirtyMaterial_ = true; - updateMapItem(); + polishAndUpdate(); emit colorChanged(color_); } @@ -333,7 +326,7 @@ QSGNode *QDeclarativeRectangleMapItem::updateMapItemPaintNode(QSGNode *oldNode, /*! \internal */ -void QDeclarativeRectangleMapItem::updateMapItem() +void QDeclarativeRectangleMapItem::updatePolish() { if (!map() || !topLeft().isValid() || !bottomRight().isValid()) return; @@ -368,7 +361,6 @@ void QDeclarativeRectangleMapItem::updateMapItem() } setPositionOnMap(pathClosed.at(0), geometry_.firstPointOffset()); - update(); } /*! @@ -404,7 +396,7 @@ void QDeclarativeRectangleMapItem::afterViewportChanged(const QGeoMapViewportCha borderGeometry_.setPreserveGeometry(true, borderGeometry_.geoLeftBound()); geometry_.markScreenDirty(); borderGeometry_.markScreenDirty(); - updateMapItem(); + polishAndUpdate(); } /*! @@ -448,9 +440,7 @@ void QDeclarativeRectangleMapItem::geometryChanged(const QRectF &newGeometry, co bottomRight_ = newBottomRight; geometry_.setPreserveGeometry(true, newTopLeft); borderGeometry_.setPreserveGeometry(true, newTopLeft); - geometry_.markSourceDirty(); - borderGeometry_.markSourceDirty(); - updateMapItem(); + markSourceDirtyAndUpdate(); emit topLeftChanged(topLeft_); emit bottomRightChanged(bottomRight_); } diff --git a/src/imports/location/qdeclarativerectanglemapitem_p.h b/src/imports/location/qdeclarativerectanglemapitem_p.h index d4c319ab..fb9936b0 100644 --- a/src/imports/location/qdeclarativerectanglemapitem_p.h +++ b/src/imports/location/qdeclarativerectanglemapitem_p.h @@ -105,10 +105,10 @@ Q_SIGNALS: protected: void geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry) Q_DECL_OVERRIDE; + void updatePolish() Q_DECL_OVERRIDE; protected Q_SLOTS: - virtual void updateMapItem() Q_DECL_OVERRIDE; - void updateMapItemAssumeDirty(); + void markSourceDirtyAndUpdate(); virtual void afterViewportChanged(const QGeoMapViewportChangeEvent &event) Q_DECL_OVERRIDE; private: diff --git a/tests/auto/declarative_ui/tst_map_error.qml b/tests/auto/declarative_ui/tst_map_error.qml index aaa58e6c..c102db6e 100644 --- a/tests/auto/declarative_ui/tst_map_error.qml +++ b/tests/auto/declarative_ui/tst_map_error.qml @@ -100,7 +100,7 @@ Item { mouseClick(map, 50, 50) mouseClick(map, 50, 50) mouseClick(map, 50, 50) - compare(map.mouseClickedSpy.count, 3) + tryCompare(map.mouseClickedSpy, "count", 3) } function test_map_clicked_wiht_no_plugin() diff --git a/tests/auto/declarative_ui/tst_map_flick.qml b/tests/auto/declarative_ui/tst_map_flick.qml index 4094a7c7..e225480d 100644 --- a/tests/auto/declarative_ui/tst_map_flick.qml +++ b/tests/auto/declarative_ui/tst_map_flick.qml @@ -288,6 +288,7 @@ Item { { map.center.latitude = 50 map.center.longitude = 50 + waitForRendering(map) mousePress(page, 0, 0) for (var i = 0; i < 50; i += 5) { wait(20) diff --git a/tests/auto/declarative_ui/tst_map_item.qml b/tests/auto/declarative_ui/tst_map_item.qml index 32de8efd..5be8896f 100644 --- a/tests/auto/declarative_ui/tst_map_item.qml +++ b/tests/auto/declarative_ui/tst_map_item.qml @@ -257,37 +257,40 @@ Item { map.center = preMapRect.topLeft var point = map.fromCoordinate(preMapRect.topLeft) mouseClick(map, point.x + 5, point.y + 5) - compare(preMapRectClicked.count, 1) + tryCompare(preMapRectClicked, "count", 1) mouseClick(map, 1, 1) // no item hit - compare(preMapRectClicked.count, 1) + tryCompare(preMapRectClicked, "count", 1) compare(preMapCircleClicked.count, 0) // click circle, overlaps and is above rect map.center = preMapCircle.center + verify(waitForRendering(map)) point = map.fromCoordinate(preMapCircle.center) mouseClick(map, point.x - 5, point.y - 5) - compare(preMapRectClicked.count, 1) + tryCompare(preMapRectClicked, "count", 1) compare(preMapCircleClicked.count, 1) // click within circle bounding rect but not inside the circle geometry map.center = preMapCircle.center.atDistanceAndAzimuth(preMapCircle.radius, -45) mouseClick(map, preMapCircle.x + 4, preMapCircle.y + 4) - compare(preMapRectClicked.count, 2) + tryCompare(preMapRectClicked, "count", 2) compare(preMapCircleClicked.count, 1) // click quick item compare(preMapQuickItemClicked.count, 0) map.center = preMapQuickItem.coordinate + verify(waitForRendering(map)) point = map.fromCoordinate(preMapQuickItem.coordinate) mouseClick(map, point.x + 5, point.y + 5) - compare(preMapQuickItemClicked.count, 1) + tryCompare(preMapQuickItemClicked, "count", 1) // click polygon compare (preMapPolygonClicked.count, 0) map.center = preMapPolygon.path[1] + verify(waitForRendering(map)) point = map.fromCoordinate(preMapPolygon.path[1]) mouseClick(map, point.x - 5, point.y) - compare(preMapPolygonClicked.count, 1) + tryCompare(preMapPolygonClicked, "count", 1) // remove items and repeat clicks to verify they are gone map.clearMapItems() @@ -328,48 +331,54 @@ Item { compare (map.mapItems.length, 6) visualInspectionPoint() map.center = preMapRect.topLeft + verify(waitForRendering(map)) point = map.fromCoordinate(preMapRect.topLeft) mouseClick(map, point.x + 5, point.y + 5) - compare(preMapRectClicked.count, 1) + tryCompare(preMapRectClicked, "count", 1) map.center = preMapCircle.center + verify(waitForRendering(map)) point = map.fromCoordinate(preMapCircle.center) mouseClick(map, point.x - 5, point.y - 5) - compare(preMapRectClicked.count, 1) + tryCompare(preMapRectClicked, "count", 1) compare(preMapCircleClicked.count, 1) map.center = preMapCircle.center.atDistanceAndAzimuth(preMapCircle.radius, -45) mouseClick(map, preMapCircle.x + 4, preMapCircle.y + 4) - compare(preMapRectClicked.count, 2) + tryCompare(preMapRectClicked, "count", 2) compare(preMapCircleClicked.count, 1) compare(preMapQuickItemClicked.count, 0) map.center = preMapQuickItem.coordinate + verify(waitForRendering(map)) point = map.fromCoordinate(preMapQuickItem.coordinate) mouseClick(map, point.x + 5, point.y + 5) - compare(preMapQuickItemClicked.count, 1) + tryCompare(preMapQuickItemClicked, "count", 1) map.center = preMapPolygon.path[1] + verify(waitForRendering(map)) point = map.fromCoordinate(preMapPolygon.path[1]) mouseClick(map, point.x - 5, point.y) - compare(preMapPolygonClicked.count, 1) + tryCompare(preMapPolygonClicked, "count", 1) // item clips to map. not sure if this is sensible test map.addMapItem(extMapCircle) map.center = extMapCircle.center + verify(waitForRendering(map)) visualInspectionPoint(); point = map.fromCoordinate(extMapCircle.center) mouseClick(map, point.x, point.y) - compare(extMapCircleClicked.count, 1) + tryCompare(extMapCircleClicked, "count", 1) mouseClick(map, point.x, -5) - compare(extMapCircleClicked.count, 1) + tryCompare(extMapCircleClicked, "count", 1) map.removeMapItem(extMapCircle) map.addMapItem(extMapQuickItem) map.center = extMapQuickItem.coordinate + verify(waitForRendering(map)) visualInspectionPoint(); point = map.fromCoordinate(extMapQuickItem.coordinate) mouseClick(map, point.x + 5, point.y + 5) - compare(extMapQuickItemClicked.count, 1) + tryCompare(extMapQuickItemClicked, "count", 1) mouseClick(map, map.width + 5, point.y + 5) - compare(extMapQuickItemClicked.count, 1) + tryCompare(extMapQuickItemClicked, "count", 1) map.removeMapItem(extMapQuickItem) } @@ -378,6 +387,8 @@ Item { // basic drags, drag rectangle compare (preMapRectActiveChanged.count, 0) map.center = preMapRect.topLeft + verify(waitForRendering(map)) + var i var point = map.fromCoordinate(preMapRect.topLeft) var targetCoordinate = map.toCoordinate(51, 51) @@ -400,6 +411,7 @@ Item { // drag circle compare (preMapCircleActiveChanged.count, 0) map.center = preMapCircle.center + verify(waitForRendering(map)) point = map.fromCoordinate(preMapCircle.center) targetCoordinate = map.toCoordinate(51, 51) mousePress(map, point.x, point.y) @@ -418,6 +430,7 @@ Item { // drag quick item compare (preMapQuickItemActiveChanged.count, 0) map.center = preMapQuickItem.coordinate + verify(waitForRendering(map)) point = map.fromCoordinate(preMapQuickItem.coordinate) targetCoordinate = map.toCoordinate(51, 51) mousePress(map, point.x + 5, point.y + 5) diff --git a/tests/auto/declarative_ui/tst_map_item_details.qml b/tests/auto/declarative_ui/tst_map_item_details.qml index b4468301..20849079 100644 --- a/tests/auto/declarative_ui/tst_map_item_details.qml +++ b/tests/auto/declarative_ui/tst_map_item_details.qml @@ -41,7 +41,11 @@ Item { x: 0; y: 0; width: 240 height: 240 - Plugin { id: testPlugin; name : "qmlgeo.test.plugin"; allowExperimental: true } + Plugin { id: testPlugin + name : "qmlgeo.test.plugin" + allowExperimental: true + parameters: [ PluginParameter { name: "finishRequestImmediately"; value: true}] + } property variant mapDefaultCenter: QtPositioning.coordinate(20, 20) @@ -327,8 +331,9 @@ Item { verify(extMapPolygon0.path.length == 0) extMapPolygon.addCoordinate(polyCoordinate) verify(extMapPolygon.path.length == 3) + verify(waitForRendering(map)) mouseClick(map, point.x - 5, point.y) - compare(extMapPolygonClicked.count, 1) + tryCompare(extMapPolygonClicked, "count", 1) extMapPolygon.path[0].latitude = 10 verify(extMapPolygon.path[0].latitude, 10) @@ -427,6 +432,7 @@ Item { verify(point.x > map.width / 2.0) // move item edge onto dateline extMapRectDateline.topLeft.longitude = datelineCoordinate.longitude + verify(waitForRendering(map)) point = map.fromCoordinate(extMapRectDateline.topLeft) verify(point.x == map.width / 2.0) // drag item back onto dateline @@ -450,6 +456,7 @@ Item { point = map.fromCoordinate(extMapCircleDateline.center) verify(point.x == map.width / 2.0) extMapCircleDateline.center.longitude = datelineCoordinateRight.longitude + verify(waitForRendering(map)) point = map.fromCoordinate(extMapCircleDateline.center) verify(point.x > map.width / 2.0) mousePress(map, point.x, point.y) @@ -469,6 +476,7 @@ Item { point = map.fromCoordinate(extMapQuickItemDateline.coordinate) verify(point.x < map.width / 2.0) extMapQuickItemDateline.coordinate.longitude = datelineCoordinateRight.longitude + verify(waitForRendering(map)) point = map.fromCoordinate(extMapQuickItemDateline.coordinate) verify(point.x > map.width / 2.0) mousePress(map, point.x + 5, point.y + 5) @@ -510,6 +518,7 @@ Item { path = extMapPolygonDateline.path; path[3].longitude = datelineCoordinate.longitude; extMapPolygonDateline.path = path; + verify(waitForRendering(map)) point = map.fromCoordinate(extMapPolygonDateline.path[3]) verify(point.x == map.width / 2.0) mousePress(map, point.x + 5, point.y - 5) @@ -518,6 +527,7 @@ Item { mouseMove(map, point.x + 5 - i, point.y - 5 ) } mouseRelease(map, point.x + 5 - i, point.y - 5) + verify(waitForRendering(map,10000)) point = map.fromCoordinate(extMapPolygonDateline.path[0]) verify(point.x < map.width / 2.0) point = map.fromCoordinate(extMapPolygonDateline.path[1]) @@ -596,6 +606,7 @@ Item { // rectangle map.addMapItem(extMapRectEdge) + verify(waitForRendering(map)) verify(extMapRectEdge.topLeft.longitude == -15) verify(extMapRectEdge.bottomRight.longitude == -5) var point = map.fromCoordinate(extMapRectEdge.topLeft) @@ -650,6 +661,7 @@ Item { // quickitem map.addMapItem(extMapQuickItemEdge) map.center = datelineCoordinate + verify(waitForRendering(map)) verify(extMapQuickItemEdge.coordinate.longitude == -15) point = map.fromCoordinate(extMapQuickItemEdge.coordinate) verify(point.x < map.width) @@ -671,6 +683,7 @@ Item { // polygon map.center = datelineCoordinate map.addMapItem(extMapPolygonEdge) + verify(waitForRendering(map)) verify(extMapPolygonEdge.path[0].longitude == -15) verify(extMapPolygonEdge.path[1].longitude == -5) verify(extMapPolygonEdge.path[2].longitude == -5) diff --git a/tests/auto/declarative_ui/tst_map_item_fit_viewport.qml b/tests/auto/declarative_ui/tst_map_item_fit_viewport.qml index 8671d05d..b3ac1d8f 100644 --- a/tests/auto/declarative_ui/tst_map_item_fit_viewport.qml +++ b/tests/auto/declarative_ui/tst_map_item_fit_viewport.qml @@ -240,6 +240,7 @@ Item { // normal case - fit viewport to items which are all already visible verify_visibility_all_items() map.fitViewportToMapItems() + verify(waitForRendering(map)) visualInspectionPoint() verify_visibility_all_items() } @@ -577,6 +578,7 @@ Item { map.addMapItem(preMapPolygon) map.addMapItem(preMapPolyline) map.addMapItem(preMapRoute) + verify(waitForRendering(map)) compare (map.mapItems.length, 6) calculate_bounds() } diff --git a/tests/auto/declarative_ui/tst_map_mouse.qml b/tests/auto/declarative_ui/tst_map_mouse.qml index fe02f81d..57cde142 100644 --- a/tests/auto/declarative_ui/tst_map_mouse.qml +++ b/tests/auto/declarative_ui/tst_map_mouse.qml @@ -267,25 +267,25 @@ Item { compare(mouseUpperClickedSpy.count, 0) mouseUpper.enabled = true mouseClick(map, 5, 25) - compare(mouseUpperClickedSpy.count, 1) + tryCompare(mouseUpperClickedSpy, "count", 1) compare(mouseUpperEnabledChangedSpy.count, 2) // when overlapping are is disabled, the event should flow through compare(mouseOverlapperClickedSpy.count, 0) mouseClick(map, 55, 25) - compare(mouseUpperClickedSpy.count, 1) + tryCompare(mouseUpperClickedSpy, "count", 1) compare(mouseOverlapperClickedSpy.count, 1) mouseOverlapper.enabled = false compare(mouseOverlapperEnabledChangedSpy.count, 1) compare(mouseOverlapper.enabled, false) mouseClick(map, 55, 25) - compare(mouseOverlapperClickedSpy.count, 1) + tryCompare(mouseOverlapperClickedSpy, "count", 1) compare(mouseUpperClickedSpy.count, 2) // re-enable and verify that still works mouseOverlapper.enabled = true compare(mouseOverlapperEnabledChangedSpy.count, 2) compare(mouseOverlapper.enabled, true) mouseClick(map, 55, 25) - compare(mouseOverlapperClickedSpy.count, 2) // should consume again + tryCompare(mouseOverlapperClickedSpy, "count", 2) // should consume again compare(mouseUpperClickedSpy.count, 2) } @@ -338,7 +338,7 @@ Item { mouseUpper.acceptedButtons = Qt.LeftButton compare(mouseUpperAcceptedButtonsChangedSpy.count, 2) mouseClick(map, 5, 25) - compare(mouseUpperClickedSpy.count, 1) + tryCompare(mouseUpperClickedSpy, "count", 1) } function test_basic_position_changed() { @@ -574,40 +574,40 @@ Item { // mouse click with unaccepted buttons should not cause click mouseUpper.acceptedButtons = Qt.LeftButton mouseClick(map, 5, 25, Qt.RightButton, Qt.AltModifier) - compare(mouseUpperClickedSpy.count, 1) + tryCompare(mouseUpperClickedSpy, "count", 1) compare(mouseLowerClickedSpy.count, 0) compare(mouseOverlapperClickedSpy.count, 0) mouseClick(map, 5, 25) - compare(mouseUpperClickedSpy.count, 2) + tryCompare(mouseUpperClickedSpy, "count", 2) compare(mouseLowerClickedSpy.count, 0) compare(mouseOverlapperClickedSpy.count, 0) compare(mouseUpper.lastModifiers, Qt.NoModifier) compare(mouseUpper.lastButton, Qt.LeftButton) mouseClick(map, 5, 55) - compare(mouseUpperClickedSpy.count, 2) + tryCompare(mouseUpperClickedSpy, "count", 2) compare(mouseLowerClickedSpy.count, 1) compare(mouseOverlapperClickedSpy.count, 0) mouseClick(map, 5, 55) - compare(mouseUpperClickedSpy.count, 2) + tryCompare(mouseUpperClickedSpy,"count", 2) compare(mouseLowerClickedSpy.count, 2) compare(mouseOverlapperClickedSpy.count, 0) // declaration order counts on overlap case; overlapping area // declared later will get the events mouseClick(map, 55, 25) - compare(mouseUpperClickedSpy.count, 2) + tryCompare(mouseUpperClickedSpy, "count", 2) compare(mouseLowerClickedSpy.count, 2) compare(mouseOverlapperClickedSpy.count, 1) mouseClick(map, 55, 75) - compare(mouseUpperClickedSpy.count, 2) + tryCompare(mouseUpperClickedSpy, "count", 2) compare(mouseLowerClickedSpy.count, 2) compare(mouseOverlapperClickedSpy.count, 2) real_click(map, 55, 25) - compare(mouseUpperClickedSpy.count, 2) + tryCompare(mouseUpperClickedSpy, "count", 2) compare(mouseLowerClickedSpy.count, 2) compare(mouseOverlapperClickedSpy.count, 3) real_click(map, 55, 75) - compare(mouseUpperClickedSpy.count, 2) + tryCompare(mouseUpperClickedSpy, "count", 2) compare(mouseLowerClickedSpy.count, 2) compare(mouseOverlapperClickedSpy.count, 4) } @@ -621,7 +621,7 @@ Item { compare(mouseLowerDoubleClickedSpy.count, 0) compare(mouseOverlapperDoubleClickedSpy.count, 0) real_double_click(map, 5, 25) - compare(mouseUpper.lastAccepted, true) + tryCompare(mouseUpper, "lastAccepted", true) compare(mouseUpper.lastButton, Qt.LeftButton) compare(mouseUpper.lastModifiers, Qt.NoModifier) compare(mouseUpper.lastWasHeld, false) @@ -632,26 +632,26 @@ Item { compare(mouseLowerDoubleClickedSpy.count, 0) compare(mouseOverlapperDoubleClickedSpy.count, 0) real_double_click(map, 5, 25) - compare(mouseUpperDoubleClickedSpy.count, 2) + tryCompare(mouseUpperDoubleClickedSpy, "count", 2) compare(mouseLowerDoubleClickedSpy.count, 0) compare(mouseOverlapperDoubleClickedSpy.count, 0) real_double_click(map, 5, 55) - compare(mouseUpperDoubleClickedSpy.count, 2) + tryCompare(mouseUpperDoubleClickedSpy, "count", 2) compare(mouseLowerDoubleClickedSpy.count, 1) compare(mouseOverlapperDoubleClickedSpy.count, 0) real_double_click(map, 5, 55) - compare(mouseUpperDoubleClickedSpy.count, 2) + tryCompare(mouseUpperDoubleClickedSpy, "count", 2) compare(mouseLowerDoubleClickedSpy.count, 2) compare(mouseOverlapperDoubleClickedSpy.count, 0) // declaration order counts on overlap case; overlapping area declared later will get the events real_double_click(map, 55, 25) - compare(mouseUpperDoubleClickedSpy.count, 2) + tryCompare(mouseUpperDoubleClickedSpy, "count", 2) compare(mouseLowerDoubleClickedSpy.count, 2) compare(mouseOverlapperDoubleClickedSpy.count, 1) compare(mouseOverlapperPressedSpy.count, 2) compare(mouseOverlapperReleasedSpy.count, 2) real_double_click(map, 55, 75) - compare(mouseUpperDoubleClickedSpy.count, 2) + tryCompare(mouseUpperDoubleClickedSpy, "count", 2) compare(mouseLowerDoubleClickedSpy.count, 2) compare(mouseOverlapperDoubleClickedSpy.count, 2) compare(mouseOverlapperPressedSpy.count, 4) @@ -659,20 +659,20 @@ Item { // disable overlapping area and check event is delivered to the ones beneath mouseOverlapper.enabled = false real_double_click(map, 55, 25) - compare(mouseUpperDoubleClickedSpy.count, 3) + tryCompare(mouseUpperDoubleClickedSpy, "count", 3) compare(mouseLowerDoubleClickedSpy.count, 2) compare(mouseOverlapperDoubleClickedSpy.count, 2) real_double_click(map, 55, 75) - compare(mouseUpperDoubleClickedSpy.count, 3) + tryCompare(mouseUpperDoubleClickedSpy, "count", 3) compare(mouseLowerDoubleClickedSpy.count, 3) compare(mouseOverlapperDoubleClickedSpy.count, 2) mouseOverlapper.enabled = true real_double_click(map, 55, 25) - compare(mouseUpperDoubleClickedSpy.count, 3) + tryCompare(mouseUpperDoubleClickedSpy, "count", 3) compare(mouseLowerDoubleClickedSpy.count, 3) compare(mouseOverlapperDoubleClickedSpy.count, 3) real_double_click(map, 55, 75) - compare(mouseUpperDoubleClickedSpy.count, 3) + tryCompare(mouseUpperDoubleClickedSpy, "count", 3) compare(mouseLowerDoubleClickedSpy.count, 3) compare(mouseOverlapperDoubleClickedSpy.count, 4) } @@ -698,11 +698,11 @@ Item { compare(mouseUpper.lastY, 5) // remember 20 offset of the mouse area mouseRelease(map,5,25) real_press_and_hold(map, 5, 55) - compare(mouseUpperPressAndHoldSpy.count, 1) + tryCompare(mouseUpperPressAndHoldSpy, "count", 1) compare(mouseLowerPressAndHoldSpy.count, 1) compare(mouseOverlapperPressAndHoldSpy.count, 0) real_press_and_hold(map, 55, 75) - compare(mouseUpperPressAndHoldSpy.count, 1) + tryCompare(mouseUpperPressAndHoldSpy, "count", 1) compare(mouseLowerPressAndHoldSpy.count, 1) compare(mouseOverlapperPressAndHoldSpy.count, 1) compare(mouseOverlapper.lastAccepted, true) @@ -713,14 +713,14 @@ Item { compare(mouseOverlapper.lastY, 75) // make sure that the wasHeld is cleared mouseClick(map, 55, 75) - compare(mouseOverlapper.lastAccepted, true) + tryCompare(mouseOverlapper, "lastAccepted", true) compare(mouseOverlapper.lastButton, Qt.LeftButton) compare(mouseOverlapper.lastModifiers, Qt.NoModifier) compare(mouseOverlapper.lastWasHeld, false) compare(mouseOverlapper.lastX, 5) compare(mouseOverlapper.lastY, 75) real_press_and_hold(map, 55, 25) - compare(mouseUpperPressAndHoldSpy.count, 1) + tryCompare(mouseUpperPressAndHoldSpy, "count", 1) compare(mouseLowerPressAndHoldSpy.count, 1) compare(mouseOverlapperPressAndHoldSpy.count, 2) } |