summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/mbgl/map/map.hpp2
-rw-r--r--src/mbgl/map/map.cpp14
-rw-r--r--src/mbgl/map/transform.cpp8
-rw-r--r--src/mbgl/map/transform.hpp3
-rw-r--r--src/mbgl/map/transform_state.cpp8
-rw-r--r--src/mbgl/map/transform_state.hpp4
6 files changed, 38 insertions, 1 deletions
diff --git a/include/mbgl/map/map.hpp b/include/mbgl/map/map.hpp
index 1112ac6c93..5b89bf4a91 100644
--- a/include/mbgl/map/map.hpp
+++ b/include/mbgl/map/map.hpp
@@ -116,7 +116,9 @@ public:
CameraOptions cameraForLatLngBounds(const LatLngBounds&, const EdgeInsets&);
CameraOptions cameraForLatLngs(const std::vector<LatLng>&, const EdgeInsets&);
void resetZoom();
+ void setMinZoom(const double minZoom);
double getMinZoom() const;
+ void setMaxZoom(const double maxZoom);
double getMaxZoom() const;
// Rotation
diff --git a/src/mbgl/map/map.cpp b/src/mbgl/map/map.cpp
index a45a9ffaff..e013619cfa 100644
--- a/src/mbgl/map/map.cpp
+++ b/src/mbgl/map/map.cpp
@@ -303,10 +303,24 @@ void Map::resetZoom() {
setZoom(0);
}
+void Map::setMinZoom(const double minZoom) {
+ transform->setMinZoom(minZoom);
+ if (getZoom() < minZoom) {
+ setZoom(minZoom);
+ }
+}
+
double Map::getMinZoom() const {
return transform->getState().getMinZoom();
}
+void Map::setMaxZoom(const double maxZoom) {
+ transform->setMaxZoom(maxZoom);
+ if (getZoom() > maxZoom) {
+ setZoom(maxZoom);
+ }
+}
+
double Map::getMaxZoom() const {
return transform->getState().getMaxZoom();
}
diff --git a/src/mbgl/map/transform.cpp b/src/mbgl/map/transform.cpp
index 208f9a089a..b8c816ddc2 100644
--- a/src/mbgl/map/transform.cpp
+++ b/src/mbgl/map/transform.cpp
@@ -465,6 +465,14 @@ void Transform::setScale(double scale, const EdgeInsets& padding, const Duration
setScale(scale, center, duration);
}
+void Transform::setMinZoom(const double minZoom) {
+ state.setMinZoom(minZoom);
+}
+
+void Transform::setMaxZoom(const double maxZoom) {
+ state.setMaxZoom(maxZoom);
+}
+
#pragma mark - Angle
void Transform::rotateBy(const PrecisionPoint& first, const PrecisionPoint& second, const Duration& duration) {
diff --git a/src/mbgl/map/transform.hpp b/src/mbgl/map/transform.hpp
index 8c9ea08885..806413058d 100644
--- a/src/mbgl/map/transform.hpp
+++ b/src/mbgl/map/transform.hpp
@@ -79,6 +79,9 @@ public:
/** Returns the scale factor. */
double getScale() const;
+ void setMinZoom(const double minZoom);
+ void setMaxZoom(const double maxZoom);
+
// Angle
void rotateBy(const PrecisionPoint& first, const PrecisionPoint& second, const Duration& = Duration::zero());
diff --git a/src/mbgl/map/transform_state.cpp b/src/mbgl/map/transform_state.cpp
index c9c904dab9..79f9a19b08 100644
--- a/src/mbgl/map/transform_state.cpp
+++ b/src/mbgl/map/transform_state.cpp
@@ -168,6 +168,10 @@ double TransformState::getScale() const {
return scale;
}
+void TransformState::setMinZoom(const double minZoom) {
+ min_scale = zoomScale(minZoom);
+}
+
double TransformState::getMinZoom() const {
double test_scale = min_scale;
double unused_x = x;
@@ -177,6 +181,10 @@ double TransformState::getMinZoom() const {
return scaleZoom(test_scale);
}
+void TransformState::setMaxZoom(const double maxZoom) {
+ max_scale = zoomScale(maxZoom);
+}
+
double TransformState::getMaxZoom() const {
return scaleZoom(max_scale);
}
diff --git a/src/mbgl/map/transform_state.hpp b/src/mbgl/map/transform_state.hpp
index 2911d8624a..9d97bd9d6b 100644
--- a/src/mbgl/map/transform_state.hpp
+++ b/src/mbgl/map/transform_state.hpp
@@ -52,7 +52,9 @@ public:
int32_t getIntegerZoom() const;
double getZoomFraction() const;
double getScale() const;
+ void setMinZoom(const double minZoom);
double getMinZoom() const;
+ void setMaxZoom(const double maxZoom);
double getMaxZoom() const;
// Rotation
@@ -83,7 +85,7 @@ private:
// Limit the amount of zooming possible on the map.
double min_scale = std::pow(2, 0);
- double max_scale = std::pow(2, 18);
+ double max_scale = std::pow(2, 20);
NorthOrientation orientation = NorthOrientation::Upwards;