diff options
-rw-r--r-- | platform/default/mbgl/storage/offline_download.cpp | 18 | ||||
-rw-r--r-- | src/mbgl/annotation/annotation_source.cpp | 2 | ||||
-rw-r--r-- | src/mbgl/style/parser.cpp | 1 | ||||
-rw-r--r-- | src/mbgl/style/parser.hpp | 3 | ||||
-rw-r--r-- | src/mbgl/style/source.cpp | 4 | ||||
-rw-r--r-- | src/mbgl/style/source.hpp | 10 | ||||
-rw-r--r-- | src/mbgl/style/sources/geojson_source.cpp | 10 | ||||
-rw-r--r-- | src/mbgl/style/sources/geojson_source.hpp | 1 | ||||
-rw-r--r-- | src/mbgl/style/tile_source.cpp | 4 | ||||
-rw-r--r-- | src/mbgl/style/tile_source.hpp | 6 | ||||
-rw-r--r-- | test/style/source.cpp | 1 | ||||
-rw-r--r-- | test/style/style_parser.cpp | 1 |
12 files changed, 32 insertions, 29 deletions
diff --git a/platform/default/mbgl/storage/offline_download.cpp b/platform/default/mbgl/storage/offline_download.cpp index 820e1cd223..932b8f3777 100644 --- a/platform/default/mbgl/storage/offline_download.cpp +++ b/platform/default/mbgl/storage/offline_download.cpp @@ -4,10 +4,12 @@ #include <mbgl/storage/resource.hpp> #include <mbgl/storage/response.hpp> #include <mbgl/style/parser.hpp> +#include <mbgl/style/tile_source.hpp> #include <mbgl/text/glyph.hpp> #include <mbgl/util/tile_cover.hpp> #include <mbgl/util/mapbox.hpp> #include <mbgl/util/run_loop.hpp> +#include <mbgl/util/tileset.hpp> #include <set> @@ -102,9 +104,10 @@ OfflineRegionStatus OfflineDownload::getStatus() const { for (const auto& source : parser.sources) { switch (source->type) { case SourceType::Vector: - case SourceType::Raster: - if (source->getTileset()) { - result.requiredResourceCount += tileResources(source->type, source->tileSize, *source->getTileset()).size(); + case SourceType::Raster: { + style::TileSource* tileSource = static_cast<style::TileSource*>(source.get()); + if (tileSource->getTileset()) { + result.requiredResourceCount += tileResources(source->type, source->tileSize, *tileSource->getTileset()).size(); } else { result.requiredResourceCount += 1; optional<Response> sourceResponse = offlineDatabase.get(Resource::source(source->url)); @@ -116,6 +119,7 @@ OfflineRegionStatus OfflineDownload::getStatus() const { } } break; + } case SourceType::GeoJSON: if (!source->url.empty()) { @@ -154,9 +158,10 @@ void OfflineDownload::activateDownload() { switch (type) { case SourceType::Vector: - case SourceType::Raster: - if (source->getTileset()) { - ensureTiles(type, tileSize, *source->getTileset()); + case SourceType::Raster: { + style::TileSource* tileSource = static_cast<style::TileSource*>(source.get()); + if (tileSource->getTileset()) { + ensureTiles(type, tileSize, *tileSource->getTileset()); } else { status.requiredResourceCountIsPrecise = false; requiredSourceURLs.insert(url); @@ -171,6 +176,7 @@ void OfflineDownload::activateDownload() { }); } break; + } case SourceType::GeoJSON: if (!source->url.empty()) { diff --git a/src/mbgl/annotation/annotation_source.cpp b/src/mbgl/annotation/annotation_source.cpp index f246d7aed8..55e6fc82a3 100644 --- a/src/mbgl/annotation/annotation_source.cpp +++ b/src/mbgl/annotation/annotation_source.cpp @@ -5,7 +5,7 @@ namespace mbgl { AnnotationSource::AnnotationSource() - : Source(SourceType::Annotations, AnnotationManager::SourceID, "", util::tileSize, std::make_unique<Tileset>()) { + : Source(SourceType::Annotations, AnnotationManager::SourceID, "", util::tileSize) { } Range<uint8_t> AnnotationSource::getZoomRange() { diff --git a/src/mbgl/style/parser.cpp b/src/mbgl/style/parser.cpp index 1ca090643d..07db3f0091 100644 --- a/src/mbgl/style/parser.cpp +++ b/src/mbgl/style/parser.cpp @@ -15,6 +15,7 @@ #include <mbgl/tile/geometry_tile_data.hpp> #include <mbgl/util/mapbox.hpp> #include <mbgl/util/enum.hpp> +#include <mbgl/util/tileset.hpp> #include <rapidjson/document.h> #include <rapidjson/error/en.h> diff --git a/src/mbgl/style/parser.hpp b/src/mbgl/style/parser.hpp index e60a33b93f..a04f73bde4 100644 --- a/src/mbgl/style/parser.hpp +++ b/src/mbgl/style/parser.hpp @@ -14,6 +14,9 @@ #include <forward_list> namespace mbgl { + +class Tileset; + namespace style { std::unique_ptr<Tileset> parseTileJSON(const std::string& json, const std::string& sourceURL, SourceType, uint16_t tileSize); diff --git a/src/mbgl/style/source.cpp b/src/mbgl/style/source.cpp index 086e0b745c..3c5690e980 100644 --- a/src/mbgl/style/source.cpp +++ b/src/mbgl/style/source.cpp @@ -35,13 +35,11 @@ static SourceObserver nullObserver; Source::Source(SourceType type_, std::string id_, std::string url_, - uint16_t tileSize_, - std::unique_ptr<Tileset>&& tileset_) + uint16_t tileSize_) : type(type_), id(std::move(id_)), url(std::move(url_)), tileSize(tileSize_), - tileset(std::move(tileset_)), observer(&nullObserver) { } diff --git a/src/mbgl/style/source.hpp b/src/mbgl/style/source.hpp index 862ee52068..36e6570fb5 100644 --- a/src/mbgl/style/source.hpp +++ b/src/mbgl/style/source.hpp @@ -10,9 +10,8 @@ #include <mbgl/util/mat4.hpp> #include <mbgl/util/rapidjson.hpp> #include <mbgl/util/feature.hpp> -#include <mbgl/util/tileset.hpp> +#include <mbgl/util/range.hpp> -#include <forward_list> #include <vector> #include <map> @@ -36,16 +35,13 @@ public: Source(SourceType, std::string id, std::string url, - uint16_t tileSize, - std::unique_ptr<Tileset>&&); + uint16_t tileSize); ~Source() override; bool loaded = false; virtual void load(FileSource&) = 0; bool isLoaded() const; - const Tileset* getTileset() const { return tileset.get(); } - // Request or parse all the tiles relevant for the "TransformState". This method // will return true if all the tiles were scheduled for updating of false if // they were not. shouldReparsePartialTiles must be set to "true" if there is @@ -91,8 +87,6 @@ private: protected: void invalidateTiles(); - std::unique_ptr<const Tileset> tileset; - SourceObserver* observer = nullptr; private: diff --git a/src/mbgl/style/sources/geojson_source.cpp b/src/mbgl/style/sources/geojson_source.cpp index dbcef95344..6e1068dadb 100644 --- a/src/mbgl/style/sources/geojson_source.cpp +++ b/src/mbgl/style/sources/geojson_source.cpp @@ -34,7 +34,6 @@ std::unique_ptr<mapbox::geojsonvt::GeoJSONVT> parseGeoJSON(const JSValue& value) std::unique_ptr<GeoJSONSource> GeoJSONSource::parse(const std::string& id, const JSValue& value) { - auto tileset = std::make_unique<Tileset>(); std::unique_ptr<mapbox::geojsonvt::GeoJSONVT> geojsonvt; std::string url; @@ -58,14 +57,13 @@ std::unique_ptr<GeoJSONSource> GeoJSONSource::parse(const std::string& id, return nullptr; } - return std::make_unique<GeoJSONSource>(id, url, std::move(tileset), std::move(geojsonvt)); + return std::make_unique<GeoJSONSource>(id, url, std::move(geojsonvt)); } GeoJSONSource::GeoJSONSource(std::string id_, std::string url_, - std::unique_ptr<Tileset>&& tileset_, std::unique_ptr<mapbox::geojsonvt::GeoJSONVT>&& geojsonvt_) - : Source(SourceType::GeoJSON, std::move(id_), std::move(url_), util::tileSize, std::move(tileset_)), + : Source(SourceType::GeoJSON, std::move(id_), std::move(url_), util::tileSize), geojsonvt(std::move(geojsonvt_)) { } @@ -94,8 +92,6 @@ void GeoJSONSource::load(FileSource& fileSource) { } else if (res.noContent) { observer->onSourceError(*this, std::make_exception_ptr(std::runtime_error("unexpectedly empty GeoJSON"))); } else { - std::unique_ptr<Tileset> newTileset = std::make_unique<Tileset>(); - rapidjson::GenericDocument<rapidjson::UTF8<>, rapidjson::CrtAllocator> d; d.Parse<0>(res.data->c_str()); @@ -107,11 +103,9 @@ void GeoJSONSource::load(FileSource& fileSource) { } geojsonvt = style::parseGeoJSON(d); - newTileset->zoomRange.max = geojsonvt->options.maxZoom; invalidateTiles(); - tileset = std::move(newTileset); loaded = true; observer->onSourceLoaded(*this); } diff --git a/src/mbgl/style/sources/geojson_source.hpp b/src/mbgl/style/sources/geojson_source.hpp index 83f5290873..7022d387e9 100644 --- a/src/mbgl/style/sources/geojson_source.hpp +++ b/src/mbgl/style/sources/geojson_source.hpp @@ -23,7 +23,6 @@ public: GeoJSONSource(std::string id, std::string url, - std::unique_ptr<Tileset>&&, std::unique_ptr<mapbox::geojsonvt::GeoJSONVT>&&); ~GeoJSONSource() final; diff --git a/src/mbgl/style/tile_source.cpp b/src/mbgl/style/tile_source.cpp index ef58d87eb5..12c62f07a5 100644 --- a/src/mbgl/style/tile_source.cpp +++ b/src/mbgl/style/tile_source.cpp @@ -1,6 +1,7 @@ #include <mbgl/style/tile_source.hpp> #include <mbgl/style/source_observer.hpp> #include <mbgl/style/parser.hpp> +#include <mbgl/util/tileset.hpp> #include <mbgl/storage/file_source.hpp> namespace mbgl { @@ -11,7 +12,8 @@ TileSource::TileSource(SourceType type_, std::string url_, uint16_t tileSize_, std::unique_ptr<Tileset>&& tileset_) - : Source(type_, std::move(id_), std::move(url_), tileSize_, std::move(tileset_)) { + : Source(type_, std::move(id_), std::move(url_), tileSize_), + tileset(std::move(tileset_)) { } TileSource::~TileSource() = default; diff --git a/src/mbgl/style/tile_source.hpp b/src/mbgl/style/tile_source.hpp index 7fa2f8157e..c0dc0da8c7 100644 --- a/src/mbgl/style/tile_source.hpp +++ b/src/mbgl/style/tile_source.hpp @@ -4,6 +4,7 @@ namespace mbgl { +class Tileset; class AsyncRequest; namespace style { @@ -23,9 +24,12 @@ public: void load(FileSource&) final; -private: + const Tileset* getTileset() const { return tileset.get(); } + +protected: Range<uint8_t> getZoomRange() final; + std::unique_ptr<const Tileset> tileset; std::unique_ptr<AsyncRequest> req; }; diff --git a/test/style/source.cpp b/test/style/source.cpp index 4348dbc7e7..7a574e9e51 100644 --- a/test/style/source.cpp +++ b/test/style/source.cpp @@ -9,6 +9,7 @@ #include <mbgl/util/run_loop.hpp> #include <mbgl/util/string.hpp> #include <mbgl/util/io.hpp> +#include <mbgl/util/tileset.hpp> #include <mbgl/platform/log.hpp> #include <mbgl/map/transform.hpp> diff --git a/test/style/style_parser.cpp b/test/style/style_parser.cpp index 02a4077ab9..f3fef24352 100644 --- a/test/style/style_parser.cpp +++ b/test/style/style_parser.cpp @@ -4,6 +4,7 @@ #include <mbgl/style/parser.hpp> #include <mbgl/util/io.hpp> #include <mbgl/util/enum.hpp> +#include <mbgl/util/tileset.hpp> #include <rapidjson/document.h> |