summaryrefslogtreecommitdiff
path: root/src/location/declarativemaps/qdeclarativegeomap.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/location/declarativemaps/qdeclarativegeomap.cpp')
-rw-r--r--src/location/declarativemaps/qdeclarativegeomap.cpp28
1 files changed, 25 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);