diff options
author | Bruno de Oliveira Abinader <bruno@mapbox.com> | 2017-06-28 14:23:39 +0300 |
---|---|---|
committer | Bruno de Oliveira Abinader <bruno@mapbox.com> | 2017-06-28 20:59:56 +0300 |
commit | 433e54e636293eb3b6644c143866aa0d39198441 (patch) | |
tree | bb30e6d61d69880e4e3d723129f974ad00121750 | |
parent | a35b268606b6becf218286036e4d1cfc22ddcaa3 (diff) | |
download | qtlocation-mapboxgl-433e54e636293eb3b6644c143866aa0d39198441.tar.gz |
[core] Clamp to scale boundaries in TransformState::setLatLngZoom
-rw-r--r-- | src/mbgl/map/transform_state.cpp | 2 | ||||
-rw-r--r-- | test/map/transform.test.cpp | 16 |
2 files changed, 17 insertions, 1 deletions
diff --git a/src/mbgl/map/transform_state.cpp b/src/mbgl/map/transform_state.cpp index bbf7e22b31..f052e30a6b 100644 --- a/src/mbgl/map/transform_state.cpp +++ b/src/mbgl/map/transform_state.cpp @@ -358,7 +358,7 @@ void TransformState::setLatLngZoom(const LatLng& latLng, double zoom) { constrained = bounds->constrain(latLng); } - double newScale = zoomScale(zoom); + double newScale = util::clamp(zoomScale(zoom), min_scale, max_scale); const double newWorldSize = newScale * util::tileSize; Bc = newWorldSize / util::DEGREES_MAX; Cc = newWorldSize / util::M2PI; diff --git a/test/map/transform.test.cpp b/test/map/transform.test.cpp index aa49d250b6..6d41a868dc 100644 --- a/test/map/transform.test.cpp +++ b/test/map/transform.test.cpp @@ -28,6 +28,22 @@ TEST(Transform, InvalidZoom) { ASSERT_DOUBLE_EQ(0, transform.getLatLng().latitude()); ASSERT_DOUBLE_EQ(0, transform.getLatLng().longitude()); ASSERT_DOUBLE_EQ(1, transform.getZoom()); + + transform.setZoom(transform.getState().getMaxZoom() + 0.1); + ASSERT_DOUBLE_EQ(transform.getZoom(), transform.getState().getMaxZoom()); + + CameraOptions cameraOptions; + cameraOptions.center = LatLng { util::LATITUDE_MAX, util::LONGITUDE_MAX }; + cameraOptions.zoom = transform.getState().getMaxZoom(); + + // Executing flyTo with maximum zoom level to the same zoom level causes + // frameZoom to be bigger than maximum zoom. + transform.resize(Size { 100, 100 }); + transform.flyTo(cameraOptions); + transform.updateTransitions(transform.getTransitionStart() + transform.getTransitionDuration()); + + ASSERT_TRUE(transform.getState().valid()); + ASSERT_DOUBLE_EQ(transform.getState().getMaxZoom(), transform.getZoom()); } |