[core] Push Source::tileset down to TileSource
This commit is contained in:
@@ -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()) {
|
||||
|
||||
@@ -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() {
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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) {
|
||||
}
|
||||
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -23,7 +23,6 @@ public:
|
||||
|
||||
GeoJSONSource(std::string id,
|
||||
std::string url,
|
||||
std::unique_ptr<Tileset>&&,
|
||||
std::unique_ptr<mapbox::geojsonvt::GeoJSONVT>&&);
|
||||
~GeoJSONSource() final;
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user