diff options
author | Liang Qi <liang.qi@qt.io> | 2018-02-20 12:42:07 +0000 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2018-02-20 13:27:27 +0000 |
commit | f0ae07a8617a124a8431f9054ca324ecf142ebdf (patch) | |
tree | 3dea2c40f1d4e66efcbeaa7c658cc19500e15b6e | |
parent | 1e6a5349def9c6e3e929fc57949fc97e267af37d (diff) | |
parent | 9cb0159864f4b3ee94c5cae73bf9a3e4d8851665 (diff) | |
download | qtlocation-f0ae07a8617a124a8431f9054ca324ecf142ebdf.tar.gz |
Merge "Merge remote-tracking branch 'origin/5.9' into 5.11" into refs/staging/5.11
-rw-r--r-- | src/location/declarativemaps/qdeclarativegeomap.cpp | 34 | ||||
-rw-r--r-- | src/location/declarativemaps/qdeclarativegeomap_p.h | 2 |
2 files changed, 31 insertions, 5 deletions
diff --git a/src/location/declarativemaps/qdeclarativegeomap.cpp b/src/location/declarativemaps/qdeclarativegeomap.cpp index 57f127ef..1c0815ca 100644 --- a/src/location/declarativemaps/qdeclarativegeomap.cpp +++ b/src/location/declarativemaps/qdeclarativegeomap.cpp @@ -832,8 +832,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(); @@ -842,12 +842,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(); } } @@ -868,11 +871,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. */ @@ -936,14 +958,15 @@ void QDeclarativeGeoMap::setZoomLevel(qreal zoomLevel) */ void QDeclarativeGeoMap::setZoomLevel(qreal zoomLevel, bool overzoom) { - if (m_cameraData.zoomLevel() == zoomLevel || zoomLevel < 0) + const qreal oldZoom = m_cameraData.zoomLevel(); + if (oldZoom == zoomLevel || zoomLevel < 0) return; //small optimization to avoid double setCameraData 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); @@ -960,7 +983,8 @@ void QDeclarativeGeoMap::setZoomLevel(qreal zoomLevel, bool overzoom) if (centerHasChanged) emit centerChanged(m_cameraData.center()); - emit zoomLevelChanged(m_cameraData.zoomLevel()); + if (oldZoom != m_cameraData.zoomLevel()) + emit zoomLevelChanged(m_cameraData.zoomLevel()); } qreal QDeclarativeGeoMap::zoomLevel() const diff --git a/src/location/declarativemaps/qdeclarativegeomap_p.h b/src/location/declarativemaps/qdeclarativegeomap_p.h index 0d5ae481..cb8fed08 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; |