summaryrefslogtreecommitdiff
path: root/src/location/labs/qmapiconobject.cpp
diff options
context:
space:
mode:
authorPaolo Angelelli <paolo.angelelli@qt.io>2018-12-08 18:45:36 +0100
committerPaolo Angelelli <paolo.angelelli@qt.io>2019-02-01 14:09:48 +0000
commit587b8812c9b2fc7ed7ad4ab35d27114ee98eafc6 (patch)
tree4589a6518d38b504a6941524a959d871cbf2537c /src/location/labs/qmapiconobject.cpp
parent8e923d801b460ccc6fdc92d4a7bc8750410ad042 (diff)
downloadqtlocation-587b8812c9b2fc7ed7ad4ab35d27114ee98eafc6.tar.gz
Introduce QGeoMapObject::geoShape property
In this way MapObjects become a little closer to MapItems, and this property can be used to, for example, center the map on one specific object or object group. Fixes: QTBUG-69640 Change-Id: I4dbead9e670bf5d1eeaccb2bd09d956b8de7da87 Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
Diffstat (limited to 'src/location/labs/qmapiconobject.cpp')
-rw-r--r--src/location/labs/qmapiconobject.cpp31
1 files changed, 29 insertions, 2 deletions
diff --git a/src/location/labs/qmapiconobject.cpp b/src/location/labs/qmapiconobject.cpp
index a9f6f5b3..a0cd4d46 100644
--- a/src/location/labs/qmapiconobject.cpp
+++ b/src/location/labs/qmapiconobject.cpp
@@ -37,6 +37,7 @@
#include "qmapiconobject_p.h"
#include "qmapiconobject_p_p.h"
#include <QExplicitlySharedDataPointer>
+#include <QtPositioning/QGeoCircle>
QT_BEGIN_NAMESPACE
@@ -92,6 +93,8 @@ QMapIconObjectPrivateDefault::QMapIconObjectPrivateDefault(const QMapIconObjectP
m_coordinate = other.coordinate();
m_content = other.content();
m_iconSize = other.iconSize();
+ qreal radius = QGeoCircle(other.geoShape()).radius();
+ m_radius = (qIsFinite(radius)) ? radius : 100.0;
}
QMapIconObjectPrivateDefault::~QMapIconObjectPrivateDefault()
@@ -104,9 +107,9 @@ QGeoCoordinate QMapIconObjectPrivateDefault::coordinate() const
return m_coordinate;
}
-void QMapIconObjectPrivateDefault::setCoordinate(const QGeoCoordinate &center)
+void QMapIconObjectPrivateDefault::setCoordinate(const QGeoCoordinate &coordinate)
{
- m_coordinate = center;
+ m_coordinate = coordinate;
}
QVariant QMapIconObjectPrivateDefault::content() const
@@ -134,6 +137,30 @@ QGeoMapObjectPrivate *QMapIconObjectPrivateDefault::clone()
return new QMapIconObjectPrivateDefault(static_cast<QMapIconObjectPrivate &>(*this));
}
+QGeoShape QMapIconObjectPrivateDefault::geoShape() const
+{
+ return QGeoCircle(coordinate(), m_radius); // fixing the radius to 100 meters, as a meaningful size for
+ // fitting the viewport to this icon without losing context completely
+}
+
+void QMapIconObjectPrivateDefault::setGeoShape(const QGeoShape &shape)
+{
+ QGeoCoordinate crd;
+ const QGeoCircle circle(shape); // if shape isn't a circle, circle will be created as a default-constructed circle
+ if (circle.isValid()) {
+ crd = circle.center();
+ m_radius = circle.radius();
+ } else {
+ crd = shape.boundingGeoRectangle().center();
+ }
+
+ if (crd == coordinate())
+ return;
+
+ setCoordinate(crd);
+ emit static_cast<QMapIconObject *>(q)->coordinateChanged(crd);
+}
+
/*