diff options
Diffstat (limited to 'src/imports')
-rw-r--r-- | src/imports/location/qdeclarativegeomap.cpp | 82 | ||||
-rw-r--r-- | src/imports/location/qdeclarativegeomap_p.h | 11 |
2 files changed, 93 insertions, 0 deletions
diff --git a/src/imports/location/qdeclarativegeomap.cpp b/src/imports/location/qdeclarativegeomap.cpp index fb5a2472..7182bb21 100644 --- a/src/imports/location/qdeclarativegeomap.cpp +++ b/src/imports/location/qdeclarativegeomap.cpp @@ -312,8 +312,11 @@ void QDeclarativeGeoMap::initialize() bool centerHasChanged = false; bool bearingHasChanged = false; bool tiltHasChanged = false; + bool fovHasChanged = false; bool minTiltHasChanged = false; bool maxTiltHasChanged = false; + bool minFovHasChanged = false; + bool maxFovHasChanged = false; QGeoCoordinate center = m_cameraData.center(); @@ -321,6 +324,11 @@ void QDeclarativeGeoMap::initialize() double bearing = m_cameraData.bearing(); double tilt = m_cameraData.tilt(); + double fov = m_cameraData.fieldOfView(); // Must be 45.0 + if (m_map->cameraCapabilities().minimumFieldOfView() != 1) + minFovHasChanged = true; + if (m_map->cameraCapabilities().maximumFieldOfView() != 179) + maxFovHasChanged = true; if (m_map->cameraCapabilities().minimumTilt() != 0) minTiltHasChanged = true; if (m_map->cameraCapabilities().maximumTilt() != 89) @@ -334,6 +342,12 @@ void QDeclarativeGeoMap::initialize() tiltHasChanged = true; } + m_cameraData.setFieldOfView(qBound(m_map->cameraCapabilities().minimumFieldOfView(), + fov, + m_map->cameraCapabilities().maximumFieldOfView())); + if (fov != m_cameraData.fieldOfView()) + fovHasChanged = true; + // set latitude boundary check m_maximumViewportLatitude = m_map->maximumCenterLatitudeAtZoom(m_cameraData); @@ -357,11 +371,20 @@ void QDeclarativeGeoMap::initialize() if (tiltHasChanged) emit tiltChanged(m_cameraData.tilt()); + if (fovHasChanged) + emit fieldOfViewChanged(m_cameraData.fieldOfView()); + if (minTiltHasChanged) emit minimumTiltChanged(m_map->cameraCapabilities().minimumTilt()); if (maxTiltHasChanged) emit maximumTiltChanged(m_map->cameraCapabilities().maximumTilt()); + + if (minFovHasChanged) + emit minimumFieldOfViewChanged(m_map->cameraCapabilities().minimumFieldOfView()); + + if (maxFovHasChanged) + emit maximumFieldOfViewChanged(m_map->cameraCapabilities().maximumFieldOfView()); } /*! @@ -842,6 +865,65 @@ qreal QDeclarativeGeoMap::tilt() const } /*! + \qmlproperty real QtLocation::Map::fieldOfView + + This property holds the field of view of the camera used to look at the map, in degrees. + If the plugin property of the map is not set, or the plugin does not support mapping, the value is 45 degrees. + + Note that changing this value implicitly changes also the distance between the camera and the map, + so that, at a tilting angle of 0 degrees, the resulting image is identical for any value used for this property. + + For more information about this parameter, consult the Wikipedia articles about \l {https://en.wikipedia.org/wiki/Field_of_view} {Field of view} and + \l {https://en.wikipedia.org/wiki/Angle_of_view} {Angle of view}. + + \since Qt Location 5.9 +*/ +void QDeclarativeGeoMap::setFieldOfView(qreal fieldOfView) +{ + fieldOfView = qBound(minimumFieldOfView(), fieldOfView, maximumFieldOfView()); + if (m_cameraData.fieldOfView() == fieldOfView) + return; + + m_cameraData.setFieldOfView(fieldOfView); + if (m_map) + m_map->setCameraData(m_cameraData); + emit fieldOfViewChanged(fieldOfView); +} + +qreal QDeclarativeGeoMap::fieldOfView() const +{ + return m_cameraData.fieldOfView(); +} + +/*! + \qmlproperty bool QtLocation::Map::minimumFieldOfView + This property holds the minimum field of view that the map supports. + If the plugin property of the map is not set, or the plugin does not support mapping, this property is 1. + + \since Qt Location 5.9 +*/ +qreal QDeclarativeGeoMap::minimumFieldOfView() const +{ + if (!m_map) + return 1; + return m_map->cameraCapabilities().minimumFieldOfView(); +} + +/*! + \qmlproperty bool QtLocation::Map::maximumFieldOfView + This property holds the maximum field of view that the map supports. + If the plugin property of the map is not set, or the plugin does not support mapping, this property is 179. + + \since Qt Location 5.9 +*/ +qreal QDeclarativeGeoMap::maximumFieldOfView() const +{ + if (!m_map) + return 179; + return m_map->cameraCapabilities().maximumFieldOfView(); +} + +/*! \qmlproperty bool QtLocation::Map::bearingSupported This property indicates if the Map supports bearing. diff --git a/src/imports/location/qdeclarativegeomap_p.h b/src/imports/location/qdeclarativegeomap_p.h index 71538e42..b85daf1a 100644 --- a/src/imports/location/qdeclarativegeomap_p.h +++ b/src/imports/location/qdeclarativegeomap_p.h @@ -81,6 +81,9 @@ class QDeclarativeGeoMap : public QQuickItem Q_PROPERTY(qreal maximumTilt READ maximumTilt NOTIFY maximumTiltChanged) Q_PROPERTY(qreal bearing READ bearing WRITE setBearing NOTIFY bearingChanged) Q_PROPERTY(qreal tilt READ tilt WRITE setTilt NOTIFY tiltChanged) + Q_PROPERTY(qreal fieldOfView READ fieldOfView WRITE setFieldOfView NOTIFY fieldOfViewChanged) + Q_PROPERTY(qreal minimumFieldOfView READ minimumFieldOfView NOTIFY minimumFieldOfViewChanged) + Q_PROPERTY(qreal maximumFieldOfView READ maximumFieldOfView NOTIFY minimumFieldOfViewChanged) Q_PROPERTY(QDeclarativeGeoMapType *activeMapType READ activeMapType WRITE setActiveMapType NOTIFY activeMapTypeChanged) Q_PROPERTY(QQmlListProperty<QDeclarativeGeoMapType> supportedMapTypes READ supportedMapTypes NOTIFY supportedMapTypesChanged) @@ -120,6 +123,11 @@ public: void setTilt(qreal tilt); qreal tilt() const; + void setFieldOfView(qreal fieldOfView); + qreal fieldOfView() const; + qreal minimumFieldOfView() const; + qreal maximumFieldOfView() const; + bool isBearingSupported() const; bool isTiltingSupported() const; qreal minimumTilt() const; @@ -178,10 +186,13 @@ Q_SIGNALS: void colorChanged(const QColor &color); void bearingChanged(qreal bearing); void tiltChanged(qreal tilt); + void fieldOfViewChanged(qreal fieldOfView); void bearingSupportChanged(bool bearingSupport); void tiltingSupportChanged(bool tiltingSupport); void minimumTiltChanged(qreal minimumTilt); void maximumTiltChanged(qreal maximumTilt); + void minimumFieldOfViewChanged(qreal minimumFieldOfView); + void maximumFieldOfViewChanged(qreal maximumFieldOfView); protected: void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE ; |