summaryrefslogtreecommitdiff
path: root/src/location/labs/qmapiconobject.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/location/labs/qmapiconobject.cpp')
-rw-r--r--src/location/labs/qmapiconobject.cpp55
1 files changed, 41 insertions, 14 deletions
diff --git a/src/location/labs/qmapiconobject.cpp b/src/location/labs/qmapiconobject.cpp
index be82ebbf..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
@@ -91,7 +92,9 @@ QMapIconObjectPrivateDefault::QMapIconObjectPrivateDefault(const QMapIconObjectP
{
m_coordinate = other.coordinate();
m_content = other.content();
- m_size = other.size();
+ 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
@@ -119,14 +122,14 @@ void QMapIconObjectPrivateDefault::setContent(const QVariant &content)
m_content = content;
}
-QSizeF QMapIconObjectPrivateDefault::size() const
+QSizeF QMapIconObjectPrivateDefault::iconSize() const
{
- return m_size;
+ return m_iconSize;
}
-void QMapIconObjectPrivateDefault::setSize(const QSizeF &size)
+void QMapIconObjectPrivateDefault::setIconSize(const QSizeF &size)
{
- m_size = size;
+ m_iconSize = size;
}
QGeoMapObjectPrivate *QMapIconObjectPrivateDefault::clone()
@@ -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);
+}
+
/*
@@ -206,25 +233,25 @@ void QMapIconObject::setCoordinate(const QGeoCoordinate &center)
}
/*!
- \qmlproperty Variant Qt.labs.location::MapIconObject::size
+ \qmlproperty Variant Qt.labs.location::MapIconObject::iconSize
The size of the icon as it will be shown on the map.
*/
-QSizeF QMapIconObject::size() const
+QSizeF QMapIconObject::iconSize() const
{
const QMapIconObjectPrivate *d = static_cast<const QMapIconObjectPrivate *>(d_ptr.data());
- return d->size();
+ return d->iconSize();
}
-void QMapIconObject::setSize(const QSizeF &size)
+void QMapIconObject::setIconSize(const QSizeF &size)
{
QMapIconObjectPrivate *d = static_cast<QMapIconObjectPrivate*>(d_ptr.data());
- if (d->size() == size)
+ if (d->iconSize() == size)
return;
- d->setSize(size);
- emit sizeChanged();
+ d->setIconSize(size);
+ emit iconSizeChanged();
}
void QMapIconObject::setMap(QGeoMap *map)