[core] Eliminate TileData dependency on TileSource

This commit is contained in:
John Firebaugh
2016-06-06 17:15:23 -07:00
committed by Konstantin Käfer
parent dbf16440a6
commit b45713e5e9
10 changed files with 53 additions and 24 deletions

View File

@@ -8,8 +8,13 @@ AnnotationTileData::AnnotationTileData(const OverscaledTileID& overscaledTileID,
std::string sourceID,
const style::UpdateParameters& parameters)
: GeometryTileData(overscaledTileID, sourceID, parameters.style, parameters.mode) {
setTileSource(std::make_unique<AnnotationTileSource>(
*this, overscaledTileID, parameters.annotationManager));
tileSource = std::make_unique<AnnotationTileSource>(*this, overscaledTileID, parameters.annotationManager);
}
AnnotationTileData::~AnnotationTileData() = default;
void AnnotationTileData::setNecessity(Necessity necessity) {
tileSource->setNecessity(static_cast<TileSource::Necessity>(necessity));
}
} // namespace mbgl

View File

@@ -4,6 +4,8 @@
namespace mbgl {
class TileSource;
namespace style {
class UpdateParameters;
}
@@ -13,6 +15,12 @@ public:
AnnotationTileData(const OverscaledTileID&,
std::string sourceID,
const style::UpdateParameters&);
~AnnotationTileData();
void setNecessity(Necessity) final;
private:
std::unique_ptr<TileSource> tileSource;
};
} // namespace mbgl

View File

@@ -9,9 +9,13 @@ GeoJSONTileData::GeoJSONTileData(const OverscaledTileID& overscaledTileID,
const style::UpdateParameters& parameters,
mapbox::geojsonvt::GeoJSONVT* geojsonvt)
: GeometryTileData(overscaledTileID, sourceID, parameters.style, parameters.mode) {
setTileSource(
std::make_unique<GeoJSONTileSource>(*this, geojsonvt, overscaledTileID));
tileSource = std::make_unique<GeoJSONTileSource>(*this, geojsonvt, overscaledTileID);
}
GeoJSONTileData::~GeoJSONTileData() = default;
void GeoJSONTileData::setNecessity(Necessity necessity) {
tileSource->setNecessity(static_cast<TileSource::Necessity>(necessity));
}
} // namespace mbgl

View File

@@ -10,6 +10,8 @@ class GeoJSONVT;
namespace mbgl {
class TileSource;
namespace style {
class UpdateParameters;
}
@@ -20,6 +22,12 @@ public:
std::string sourceID,
const style::UpdateParameters&,
mapbox::geojsonvt::GeoJSONVT*);
~GeoJSONTileData();
void setNecessity(Necessity) final;
private:
std::unique_ptr<TileSource> tileSource;
};
} // namespace mbgl

View File

@@ -21,8 +21,7 @@ RasterTileData::RasterTileData(const OverscaledTileID& id_,
const auto resource = Resource::tile(
tileset.tiles.at(0), parameters.pixelRatio, id_.canonical.x,
id_.canonical.y, id_.canonical.z);
setTileSource(
std::make_unique<ImageTileSource>(*this, resource, parameters.fileSource));
tileSource = std::make_unique<ImageTileSource>(*this, resource, parameters.fileSource);
}
void RasterTileData::setError(std::exception_ptr err) {
@@ -68,6 +67,10 @@ Bucket* RasterTileData::getBucket(const style::Layer&) {
return bucket.get();
}
void RasterTileData::setNecessity(Necessity necessity) {
tileSource->setNecessity(static_cast<TileSource::Necessity>(necessity));
}
void RasterTileData::cancel() {
workRequest.reset();
}

View File

@@ -8,6 +8,7 @@ namespace mbgl {
class RasterTileSource;
class AsyncRequest;
class Tileset;
class TileSource;
namespace gl { class TexturePool; }
@@ -23,6 +24,8 @@ public:
const Tileset&);
~RasterTileData();
void setNecessity(Necessity) final;
void setError(std::exception_ptr err);
void setData(std::shared_ptr<const std::string> data,
@@ -36,6 +39,7 @@ private:
gl::TexturePool& texturePool;
Worker& worker;
std::unique_ptr<TileSource> tileSource;
std::unique_ptr<AsyncRequest> workRequest;
// Contains the Bucket object for the tile. Buckets are render

View File

@@ -1,6 +1,5 @@
#include <mbgl/tile/tile_data.hpp>
#include <mbgl/tile/tile_data_observer.hpp>
#include <mbgl/tile/tile_source.hpp>
#include <mbgl/renderer/debug_bucket.hpp>
#include <mbgl/util/string.hpp>
@@ -18,16 +17,6 @@ void TileData::setObserver(TileDataObserver* observer_) {
observer = observer_;
}
void TileData::setTileSource(std::unique_ptr<TileSource> tileSource_) {
assert(!tileSource);
assert(tileSource_);
tileSource = std::move(tileSource_);
}
void TileData::setNecessity(Necessity necessity) {
tileSource->setNecessity(static_cast<TileSource::Necessity>(necessity));
}
void TileData::setTriedOptional() {
triedOptional = true;
observer->onNeedsRepaint();

View File

@@ -19,7 +19,6 @@ namespace mbgl {
class Worker;
class DebugBucket;
class TransformState;
class TileSource;
class TileDataObserver;
namespace style {
@@ -38,7 +37,7 @@ public:
Required = true,
};
void setNecessity(Necessity);
virtual void setNecessity(Necessity) = 0;
// Mark this tile as no longer needed and cancel any pending work.
virtual void cancel() = 0;
@@ -104,9 +103,6 @@ protected:
DataAvailability availableData = DataAvailability::None;
void setTileSource(std::unique_ptr<TileSource>);
std::unique_ptr<TileSource> tileSource;
TileDataObserver* observer = nullptr;
};

View File

@@ -15,8 +15,13 @@ VectorTileData::VectorTileData(const OverscaledTileID& overscaledTileID,
const auto resource = Resource::tile(
tileset.tiles.at(0), parameters.pixelRatio, overscaledTileID.canonical.x,
overscaledTileID.canonical.y, overscaledTileID.canonical.z);
setTileSource(
std::make_unique<VectorTileSource>(*this, resource, parameters.fileSource));
tileSource = std::make_unique<VectorTileSource>(*this, resource, parameters.fileSource);
}
VectorTileData::~VectorTileData() = default;
void VectorTileData::setNecessity(Necessity necessity) {
tileSource->setNecessity(static_cast<TileSource::Necessity>(necessity));
}
} // namespace mbgl

View File

@@ -5,6 +5,7 @@
namespace mbgl {
class Tileset;
class TileSource;
namespace style {
class UpdateParameters;
@@ -16,6 +17,12 @@ public:
std::string sourceID,
const style::UpdateParameters&,
const Tileset&);
~VectorTileData();
void setNecessity(Necessity) final;
private:
std::unique_ptr<TileSource> tileSource;
};
} // namespace mbgl