diff options
-rw-r--r-- | include/mbgl/style/source.hpp | 5 | ||||
-rw-r--r-- | src/mbgl/annotation/annotation_source.cpp | 2 | ||||
-rw-r--r-- | src/mbgl/annotation/annotation_source.hpp | 2 | ||||
-rw-r--r-- | src/mbgl/style/source.cpp | 6 | ||||
-rw-r--r-- | src/mbgl/style/source_impl.hpp | 2 | ||||
-rw-r--r-- | src/mbgl/style/sources/geojson_source_impl.cpp | 2 | ||||
-rw-r--r-- | src/mbgl/style/sources/geojson_source_impl.hpp | 3 | ||||
-rw-r--r-- | src/mbgl/style/tile_source_impl.cpp | 2 | ||||
-rw-r--r-- | src/mbgl/style/tile_source_impl.hpp | 4 | ||||
-rw-r--r-- | test/style/source.test.cpp | 24 |
10 files changed, 42 insertions, 10 deletions
diff --git a/include/mbgl/style/source.hpp b/include/mbgl/style/source.hpp index 0901bb1954..262fc3010c 100644 --- a/include/mbgl/style/source.hpp +++ b/include/mbgl/style/source.hpp @@ -3,6 +3,7 @@ #include <mbgl/util/feature.hpp> #include <mbgl/util/noncopyable.hpp> #include <mbgl/util/optional.hpp> +#include <mbgl/util/range.hpp> #include <mbgl/style/types.hpp> #include <mbgl/style/query.hpp> @@ -55,7 +56,9 @@ public: std::unique_ptr<Source> copy(const std::string& id) const; optional<std::string> getAttribution() const; - + + Range<uint8_t> getZoomRange() const; + std::vector<Feature> querySourceFeatures(const SourceQueryOptions& options = {}); // Private implementation diff --git a/src/mbgl/annotation/annotation_source.cpp b/src/mbgl/annotation/annotation_source.cpp index a9db9ad8ae..7434029c4b 100644 --- a/src/mbgl/annotation/annotation_source.cpp +++ b/src/mbgl/annotation/annotation_source.cpp @@ -14,7 +14,7 @@ AnnotationSource::Impl::Impl(Source& base_) : Source::Impl(SourceType::Annotations, AnnotationManager::SourceID, base_) { } -Range<uint8_t> AnnotationSource::Impl::getZoomRange() { +Range<uint8_t> AnnotationSource::Impl::getZoomRange() const { return { 0, 22 }; } diff --git a/src/mbgl/annotation/annotation_source.hpp b/src/mbgl/annotation/annotation_source.hpp index d995222f33..62d1aa3488 100644 --- a/src/mbgl/annotation/annotation_source.hpp +++ b/src/mbgl/annotation/annotation_source.hpp @@ -20,7 +20,7 @@ public: private: uint16_t getTileSize() const final { return util::tileSize; } - Range<uint8_t> getZoomRange() final; + Range<uint8_t> getZoomRange() const final; std::unique_ptr<Tile> createTile(const OverscaledTileID&, const style::UpdateParameters&) final; }; diff --git a/src/mbgl/style/source.cpp b/src/mbgl/style/source.cpp index 25c06024d6..9ef245ac34 100644 --- a/src/mbgl/style/source.cpp +++ b/src/mbgl/style/source.cpp @@ -17,7 +17,11 @@ const std::string& Source::getID() const { optional<std::string> Source::getAttribution() const { return baseImpl->getAttribution(); } - + +Range<uint8_t> Source::getZoomRange() const { + return baseImpl->getZoomRange(); +} + std::vector<Feature> Source::querySourceFeatures(const SourceQueryOptions& options) { return baseImpl->querySourceFeatures(options); } diff --git a/src/mbgl/style/source_impl.hpp b/src/mbgl/style/source_impl.hpp index b9707edaa7..fbec2b0eba 100644 --- a/src/mbgl/style/source_impl.hpp +++ b/src/mbgl/style/source_impl.hpp @@ -83,6 +83,7 @@ public: const std::string id; virtual optional<std::string> getAttribution() const { return {}; }; + virtual Range<uint8_t> getZoomRange() const = 0; bool loaded = false; @@ -109,7 +110,6 @@ private: void onTileError(Tile&, std::exception_ptr) override; virtual uint16_t getTileSize() const = 0; - virtual Range<uint8_t> getZoomRange() = 0; virtual std::unique_ptr<Tile> createTile(const OverscaledTileID&, const UpdateParameters&) = 0; std::map<UnwrappedTileID, RenderTile> renderTiles; diff --git a/src/mbgl/style/sources/geojson_source_impl.cpp b/src/mbgl/style/sources/geojson_source_impl.cpp index c7c3753076..5ceb4f71e0 100644 --- a/src/mbgl/style/sources/geojson_source_impl.cpp +++ b/src/mbgl/style/sources/geojson_source_impl.cpp @@ -153,7 +153,7 @@ void GeoJSONSource::Impl::loadDescription(FileSource& fileSource) { }); } -Range<uint8_t> GeoJSONSource::Impl::getZoomRange() { +Range<uint8_t> GeoJSONSource::Impl::getZoomRange() const { assert(loaded); return { 0, options.maxzoom }; } diff --git a/src/mbgl/style/sources/geojson_source_impl.hpp b/src/mbgl/style/sources/geojson_source_impl.hpp index eec7cf0605..05302d6bc0 100644 --- a/src/mbgl/style/sources/geojson_source_impl.hpp +++ b/src/mbgl/style/sources/geojson_source_impl.hpp @@ -28,10 +28,11 @@ public: return util::tileSize; } + Range<uint8_t> getZoomRange() const final; + private: void _setGeoJSON(const GeoJSON&); - Range<uint8_t> getZoomRange() final; std::unique_ptr<Tile> createTile(const OverscaledTileID&, const UpdateParameters&) final; GeoJSONOptions options; diff --git a/src/mbgl/style/tile_source_impl.cpp b/src/mbgl/style/tile_source_impl.cpp index bda602bb5f..44a25a8bfb 100644 --- a/src/mbgl/style/tile_source_impl.cpp +++ b/src/mbgl/style/tile_source_impl.cpp @@ -113,7 +113,7 @@ void TileSourceImpl::loadDescription(FileSource& fileSource) { }); } -Range<uint8_t> TileSourceImpl::getZoomRange() { +Range<uint8_t> TileSourceImpl::getZoomRange() const { assert(loaded); return tileset.zoomRange; } diff --git a/src/mbgl/style/tile_source_impl.hpp b/src/mbgl/style/tile_source_impl.hpp index 2b17872d2b..1fda3b3769 100644 --- a/src/mbgl/style/tile_source_impl.hpp +++ b/src/mbgl/style/tile_source_impl.hpp @@ -36,9 +36,9 @@ public: optional<std::string> getAttribution() const override; -protected: - Range<uint8_t> getZoomRange() final; + Range<uint8_t> getZoomRange() const final; +protected: const variant<std::string, Tileset> urlOrTileset; const uint16_t tileSize; diff --git a/test/style/source.test.cpp b/test/style/source.test.cpp index fb7737e417..feb7b6b05a 100644 --- a/test/style/source.test.cpp +++ b/test/style/source.test.cpp @@ -19,6 +19,7 @@ #include <mbgl/style/update_parameters.hpp> #include <mbgl/style/layers/line_layer.hpp> #include <mbgl/annotation/annotation_manager.hpp> +#include <mbgl/annotation/annotation_source.hpp> #include <mapbox/geojsonvt.hpp> @@ -65,6 +66,29 @@ public: } }; +TEST(Source, DefaultZoomRange) { + VectorSource vectorSource("vectorSource", "url"); + vectorSource.baseImpl->loaded = true; + EXPECT_EQ(vectorSource.getZoomRange().min, 0u); + EXPECT_EQ(vectorSource.getZoomRange().max, 22u); + + GeoJSONSource geojsonSource("source"); + geojsonSource.baseImpl->loaded = true; + EXPECT_EQ(geojsonSource.getZoomRange().min, 0u); + EXPECT_EQ(geojsonSource.getZoomRange().max, 18u); + + Tileset tileset; + RasterSource rasterSource("source", tileset, 512); + rasterSource.baseImpl->loaded = true; + EXPECT_EQ(rasterSource.getZoomRange().min, 0u); + EXPECT_EQ(rasterSource.getZoomRange().max, 22u); + EXPECT_EQ(rasterSource.getZoomRange(), tileset.zoomRange); + + AnnotationSource annotationSource; + EXPECT_EQ(annotationSource.getZoomRange().min, 0u); + EXPECT_EQ(annotationSource.getZoomRange().max, 22u); +} + TEST(Source, LoadingFail) { SourceTest test; |