[core] Eliminate Source dependency on TileSource
This commit is contained in:
committed by
Konstantin Käfer
parent
c3a8534a43
commit
dbf16440a6
@@ -2,7 +2,6 @@
|
||||
#include <mbgl/style/source_observer.hpp>
|
||||
#include <mbgl/map/transform.hpp>
|
||||
#include <mbgl/tile/tile.hpp>
|
||||
#include <mbgl/tile/tile_source.hpp>
|
||||
#include <mbgl/renderer/painter.hpp>
|
||||
#include <mbgl/util/exception.hpp>
|
||||
#include <mbgl/util/constants.hpp>
|
||||
@@ -244,8 +243,8 @@ bool Source::update(const UpdateParameters& parameters) {
|
||||
|
||||
auto retainTileDataFn = [&retain](TileData& tileData, bool required) -> void {
|
||||
retain.emplace(tileData.id);
|
||||
tileData.getTileSource()->setNecessity(required ? TileSource::Necessity::Required
|
||||
: TileSource::Necessity::Optional);
|
||||
tileData.setNecessity(required ? TileData::Necessity::Required
|
||||
: TileData::Necessity::Optional);
|
||||
};
|
||||
auto getTileDataFn = [this](const OverscaledTileID& dataTileID) -> TileData* {
|
||||
return getTileData(dataTileID);
|
||||
@@ -288,7 +287,7 @@ bool Source::update(const UpdateParameters& parameters) {
|
||||
auto retainIt = retain.begin();
|
||||
while (dataIt != tileDataMap.end()) {
|
||||
if (retainIt == retain.end() || dataIt->first < *retainIt) {
|
||||
dataIt->second->getTileSource()->setNecessity(TileSource::Necessity::Optional);
|
||||
dataIt->second->setNecessity(TileData::Necessity::Optional);
|
||||
cache.add(dataIt->first, std::move(dataIt->second));
|
||||
tileDataMap.erase(dataIt++);
|
||||
} else {
|
||||
|
||||
@@ -24,6 +24,10 @@ void TileData::setTileSource(std::unique_ptr<TileSource> tileSource_) {
|
||||
tileSource = std::move(tileSource_);
|
||||
}
|
||||
|
||||
void TileData::setNecessity(Necessity necessity) {
|
||||
tileSource->setNecessity(static_cast<TileSource::Necessity>(necessity));
|
||||
}
|
||||
|
||||
void TileData::setTriedOptional() {
|
||||
triedOptional = true;
|
||||
observer->onNeedsRepaint();
|
||||
|
||||
@@ -32,8 +32,13 @@ public:
|
||||
virtual ~TileData();
|
||||
|
||||
void setObserver(TileDataObserver* observer);
|
||||
void setTileSource(std::unique_ptr<TileSource>);
|
||||
TileSource* getTileSource() { return tileSource.get(); }
|
||||
|
||||
enum class Necessity : bool {
|
||||
Optional = false,
|
||||
Required = true,
|
||||
};
|
||||
|
||||
void setNecessity(Necessity);
|
||||
|
||||
// Mark this tile as no longer needed and cancel any pending work.
|
||||
virtual void cancel() = 0;
|
||||
@@ -99,6 +104,7 @@ protected:
|
||||
|
||||
DataAvailability availableData = DataAvailability::None;
|
||||
|
||||
void setTileSource(std::unique_ptr<TileSource>);
|
||||
std::unique_ptr<TileSource> tileSource;
|
||||
|
||||
TileDataObserver* observer = nullptr;
|
||||
|
||||
Reference in New Issue
Block a user