diff options
Diffstat (limited to 'src/location/labs/qsg')
-rw-r--r-- | src/location/labs/qsg/qgeomapobjectqsgsupport.cpp | 6 | ||||
-rw-r--r-- | src/location/labs/qsg/qmapcircleobjectqsg.cpp | 24 | ||||
-rw-r--r-- | src/location/labs/qsg/qmapiconobjectqsg.cpp | 12 | ||||
-rw-r--r-- | src/location/labs/qsg/qmapiconobjectqsg_p_p.h | 2 | ||||
-rw-r--r-- | src/location/labs/qsg/qmappolygonobjectqsg.cpp | 66 | ||||
-rw-r--r-- | src/location/labs/qsg/qmappolygonobjectqsg_p_p.h | 14 | ||||
-rw-r--r-- | src/location/labs/qsg/qmappolylineobjectqsg.cpp | 36 | ||||
-rw-r--r-- | src/location/labs/qsg/qmappolylineobjectqsg_p_p.h | 12 | ||||
-rw-r--r-- | src/location/labs/qsg/qmaprouteobjectqsg.cpp | 5 | ||||
-rw-r--r-- | src/location/labs/qsg/qmaprouteobjectqsg_p_p.h | 1 |
10 files changed, 88 insertions, 90 deletions
diff --git a/src/location/labs/qsg/qgeomapobjectqsgsupport.cpp b/src/location/labs/qsg/qgeomapobjectqsgsupport.cpp index e0e3a6d7..1a1b102b 100644 --- a/src/location/labs/qsg/qgeomapobjectqsgsupport.cpp +++ b/src/location/labs/qsg/qgeomapobjectqsgsupport.cpp @@ -126,7 +126,11 @@ QGeoMapObjectPrivate *QGeoMapObjectQSGSupport::createMapObjectImplementationPriv QList<QGeoMapObject *> QGeoMapObjectQSGSupport::mapObjects() const { - return QList<QGeoMapObject *>(); + QList<QGeoMapObject *> res; + for (int i = 0; i < m_mapObjects.size(); ++i) { + res.append(m_mapObjects.at(i).object.data()); + } + return res; } void QGeoMapObjectQSGSupport::removeMapObject(QGeoMapObject *obj) diff --git a/src/location/labs/qsg/qmapcircleobjectqsg.cpp b/src/location/labs/qsg/qmapcircleobjectqsg.cpp index 775016b9..32f3030b 100644 --- a/src/location/labs/qsg/qmapcircleobjectqsg.cpp +++ b/src/location/labs/qsg/qmapcircleobjectqsg.cpp @@ -50,12 +50,10 @@ QMapCircleObjectPrivateQSG::QMapCircleObjectPrivateQSG(const QMapCircleObjectPri : QMapCircleObjectPrivateDefault(other) { // Data already cloned by the *Default copy constructor, but necessary - // update operations triggered by setters overrides - setCenter(center()); - setRadius(radius()); - setColor(color()); - setBorderColor(borderColor()); - setBorderWidth(borderWidth()); + // update operations triggered only by setters overrides + updateGeometry(); + if (m_map) + emit m_map->sgNodeChanged(); } QMapCircleObjectPrivateQSG::~QMapCircleObjectPrivateQSG() @@ -77,7 +75,7 @@ void QMapCircleObjectPrivateQSG::updateCirclePath() void QMapCircleObjectPrivateQSG::updateGeometry() { if (!m_map || m_map->geoProjection().projectionType() != QGeoProjection::ProjectionWebMercator - || !qIsFinite(m_radius) || !m_center.isValid()) + || !qIsFinite(radius()) || !center().isValid()) return; const QGeoProjectionWebMercator &p = static_cast<const QGeoProjectionWebMercator&>(m_map->geoProjection()); @@ -153,7 +151,7 @@ QSGNode *QMapCircleObjectPrivateQSG::updateMapObjectNode(QSGNode *oldNode, QSGNode *root, QQuickWindow * /*window*/) { -// Q_UNUSED(visibleNode) // coz of -Werror=unused-but-set-parameter +// Q_UNUSED(visibleNode); // coz of -Werror=unused-but-set-parameter MapPolygonNode *node = static_cast<MapPolygonNode *>(oldNode); bool created = false; @@ -182,7 +180,7 @@ QSGNode *QMapCircleObjectPrivateQSG::updateMapObjectNode(QSGNode *oldNode, void QMapCircleObjectPrivateQSG::setCenter(const QGeoCoordinate ¢er) { - m_center = center; + QMapCircleObjectPrivateDefault::setCenter(center); updateGeometry(); if (m_map) emit m_map->sgNodeChanged(); @@ -190,7 +188,7 @@ void QMapCircleObjectPrivateQSG::setCenter(const QGeoCoordinate ¢er) void QMapCircleObjectPrivateQSG::setRadius(qreal radius) { - m_radius = radius; + QMapCircleObjectPrivateDefault::setRadius(radius); updateGeometry(); if (m_map) emit m_map->sgNodeChanged(); @@ -198,7 +196,7 @@ void QMapCircleObjectPrivateQSG::setRadius(qreal radius) void QMapCircleObjectPrivateQSG::setColor(const QColor &color) { - m_fillColor = color; + QMapCircleObjectPrivateDefault::setColor(color); updateGeometry(); if (m_map) emit m_map->sgNodeChanged(); @@ -206,7 +204,7 @@ void QMapCircleObjectPrivateQSG::setColor(const QColor &color) void QMapCircleObjectPrivateQSG::setBorderColor(const QColor &color) { - m_borderColor = color; + QMapCircleObjectPrivateDefault::setBorderColor(color); updateGeometry(); if (m_map) emit m_map->sgNodeChanged(); @@ -214,7 +212,7 @@ void QMapCircleObjectPrivateQSG::setBorderColor(const QColor &color) void QMapCircleObjectPrivateQSG::setBorderWidth(qreal width) { - m_borderWidth = width; + QMapCircleObjectPrivateDefault::setBorderWidth(width); updateGeometry(); if (m_map) emit m_map->sgNodeChanged(); diff --git a/src/location/labs/qsg/qmapiconobjectqsg.cpp b/src/location/labs/qsg/qmapiconobjectqsg.cpp index 47c39695..d9a80c91 100644 --- a/src/location/labs/qsg/qmapiconobjectqsg.cpp +++ b/src/location/labs/qsg/qmapiconobjectqsg.cpp @@ -67,8 +67,10 @@ QMapIconObjectPrivateQSG::QMapIconObjectPrivateQSG(QGeoMapObject *q) QMapIconObjectPrivateQSG::QMapIconObjectPrivateQSG(const QMapIconObjectPrivate &other) : QMapIconObjectPrivateDefault(other) { + // Data already cloned by the *Default copy constructor, but necessary + // update operations triggered only by setters overrides setContent(content()); - setCoordinate(coordinate()); +// setCoordinate(coordinate()); } QMapIconObjectPrivateQSG::~QMapIconObjectPrivateQSG() @@ -99,7 +101,7 @@ QSGNode *QMapIconObjectPrivateQSG::updateMapObjectNode(QSGNode *oldNode, QSGNode *root, QQuickWindow *window) { - Q_UNUSED(visibleNode) + Q_UNUSED(visibleNode); bool created = false; RootNode *node = static_cast<RootNode *>(oldNode); if (!node) { @@ -116,7 +118,7 @@ QSGNode *QMapIconObjectPrivateQSG::updateMapObjectNode(QSGNode *oldNode, m_imageNode->setTexture(window->createTextureFromImage(m_image)); QRect rect = m_image.rect(); m_imageNode->setSourceRect(rect); - m_imageNode->setRect(QRectF(QPointF(0,0), m_size)); + m_imageNode->setRect(QRectF(QPointF(0,0), iconSize())); } if (m_geometryDirty) { @@ -211,9 +213,9 @@ void QMapIconObjectPrivateQSG::setContent(const QVariant &content) emit m_map->sgNodeChanged(); } -void QMapIconObjectPrivateQSG::setSize(const QSizeF &size) +void QMapIconObjectPrivateQSG::setIconSize(const QSizeF &size) { - QMapIconObjectPrivateDefault::setSize(size); + QMapIconObjectPrivateDefault::setIconSize(size); updateGeometry(); } diff --git a/src/location/labs/qsg/qmapiconobjectqsg_p_p.h b/src/location/labs/qsg/qmapiconobjectqsg_p_p.h index c57828af..abc2fe9b 100644 --- a/src/location/labs/qsg/qmapiconobjectqsg_p_p.h +++ b/src/location/labs/qsg/qmapiconobjectqsg_p_p.h @@ -77,7 +77,7 @@ public: // QGeoMapIconPrivate interface void setCoordinate(const QGeoCoordinate &coordinate) override; void setContent(const QVariant &content) override; - void setSize(const QSizeF &size) override; + void setIconSize(const QSizeF &size) override; // QGeoMapObjectPrivate QGeoMapObjectPrivate *clone() override; diff --git a/src/location/labs/qsg/qmappolygonobjectqsg.cpp b/src/location/labs/qsg/qmappolygonobjectqsg.cpp index 99a84ec5..9963cac9 100644 --- a/src/location/labs/qsg/qmappolygonobjectqsg.cpp +++ b/src/location/labs/qsg/qmappolygonobjectqsg.cpp @@ -37,22 +37,24 @@ #include "qmappolygonobjectqsg_p_p.h" #include <QtQuick/qsgnode.h> #include <QtQuick/qsgsimplerectnode.h> +#include <QtPositioning/private/qgeopolygon_p.h> QT_BEGIN_NAMESPACE QMapPolygonObjectPrivateQSG::QMapPolygonObjectPrivateQSG(QGeoMapObject *q) - : QMapPolygonObjectPrivate(q) + : QMapPolygonObjectPrivateDefault(q) { } QMapPolygonObjectPrivateQSG::QMapPolygonObjectPrivateQSG(const QMapPolygonObjectPrivate &other) - : QMapPolygonObjectPrivate(other.q) + : QMapPolygonObjectPrivateDefault(other) { - setPath(other.path()); - setFillColor(other.fillColor()); - setBorderColor(other.borderColor()); - setBorderWidth(other.borderWidth()); + // Data already cloned by the *Default copy constructor, but necessary + // update operations triggered only by setters overrides + updateGeometry(); + if (m_map) + emit m_map->sgNodeChanged(); } QMapPolygonObjectPrivateQSG::~QMapPolygonObjectPrivateQSG() @@ -69,8 +71,8 @@ QList<QDoubleVector2D> QMapPolygonObjectPrivateQSG::projectPath() const QGeoProjectionWebMercator &p = static_cast<const QGeoProjectionWebMercator&>(m_map->geoProjection()); - geopathProjected_.reserve(m_geoPath.path().size()); - for (const QGeoCoordinate &c : m_geoPath.path()) + geopathProjected_.reserve(m_path.path().size()); + for (const QGeoCoordinate &c : m_path.path()) geopathProjected_ << p.geoToMapProjection(c); return geopathProjected_; } @@ -80,7 +82,7 @@ QSGNode *QMapPolygonObjectPrivateQSG::updateMapObjectNode(QSGNode *oldNode, QSGNode *root, QQuickWindow * /*window*/) { - Q_UNUSED(visibleNode) + Q_UNUSED(visibleNode); MapPolygonNode *node = static_cast<MapPolygonNode *>(oldNode); bool created = false; @@ -107,29 +109,9 @@ QSGNode *QMapPolygonObjectPrivateQSG::updateMapObjectNode(QSGNode *oldNode, return node; } -QList<QGeoCoordinate> QMapPolygonObjectPrivateQSG::path() const -{ - return m_geoPath.path(); -} - -QColor QMapPolygonObjectPrivateQSG::fillColor() const -{ - return m_fillColor; -} - -QColor QMapPolygonObjectPrivateQSG::borderColor() const -{ - return m_borderColor; -} - -qreal QMapPolygonObjectPrivateQSG::borderWidth() const -{ - return m_borderWidth; -} - void QMapPolygonObjectPrivateQSG::setPath(const QList<QGeoCoordinate> &path) { - m_geoPath.setPath(path); + QMapPolygonObjectPrivateDefault::setPath(path); updateGeometry(); if (m_map) @@ -138,7 +120,7 @@ void QMapPolygonObjectPrivateQSG::setPath(const QList<QGeoCoordinate> &path) void QMapPolygonObjectPrivateQSG::setFillColor(const QColor &color) { - m_fillColor = color; + QMapPolygonObjectPrivateDefault::setFillColor(color); updateGeometry(); if (m_map) @@ -147,7 +129,7 @@ void QMapPolygonObjectPrivateQSG::setFillColor(const QColor &color) void QMapPolygonObjectPrivateQSG::setBorderColor(const QColor &color) { - m_borderColor = color; + QMapPolygonObjectPrivateDefault::setBorderColor(color); updateGeometry(); if (m_map) @@ -156,7 +138,7 @@ void QMapPolygonObjectPrivateQSG::setBorderColor(const QColor &color) void QMapPolygonObjectPrivateQSG::setBorderWidth(qreal width) { - m_borderWidth = width; + QMapPolygonObjectPrivateDefault::setBorderWidth(width); updateGeometry(); if (m_map) @@ -168,9 +150,21 @@ QGeoMapObjectPrivate *QMapPolygonObjectPrivateQSG::clone() return new QMapPolygonObjectPrivateQSG(static_cast<QMapPolygonObjectPrivate &>(*this)); } +void QMapPolygonObjectPrivateQSG::setGeoShape(const QGeoShape &shape) +{ + if (shape == m_path) + return; + + m_path = QGeoPathEager(shape); + updateGeometry(); + if (m_map) + emit m_map->sgNodeChanged(); + emit static_cast<QMapPolygonObject *>(q)->pathChanged(); +} + void QMapPolygonObjectPrivateQSG::updateGeometry() { - if (!m_map || m_geoPath.path().length() == 0 + if (!m_map || m_path.path().length() == 0 || m_map->geoProjection().projectionType() != QGeoProjection::ProjectionWebMercator) return; @@ -180,7 +174,7 @@ void QMapPolygonObjectPrivateQSG::updateGeometry() const QList<QDoubleVector2D> &geopathProjected = projectPath(); m_geometry.markSourceDirty(); - m_geometry.setPreserveGeometry(true, m_geoPath.boundingGeoRectangle().topLeft()); + m_geometry.setPreserveGeometry(true, m_path.boundingGeoRectangle().topLeft()); m_geometry.updateSourcePoints(*m_map, geopathProjected); m_geometry.updateScreenPoints(*m_map); @@ -193,7 +187,7 @@ void QMapPolygonObjectPrivateQSG::updateGeometry() closedPath << closedPath.first(); m_borderGeometry.markSourceDirty(); - m_borderGeometry.setPreserveGeometry(true, m_geoPath.boundingGeoRectangle().topLeft()); + m_borderGeometry.setPreserveGeometry(true, m_path.boundingGeoRectangle().topLeft()); const QGeoCoordinate &geometryOrigin = m_geometry.origin(); diff --git a/src/location/labs/qsg/qmappolygonobjectqsg_p_p.h b/src/location/labs/qsg/qmappolygonobjectqsg_p_p.h index b288528a..0f42a92e 100644 --- a/src/location/labs/qsg/qmappolygonobjectqsg_p_p.h +++ b/src/location/labs/qsg/qmappolygonobjectqsg_p_p.h @@ -57,7 +57,7 @@ QT_BEGIN_NAMESPACE -class Q_LOCATION_PRIVATE_EXPORT QMapPolygonObjectPrivateQSG : public QMapPolygonObjectPrivate, public QQSGMapObject +class Q_LOCATION_PRIVATE_EXPORT QMapPolygonObjectPrivateQSG : public QMapPolygonObjectPrivateDefault, public QQSGMapObject { public: QMapPolygonObjectPrivateQSG(QGeoMapObject *q); @@ -73,12 +73,7 @@ public: QSGNode *root, QQuickWindow *window) override; - // QGeoMapPolylinePrivate interface - QList<QGeoCoordinate> path() const override; - QColor fillColor() const override; - QColor borderColor() const override; - qreal borderWidth() const override; - + // QGeoMapPolygonPrivate interface void setPath(const QList<QGeoCoordinate> &path) override; void setFillColor(const QColor &color) override; void setBorderColor(const QColor &color) override; @@ -86,15 +81,12 @@ public: // QGeoMapObjectPrivate QGeoMapObjectPrivate *clone() override; + virtual void setGeoShape(const QGeoShape &shape) override; // Data Members QGeoMapPolygonGeometry m_geometry; QGeoMapPolylineGeometry m_borderGeometry; - QGeoPath m_geoPath; - QColor m_fillColor; - QColor m_borderColor; - qreal m_borderWidth = 0; bool m_updatingGeometry = false; }; diff --git a/src/location/labs/qsg/qmappolylineobjectqsg.cpp b/src/location/labs/qsg/qmappolylineobjectqsg.cpp index 5b184326..2bf5b287 100644 --- a/src/location/labs/qsg/qmappolylineobjectqsg.cpp +++ b/src/location/labs/qsg/qmappolylineobjectqsg.cpp @@ -45,18 +45,20 @@ QT_BEGIN_NAMESPACE */ QMapPolylineObjectPrivateQSG::QMapPolylineObjectPrivateQSG(QGeoMapObject *q) - : QMapPolylineObjectPrivate(q) + : QMapPolylineObjectPrivateDefault(q) { } QMapPolylineObjectPrivateQSG::QMapPolylineObjectPrivateQSG(const QMapPolylineObjectPrivate &other) - : QMapPolylineObjectPrivate(other.q) + : QMapPolylineObjectPrivateDefault(other) { - // do the appropriate internal update and trigger map repaint - setPath(other.path()); - setColor(other.color()); - setWidth(other.width()); + m_geoPath.setPath(m_path); + // rest of the data already cloned by the *Default copy constructor, but necessary + // update operations triggered only by setters overrides + updateGeometry(); + if (m_map) + emit m_map->sgNodeChanged(); } QMapPolylineObjectPrivateQSG::~QMapPolylineObjectPrivateQSG() @@ -102,7 +104,7 @@ QSGNode *QMapPolylineObjectPrivateQSG::updateMapObjectNode(QSGNode *oldNode, QSGNode *root, QQuickWindow * /*window*/) { - Q_UNUSED(visibleNode) + Q_UNUSED(visibleNode); MapPolylineNode *node = static_cast<MapPolylineNode *>(oldNode); bool created = false; @@ -127,24 +129,23 @@ QSGNode *QMapPolylineObjectPrivateQSG::updateMapObjectNode(QSGNode *oldNode, return node; } -QList<QGeoCoordinate> QMapPolylineObjectPrivateQSG::path() const { return m_geoPath.path(); } - -QColor QMapPolylineObjectPrivateQSG::color() const { return m_color; } - -qreal QMapPolylineObjectPrivateQSG::width() const { return m_width; } +QList<QGeoCoordinate> QMapPolylineObjectPrivateQSG::path() const +{ + return m_geoPath.path(); +} void QMapPolylineObjectPrivateQSG::setPath(const QList<QGeoCoordinate> &path) { + m_path = path; m_geoPath.setPath(path); updateGeometry(); - if (m_map) emit m_map->sgNodeChanged(); } void QMapPolylineObjectPrivateQSG::setColor(const QColor &color) { - m_color = color; + QMapPolylineObjectPrivateDefault::setColor(color); updateGeometry(); if (m_map) @@ -153,7 +154,7 @@ void QMapPolylineObjectPrivateQSG::setColor(const QColor &color) void QMapPolylineObjectPrivateQSG::setWidth(qreal width) { - m_width = width; + QMapPolylineObjectPrivateDefault::setWidth(width); updateGeometry(); if (m_map) @@ -165,4 +166,9 @@ QGeoMapObjectPrivate *QMapPolylineObjectPrivateQSG::clone() return new QMapPolylineObjectPrivateQSG(static_cast<QMapPolylineObjectPrivate &>(*this)); } +QGeoShape QMapPolylineObjectPrivateQSG::geoShape() const +{ + return m_geoPath; +} + QT_END_NAMESPACE diff --git a/src/location/labs/qsg/qmappolylineobjectqsg_p_p.h b/src/location/labs/qsg/qmappolylineobjectqsg_p_p.h index 792413e5..e8eb5839 100644 --- a/src/location/labs/qsg/qmappolylineobjectqsg_p_p.h +++ b/src/location/labs/qsg/qmappolylineobjectqsg_p_p.h @@ -54,10 +54,11 @@ #include <QtLocation/private/qmappolylineobject_p.h> #include <QtLocation/private/qqsgmapobject_p.h> #include <QtCore/qscopedvaluerollback.h> +#include <QtPositioning/private/qgeopath_p.h> QT_BEGIN_NAMESPACE -class Q_LOCATION_PRIVATE_EXPORT QMapPolylineObjectPrivateQSG : public QMapPolylineObjectPrivate, public QQSGMapObject +class Q_LOCATION_PRIVATE_EXPORT QMapPolylineObjectPrivateQSG : public QMapPolylineObjectPrivateDefault, public QQSGMapObject { public: QMapPolylineObjectPrivateQSG(QGeoMapObject *q); @@ -75,22 +76,17 @@ public: // QGeoMapPolylinePrivate interface QList<QGeoCoordinate> path() const override; - QColor color() const override; - qreal width() const override; - void setPath(const QList<QGeoCoordinate> &path) override; void setColor(const QColor &color) override; void setWidth(qreal width) override; // QGeoMapObjectPrivate QGeoMapObjectPrivate *clone() override; + virtual QGeoShape geoShape() const override; // Data Members + QGeoPathEager m_geoPath; QGeoMapPolylineGeometry m_geometry; - QGeoPath m_geoPath; - - QColor m_color; - qreal m_width = 0; bool m_updatingGeometry = false; }; diff --git a/src/location/labs/qsg/qmaprouteobjectqsg.cpp b/src/location/labs/qsg/qmaprouteobjectqsg.cpp index eaea64f3..8f347f88 100644 --- a/src/location/labs/qsg/qmaprouteobjectqsg.cpp +++ b/src/location/labs/qsg/qmaprouteobjectqsg.cpp @@ -100,4 +100,9 @@ void QMapRouteObjectPrivateQSG::setVisible(bool visible) m_polyline->setVisible(visible); } +QGeoShape QMapRouteObjectPrivateQSG::geoShape() const +{ + return m_polyline->geoShape(); +} + QT_END_NAMESPACE diff --git a/src/location/labs/qsg/qmaprouteobjectqsg_p_p.h b/src/location/labs/qsg/qmaprouteobjectqsg_p_p.h index 0c946259..2ade5d53 100644 --- a/src/location/labs/qsg/qmaprouteobjectqsg_p_p.h +++ b/src/location/labs/qsg/qmaprouteobjectqsg_p_p.h @@ -80,6 +80,7 @@ public: QGeoMapObjectPrivate *clone() override; void setMap(QGeoMap *map) override; void setVisible(bool visible) override; + virtual QGeoShape geoShape() const override; // Data Members QScopedPointer<QMapPolylineObjectPrivateQSG> m_polyline; |