summaryrefslogtreecommitdiff
path: root/src/mbgl/map
diff options
context:
space:
mode:
Diffstat (limited to 'src/mbgl/map')
-rw-r--r--src/mbgl/map/map.cpp10
-rw-r--r--src/mbgl/map/transform.cpp11
-rw-r--r--src/mbgl/map/transform.hpp4
-rw-r--r--src/mbgl/map/transform_state.cpp12
-rw-r--r--src/mbgl/map/transform_state.hpp3
5 files changed, 38 insertions, 2 deletions
diff --git a/src/mbgl/map/map.cpp b/src/mbgl/map/map.cpp
index cfbdbafb6e..c3123fb3be 100644
--- a/src/mbgl/map/map.cpp
+++ b/src/mbgl/map/map.cpp
@@ -395,6 +395,16 @@ NorthOrientation Map::getNorthOrientation() const {
return transform->getNorthOrientation();
}
+#pragma mark - Constrain mode
+
+void Map::setConstrainMode(mbgl::ConstrainMode mode) {
+ transform->setConstrainMode(mode);
+ update(Update::Repaint);
+}
+
+ConstrainMode Map::getConstrainMode() const {
+ return transform->getConstrainMode();
+}
#pragma mark - Projection
diff --git a/src/mbgl/map/transform.cpp b/src/mbgl/map/transform.cpp
index b8c816ddc2..0f7af8c9e9 100644
--- a/src/mbgl/map/transform.cpp
+++ b/src/mbgl/map/transform.cpp
@@ -560,6 +560,17 @@ NorthOrientation Transform::getNorthOrientation() const {
return state.getNorthOrientation();
}
+#pragma mark - Constrain mode
+
+void Transform::setConstrainMode(mbgl::ConstrainMode mode) {
+ state.constrainMode = mode;
+ state.constrain(state.scale, state.x, state.y);
+}
+
+ConstrainMode Transform::getConstrainMode() const {
+ return state.getConstrainMode();
+}
+
#pragma mark - Transition
void Transform::startTransition(const CameraOptions& camera,
diff --git a/src/mbgl/map/transform.hpp b/src/mbgl/map/transform.hpp
index 806413058d..48615421fe 100644
--- a/src/mbgl/map/transform.hpp
+++ b/src/mbgl/map/transform.hpp
@@ -119,6 +119,10 @@ public:
// North Orientation
void setNorthOrientation(NorthOrientation);
NorthOrientation getNorthOrientation() const;
+
+ // Constrain mode
+ void setConstrainMode(ConstrainMode);
+ ConstrainMode getConstrainMode() const;
// Transitions
bool inTransition() const;
diff --git a/src/mbgl/map/transform_state.cpp b/src/mbgl/map/transform_state.cpp
index 42fbd9af87..087defabda 100644
--- a/src/mbgl/map/transform_state.cpp
+++ b/src/mbgl/map/transform_state.cpp
@@ -81,6 +81,12 @@ double TransformState::getNorthOrientationAngle() const {
return angleOrientation;
}
+#pragma mark - Constrain mode
+
+ConstrainMode TransformState::getConstrainMode() const {
+ return constrainMode;
+}
+
#pragma mark - Position
LatLng TransformState::getLatLng() const {
@@ -354,8 +360,10 @@ void TransformState::constrain(double& scale_, double& x_, double& y_) const {
x_ = std::max(-max_x, std::min(x_, max_x));
}
- double max_y = (scale_ * util::tileSize - (rotatedNorth() ? width : height)) / 2;
- y_ = std::max(-max_y, std::min(y_, max_y));
+ if (constrainMode != ConstrainMode::None) {
+ double max_y = (scale_ * util::tileSize - (rotatedNorth() ? width : height)) / 2;
+ y_ = std::max(-max_y, std::min(y_, max_y));
+ }
}
void TransformState::moveLatLng(const LatLng& latLng, const PrecisionPoint& anchor) {
diff --git a/src/mbgl/map/transform_state.hpp b/src/mbgl/map/transform_state.hpp
index a276c08868..0fb1f2304b 100644
--- a/src/mbgl/map/transform_state.hpp
+++ b/src/mbgl/map/transform_state.hpp
@@ -34,6 +34,9 @@ public:
// North Orientation
NorthOrientation getNorthOrientation() const;
double getNorthOrientationAngle() const;
+
+ // Constrain mode
+ ConstrainMode getConstrainMode() const;
// Position
LatLng getLatLng() const;