diff options
Diffstat (limited to 'src/location/labs/qmapiconobject.cpp')
-rw-r--r-- | src/location/labs/qmapiconobject.cpp | 55 |
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 ¢er) +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 ¢er) } /*! - \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) |