summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/location/declarativemaps/qdeclarativegeomap.cpp20
-rw-r--r--src/location/declarativemaps/qdeclarativegeomap_p.h2
-rw-r--r--src/location/declarativemaps/qquickgeomapgesturearea.cpp5
3 files changed, 23 insertions, 4 deletions
diff --git a/src/location/declarativemaps/qdeclarativegeomap.cpp b/src/location/declarativemaps/qdeclarativegeomap.cpp
index f196af04..4df884d5 100644
--- a/src/location/declarativemaps/qdeclarativegeomap.cpp
+++ b/src/location/declarativemaps/qdeclarativegeomap.cpp
@@ -942,6 +942,21 @@ qreal QDeclarativeGeoMap::maximumZoomLevel() const
*/
void QDeclarativeGeoMap::setZoomLevel(qreal zoomLevel)
{
+ return setZoomLevel(zoomLevel, m_cameraCapabilities.overzoomEnabled());
+}
+
+/*!
+ \internal
+
+ Sets the zoom level.
+ Larger values for the zoom level provide more detail. Zoom levels
+ are always non-negative. The default value is 8.0. Values outside the
+ [minimumZoomLevel, maximumZoomLevel] range, which represent the range for which
+ tiles are available, can be accepted or clamped by setting the overzoom argument
+ to true or false respectively.
+*/
+void QDeclarativeGeoMap::setZoomLevel(qreal zoomLevel, bool overzoom)
+{
if (m_cameraData.zoomLevel() == zoomLevel || zoomLevel < 0)
return;
@@ -949,8 +964,9 @@ void QDeclarativeGeoMap::setZoomLevel(qreal zoomLevel)
bool centerHasChanged = false;
if (m_initialized) {
- m_cameraData.setZoomLevel(qBound<qreal>(m_cameraCapabilities.overzoomEnabled() ? 0 : minimumZoomLevel(), zoomLevel,
- m_cameraCapabilities.overzoomEnabled() ? 30 : maximumZoomLevel()));
+ m_cameraData.setZoomLevel(qBound<qreal>(overzoom ? m_map->minimumZoom() : minimumZoomLevel(),
+ zoomLevel,
+ overzoom ? 30 : maximumZoomLevel()));
m_maximumViewportLatitude = m_map->maximumCenterLatitudeAtZoom(m_cameraData);
QGeoCoordinate coord = m_cameraData.center();
coord.setLatitude(qBound(-m_maximumViewportLatitude, coord.latitude(), m_maximumViewportLatitude));
diff --git a/src/location/declarativemaps/qdeclarativegeomap_p.h b/src/location/declarativemaps/qdeclarativegeomap_p.h
index c63bb571..f07a2e7f 100644
--- a/src/location/declarativemaps/qdeclarativegeomap_p.h
+++ b/src/location/declarativemaps/qdeclarativegeomap_p.h
@@ -228,6 +228,8 @@ protected:
void setError(QGeoServiceProvider::Error error, const QString &errorString);
void initialize();
+ void setZoomLevel(qreal zoomLevel, bool overzoom);
+
private Q_SLOTS:
void mappingManagerInitialized();
void pluginReady();
diff --git a/src/location/declarativemaps/qquickgeomapgesturearea.cpp b/src/location/declarativemaps/qquickgeomapgesturearea.cpp
index 13c667e6..a40afd68 100644
--- a/src/location/declarativemaps/qquickgeomapgesturearea.cpp
+++ b/src/location/declarativemaps/qquickgeomapgesturearea.cpp
@@ -953,7 +953,8 @@ void QQuickGeoMapGestureArea::handleWheelEvent(QWheelEvent *event)
const double zoomLevelDelta = event->angleDelta().y() * qreal(0.001);
// Gesture area should always honor maxZL, but Map might not.
- m_declarativeMap->setZoomLevel(qMin<qreal>(m_declarativeMap->zoomLevel() + zoomLevelDelta, maximumZoomLevel()));
+ m_declarativeMap->setZoomLevel(qMin<qreal>(m_declarativeMap->zoomLevel() + zoomLevelDelta, maximumZoomLevel()),
+ false);
const QPointF &postZoomPoint = m_map->geoProjection().coordinateToItemPosition(wheelGeoPos, false).toPointF();
if (preZoomPoint != postZoomPoint) // need to re-anchor the wheel geoPos to the event position
@@ -1595,7 +1596,7 @@ void QQuickGeoMapGestureArea::updatePinch()
qreal perPinchMinimumZoomLevel = qMax(m_pinch.m_zoom.m_start - m_pinch.m_zoom.maximumChange, m_pinch.m_zoom.m_minimum);
qreal perPinchMaximumZoomLevel = qMin(m_pinch.m_zoom.m_start + m_pinch.m_zoom.maximumChange, m_pinch.m_zoom.m_maximum);
newZoomLevel = qMin(qMax(perPinchMinimumZoomLevel, newZoomLevel), perPinchMaximumZoomLevel);
- m_declarativeMap->setZoomLevel(qMin<qreal>(newZoomLevel, maximumZoomLevel()));
+ m_declarativeMap->setZoomLevel(qMin<qreal>(newZoomLevel, maximumZoomLevel()), false);
m_pinch.m_zoom.m_previous = newZoomLevel;
}
}