summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/location/declarativemaps/qdeclarativegeomap.cpp28
-rw-r--r--src/location/declarativemaps/qdeclarativegeomap_p.h2
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;