summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnsis Brammanis <ansis@mapbox.com>2019-12-06 12:04:08 -0500
committerAnsis Brammanis <ansis@mapbox.com>2019-12-06 12:04:08 -0500
commit0cefb9cf139d748e1b35f341cc31c2c2a401e2f0 (patch)
tree82bf1e3bf53aa5413c62fdb5c946f91a9841e329
parent6f9edf80ee3d11f5c15a460d6937a2916ded3755 (diff)
downloadqtlocation-mapboxgl-upstream/ansis-negative-zoom.tar.gz
allow world to be rendered small than 512pxupstream/ansis-negative-zoom
fix #16019
-rw-r--r--include/mbgl/util/constants.hpp3
-rw-r--r--src/mbgl/map/transform_state.hpp2
-rw-r--r--src/mbgl/util/tile_cover.cpp3
3 files changed, 5 insertions, 3 deletions
diff --git a/include/mbgl/util/constants.hpp b/include/mbgl/util/constants.hpp
index ffdc4b2b30..1c703b45e2 100644
--- a/include/mbgl/util/constants.hpp
+++ b/include/mbgl/util/constants.hpp
@@ -35,11 +35,12 @@ constexpr double LONGITUDE_MAX = 180;
constexpr double DEGREES_MAX = 360;
constexpr double PITCH_MIN = 0.0;
constexpr double PITCH_MAX = M_PI / 3;
-constexpr double MIN_ZOOM = 0.0;
+constexpr double MIN_ZOOM = -2;
constexpr double MAX_ZOOM = 25.5;
constexpr float MIN_ZOOM_F = MIN_ZOOM;
constexpr float MAX_ZOOM_F = MAX_ZOOM;
constexpr uint8_t DEFAULT_MAX_ZOOM = 22;
+constexpr int8_t DEFAULT_MIN_ZOOM = -2;
// ONE_EM constant used to go between "em" units used in style spec and "points" used internally for layout.
constexpr float ONE_EM = 24.0f;
diff --git a/src/mbgl/map/transform_state.hpp b/src/mbgl/map/transform_state.hpp
index edc7f3b9cf..d1f6d24b0c 100644
--- a/src/mbgl/map/transform_state.hpp
+++ b/src/mbgl/map/transform_state.hpp
@@ -221,7 +221,7 @@ private:
LatLngBounds bounds;
// Limit the amount of zooming possible on the map.
- double min_scale = std::pow(2, 0);
+ double min_scale = std::pow(2, util::DEFAULT_MIN_ZOOM);
double max_scale = std::pow(2, util::DEFAULT_MAX_ZOOM);
NorthOrientation orientation = NorthOrientation::Upwards;
diff --git a/src/mbgl/util/tile_cover.cpp b/src/mbgl/util/tile_cover.cpp
index 9e2451e1af..c7ef73c4ba 100644
--- a/src/mbgl/util/tile_cover.cpp
+++ b/src/mbgl/util/tile_cover.cpp
@@ -131,7 +131,8 @@ std::vector<UnwrappedTileID> tileCover(const Point<double>& tl,
} // namespace
int32_t coveringZoomLevel(double zoom, style::SourceType type, uint16_t size) {
- zoom += util::log2(util::tileSize / size);
+ // At negative zoom levels load tiles from z0 because negative tile zoom levels don't exist.
+ zoom = ::fmax(0.0, zoom + util::log2(util::tileSize / size));
if (type == style::SourceType::Raster || type == style::SourceType::Video) {
return ::round(zoom);
} else {