diff options
author | Paolo Angelelli <paolo.angelelli@qt.io> | 2018-12-08 18:45:36 +0100 |
---|---|---|
committer | Paolo Angelelli <paolo.angelelli@qt.io> | 2019-02-01 14:09:48 +0000 |
commit | 587b8812c9b2fc7ed7ad4ab35d27114ee98eafc6 (patch) | |
tree | 4589a6518d38b504a6941524a959d871cbf2537c /src/location/labs/qmapiconobject.cpp | |
parent | 8e923d801b460ccc6fdc92d4a7bc8750410ad042 (diff) | |
download | qtlocation-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.cpp | 31 |
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 ¢er) +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); +} + /* |