[core] Prepare style observer interfaces for source reloading
* Renamed {Source,Tile}Observer::onNeedsRepaint to onTileUpdated. Messages should be in terms of what happened to the observed object, not in terms of what the observer needs to do. This also removes a confusing overlap of virtual methods on StyleObserver.
* Added style::Observer::onUpdate(Update). This is also a violation of the above rule, but I'm hopeful that it will disappear when update batching is implemented.
This commit is contained in:
@@ -37,7 +37,7 @@ class Map::Impl : public style::Observer {
|
||||
public:
|
||||
Impl(View&, FileSource&, MapMode, GLContextMode, ConstrainMode, ViewportMode);
|
||||
|
||||
void onNeedsRepaint() override;
|
||||
void onUpdate(Update) override;
|
||||
void onStyleError() override;
|
||||
void onResourceError(std::exception_ptr) override;
|
||||
|
||||
@@ -149,12 +149,7 @@ void Map::renderStill(StillImageCallback callback) {
|
||||
}
|
||||
|
||||
void Map::update(Update flags) {
|
||||
if (flags & Update::Dimensions) {
|
||||
impl->transform.resize(impl->view.getSize());
|
||||
}
|
||||
|
||||
impl->updateFlags |= flags;
|
||||
impl->asyncUpdate.send();
|
||||
impl->onUpdate(flags);
|
||||
}
|
||||
|
||||
void Map::render() {
|
||||
@@ -905,8 +900,12 @@ void Map::onLowMemory() {
|
||||
impl->view.invalidate();
|
||||
}
|
||||
|
||||
void Map::Impl::onNeedsRepaint() {
|
||||
updateFlags |= Update::Repaint;
|
||||
void Map::Impl::onUpdate(Update flags) {
|
||||
if (flags & Update::Dimensions) {
|
||||
transform.resize(view.getSize());
|
||||
}
|
||||
|
||||
updateFlags |= flags;
|
||||
asyncUpdate.send();
|
||||
}
|
||||
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
#include <mbgl/text/glyph_store_observer.hpp>
|
||||
#include <mbgl/sprite/sprite_store_observer.hpp>
|
||||
#include <mbgl/style/source_observer.hpp>
|
||||
#include <mbgl/map/update.hpp>
|
||||
|
||||
namespace mbgl {
|
||||
namespace style {
|
||||
@@ -11,13 +12,7 @@ class Observer : public GlyphStoreObserver,
|
||||
public SpriteStoreObserver,
|
||||
public SourceObserver {
|
||||
public:
|
||||
/**
|
||||
* In addition to the individual glyph, sprite, and source events, the
|
||||
* following "rollup" events are provided for convenience. They are
|
||||
* strictly additive; e.g. when a source is loaded, both `onSourceLoaded`
|
||||
* and `onNeedsRepaint` will be called.
|
||||
*/
|
||||
void onNeedsRepaint() override {}
|
||||
virtual void onUpdate(Update) {}
|
||||
virtual void onStyleError() {}
|
||||
virtual void onResourceError(std::exception_ptr) {}
|
||||
};
|
||||
|
||||
@@ -266,8 +266,8 @@ void Source::Impl::onTileError(Tile& tile, std::exception_ptr error) {
|
||||
observer->onTileError(base, tile.id, error);
|
||||
}
|
||||
|
||||
void Source::Impl::onNeedsRepaint() {
|
||||
observer->onNeedsRepaint();
|
||||
void Source::Impl::onTileUpdated(Tile& tile) {
|
||||
observer->onTileUpdated(base, tile.id);
|
||||
}
|
||||
|
||||
void Source::Impl::dumpDebugLogs() const {
|
||||
|
||||
@@ -86,7 +86,7 @@ private:
|
||||
// TileObserver implementation.
|
||||
void onTileLoaded(Tile&, bool isNewTile) override;
|
||||
void onTileError(Tile&, std::exception_ptr) override;
|
||||
void onNeedsRepaint() override;
|
||||
void onTileUpdated(Tile&) override;
|
||||
|
||||
virtual uint16_t getTileSize() const = 0;
|
||||
virtual Range<uint8_t> getZoomRange() = 0;
|
||||
|
||||
@@ -16,9 +16,10 @@ public:
|
||||
|
||||
virtual void onSourceLoaded(Source&) {}
|
||||
virtual void onSourceError(Source&, std::exception_ptr) {}
|
||||
|
||||
virtual void onTileLoaded(Source&, const OverscaledTileID&, bool /* isNewTile */) {}
|
||||
virtual void onTileError(Source&, const OverscaledTileID&, std::exception_ptr) {}
|
||||
virtual void onNeedsRepaint() {}
|
||||
virtual void onTileUpdated(Source&, const OverscaledTileID&) {}
|
||||
};
|
||||
|
||||
} // namespace style
|
||||
|
||||
@@ -423,7 +423,7 @@ void Style::setObserver(style::Observer* observer_) {
|
||||
void Style::onGlyphsLoaded(const FontStack& fontStack, const GlyphRange& glyphRange) {
|
||||
shouldReparsePartialTiles = true;
|
||||
observer->onGlyphsLoaded(fontStack, glyphRange);
|
||||
observer->onNeedsRepaint();
|
||||
observer->onUpdate(Update::Repaint);
|
||||
}
|
||||
|
||||
void Style::onGlyphsError(const FontStack& fontStack, const GlyphRange& glyphRange, std::exception_ptr error) {
|
||||
@@ -436,7 +436,7 @@ void Style::onGlyphsError(const FontStack& fontStack, const GlyphRange& glyphRan
|
||||
|
||||
void Style::onSourceLoaded(Source& source) {
|
||||
observer->onSourceLoaded(source);
|
||||
observer->onNeedsRepaint();
|
||||
observer->onUpdate(Update::Repaint);
|
||||
}
|
||||
|
||||
void Style::onSourceError(Source& source, std::exception_ptr error) {
|
||||
@@ -453,7 +453,7 @@ void Style::onTileLoaded(Source& source, const OverscaledTileID& tileID, bool is
|
||||
}
|
||||
|
||||
observer->onTileLoaded(source, tileID, isNewTile);
|
||||
observer->onNeedsRepaint();
|
||||
observer->onUpdate(Update::Repaint);
|
||||
}
|
||||
|
||||
void Style::onTileError(Source& source, const OverscaledTileID& tileID, std::exception_ptr error) {
|
||||
@@ -464,14 +464,14 @@ void Style::onTileError(Source& source, const OverscaledTileID& tileID, std::exc
|
||||
observer->onResourceError(error);
|
||||
}
|
||||
|
||||
void Style::onNeedsRepaint() {
|
||||
observer->onNeedsRepaint();
|
||||
void Style::onTileUpdated(Source&, const OverscaledTileID&) {
|
||||
observer->onUpdate(Update::Repaint);
|
||||
}
|
||||
|
||||
void Style::onSpriteLoaded() {
|
||||
shouldReparsePartialTiles = true;
|
||||
observer->onSpriteLoaded();
|
||||
observer->onNeedsRepaint();
|
||||
observer->onUpdate(Update::Repaint);
|
||||
}
|
||||
|
||||
void Style::onSpriteError(std::exception_ptr error) {
|
||||
|
||||
@@ -127,7 +127,7 @@ private:
|
||||
void onSourceError(Source&, std::exception_ptr) override;
|
||||
void onTileLoaded(Source&, const OverscaledTileID&, bool isNewTile) override;
|
||||
void onTileError(Source&, const OverscaledTileID&, std::exception_ptr) override;
|
||||
void onNeedsRepaint() override;
|
||||
void onTileUpdated(Source&, const OverscaledTileID&) override;
|
||||
|
||||
Observer nullObserver;
|
||||
Observer* observer = &nullObserver;
|
||||
|
||||
@@ -213,7 +213,7 @@ void GeometryTile::redoPlacement() {
|
||||
if (placedConfig != targetConfig) {
|
||||
redoPlacement();
|
||||
} else {
|
||||
observer->onNeedsRepaint();
|
||||
observer->onTileUpdated(*this);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@@ -18,7 +18,7 @@ void Tile::setObserver(TileObserver* observer_) {
|
||||
|
||||
void Tile::setTriedOptional() {
|
||||
triedOptional = true;
|
||||
observer->onNeedsRepaint();
|
||||
observer->onTileUpdated(*this);
|
||||
}
|
||||
|
||||
void Tile::dumpDebugLogs() const {
|
||||
|
||||
@@ -12,7 +12,7 @@ public:
|
||||
|
||||
virtual void onTileLoaded(Tile&, bool /*isNewTile*/) {}
|
||||
virtual void onTileError(Tile&, std::exception_ptr) {}
|
||||
virtual void onNeedsRepaint() {}
|
||||
virtual void onTileUpdated(Tile&) {}
|
||||
};
|
||||
|
||||
} // namespace mbgl
|
||||
|
||||
@@ -43,8 +43,8 @@ public:
|
||||
if (tileError) tileError(source, tileID, error);
|
||||
}
|
||||
|
||||
void onNeedsRepaint() override {
|
||||
if (needsRepaint) needsRepaint();
|
||||
void onTileUpdated(Source& source, const OverscaledTileID& tileID) override {
|
||||
if (tileUpdated) tileUpdated(source, tileID);
|
||||
};
|
||||
|
||||
void onResourceError(std::exception_ptr error) override {
|
||||
@@ -59,6 +59,6 @@ public:
|
||||
std::function<void (Source&, std::exception_ptr)> sourceError;
|
||||
std::function<void (Source&, const OverscaledTileID&, bool isNewTile)> tileLoaded;
|
||||
std::function<void (Source&, const OverscaledTileID&, std::exception_ptr)> tileError;
|
||||
std::function<void ()> needsRepaint;
|
||||
std::function<void (Source&, const OverscaledTileID&)> tileUpdated;
|
||||
std::function<void (std::exception_ptr)> resourceError;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user