summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLiang Qi <liang.qi@qt.io>2018-02-20 13:41:08 +0100
committerLiang Qi <liang.qi@qt.io>2018-02-20 13:41:08 +0100
commit9cb0159864f4b3ee94c5cae73bf9a3e4d8851665 (patch)
tree539fd4e318378239db520974ea59eb240eb24f4b
parent9d26876fda04981af8e0762eba85a4f1fbbe9402 (diff)
parentcc3a5a926db8d07c8282407a7b010b4ab2289592 (diff)
downloadqtlocation-9cb0159864f4b3ee94c5cae73bf9a3e4d8851665.tar.gz
Merge remote-tracking branch 'origin/5.9' into 5.11
Conflicts: .qmake.conf Change-Id: I0786d8c91141c245f337c31ddcdfcb39e4b8ca41
-rw-r--r--src/location/declarativemaps/qdeclarativegeomap.cpp34
-rw-r--r--src/location/declarativemaps/qdeclarativegeomap_p.h2
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;