summaryrefslogtreecommitdiff
path: root/src/location/labs/qsg
diff options
context:
space:
mode:
Diffstat (limited to 'src/location/labs/qsg')
-rw-r--r--src/location/labs/qsg/qgeomapobjectqsgsupport.cpp6
-rw-r--r--src/location/labs/qsg/qmapcircleobjectqsg.cpp24
-rw-r--r--src/location/labs/qsg/qmapiconobjectqsg.cpp12
-rw-r--r--src/location/labs/qsg/qmapiconobjectqsg_p_p.h2
-rw-r--r--src/location/labs/qsg/qmappolygonobjectqsg.cpp66
-rw-r--r--src/location/labs/qsg/qmappolygonobjectqsg_p_p.h14
-rw-r--r--src/location/labs/qsg/qmappolylineobjectqsg.cpp36
-rw-r--r--src/location/labs/qsg/qmappolylineobjectqsg_p_p.h12
-rw-r--r--src/location/labs/qsg/qmaprouteobjectqsg.cpp5
-rw-r--r--src/location/labs/qsg/qmaprouteobjectqsg_p_p.h1
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 &center)
{
- m_center = center;
+ QMapCircleObjectPrivateDefault::setCenter(center);
updateGeometry();
if (m_map)
emit m_map->sgNodeChanged();
@@ -190,7 +188,7 @@ void QMapCircleObjectPrivateQSG::setCenter(const QGeoCoordinate &center)
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;