diff options
author | Paolo Angelelli <paolo.angelelli@qt.io> | 2018-01-31 14:30:51 +0100 |
---|---|---|
committer | Paolo Angelelli <paolo.angelelli@qt.io> | 2018-02-12 13:31:14 +0000 |
commit | 108442eeae16dfcdbdbe3e73a45e6128b7839fe8 (patch) | |
tree | 435914481665926150b48e5480033e5f1dbc2c9b /src | |
parent | 66ba05c88524023012efdb76d54d48f47411a5a4 (diff) | |
download | qtlocation-108442eeae16dfcdbdbe3e73a45e6128b7839fe8.tar.gz |
Fix Map.zoomLevel not honoring user-set values
Apparently m_userMinimumZoomLevel is set but not used when setting
the zoom level.
With this patch, the minimumZoomLevelChanged signal is still emitted
when the "implicit" minimumZoomLevel of the map changes (the one
derived from the map size), but only if no user minimum zoom level
is explicitly set.
Task-number: QTBUG-66107
Change-Id: Id7f87cbd237407b255deea90dad80eeadd2d2f0d
Reviewed-by: Jan Arve Sæther <jan-arve.saether@qt.io>
Diffstat (limited to 'src')
-rw-r--r-- | src/location/declarativemaps/qdeclarativegeomap.cpp | 28 | ||||
-rw-r--r-- | src/location/declarativemaps/qdeclarativegeomap_p.h | 2 |
2 files changed, 27 insertions, 3 deletions
diff --git a/src/location/declarativemaps/qdeclarativegeomap.cpp b/src/location/declarativemaps/qdeclarativegeomap.cpp index be08c3a4..d7f93d14 100644 --- a/src/location/declarativemaps/qdeclarativegeomap.cpp +++ b/src/location/declarativemaps/qdeclarativegeomap.cpp @@ -790,8 +790,8 @@ QDeclarativeGeoServiceProvider *QDeclarativeGeoMap::plugin() const */ void QDeclarativeGeoMap::setMinimumZoomLevel(qreal minimumZoomLevel, bool userSet) { - if (minimumZoomLevel >= 0) { + qreal oldUserMinimumZoomLevel = m_userMinimumZoomLevel; if (userSet) m_userMinimumZoomLevel = minimumZoomLevel; qreal oldMinimumZoomLevel = this->minimumZoomLevel(); @@ -800,12 +800,15 @@ void QDeclarativeGeoMap::setMinimumZoomLevel(qreal minimumZoomLevel, bool userSe if (m_map) minimumZoomLevel = qMax<qreal>(minimumZoomLevel, m_map->minimumZoom()); + // minimumZoomLevel is, at this point, the implicit minimum zoom level m_gestureArea->setMinimumZoomLevel(minimumZoomLevel); if (zoomLevel() < minimumZoomLevel && (m_gestureArea->enabled() || !m_cameraCapabilities.overzoomEnabled())) setZoomLevel(minimumZoomLevel); - if (oldMinimumZoomLevel != minimumZoomLevel) + if (qIsNaN(m_userMinimumZoomLevel) && oldMinimumZoomLevel != minimumZoomLevel) + emit minimumZoomLevelChanged(); + else if (userSet && oldUserMinimumZoomLevel != m_userMinimumZoomLevel) emit minimumZoomLevelChanged(); } } @@ -826,11 +829,30 @@ void QDeclarativeGeoMap::setMinimumZoomLevel(qreal minimumZoomLevel, bool userSe qreal QDeclarativeGeoMap::minimumZoomLevel() const { + if (!qIsNaN(m_userMinimumZoomLevel)) + return m_userMinimumZoomLevel; + else + return m_gestureArea->minimumZoomLevel(); +} + +/*! + \internal +*/ +qreal QDeclarativeGeoMap::implicitMinimumZoomLevel() const +{ return m_gestureArea->minimumZoomLevel(); } /*! \internal +*/ +qreal QDeclarativeGeoMap::effectiveMinimumZoomLevel() const +{ + return qMax<qreal>(minimumZoomLevel(), implicitMinimumZoomLevel()); +} + +/*! + \internal Sets the gesture areas maximum zoom level. If the camera capabilities has been set this method honors the boundaries set by it. */ @@ -901,7 +923,7 @@ void QDeclarativeGeoMap::setZoomLevel(qreal zoomLevel, bool overzoom) bool centerHasChanged = false; if (m_initialized) { - m_cameraData.setZoomLevel(qBound<qreal>(overzoom ? m_map->minimumZoom() : minimumZoomLevel(), + m_cameraData.setZoomLevel(qBound<qreal>(overzoom ? m_map->minimumZoom() : effectiveMinimumZoomLevel(), zoomLevel, overzoom ? 30 : maximumZoomLevel())); m_maximumViewportLatitude = m_map->maximumCenterLatitudeAtZoom(m_cameraData); diff --git a/src/location/declarativemaps/qdeclarativegeomap_p.h b/src/location/declarativemaps/qdeclarativegeomap_p.h index f357d322..0c1ea6d9 100644 --- a/src/location/declarativemaps/qdeclarativegeomap_p.h +++ b/src/location/declarativemaps/qdeclarativegeomap_p.h @@ -116,6 +116,8 @@ public: void setMinimumZoomLevel(qreal minimumZoomLevel, bool userSet = true); qreal minimumZoomLevel() const; + qreal implicitMinimumZoomLevel() const; + qreal effectiveMinimumZoomLevel() const; void setMaximumZoomLevel(qreal maximumZoomLevel, bool userSet = true); qreal maximumZoomLevel() const; |