diff options
Diffstat (limited to 'src/mbgl/style/style.hpp')
-rw-r--r-- | src/mbgl/style/style.hpp | 66 |
1 files changed, 57 insertions, 9 deletions
diff --git a/src/mbgl/style/style.hpp b/src/mbgl/style/style.hpp index 42d7b0b9a0..c70f019c43 100644 --- a/src/mbgl/style/style.hpp +++ b/src/mbgl/style/style.hpp @@ -4,6 +4,10 @@ #include <mbgl/style/property_transition.hpp> #include <mbgl/style/zoom_history.hpp> +#include <mbgl/map/source.hpp> +#include <mbgl/map/sprite.hpp> +#include <mbgl/text/glyph_store.hpp> + #include <mbgl/util/uv.hpp> #include <mbgl/util/ptr.hpp> #include <mbgl/util/noncopyable.hpp> @@ -16,33 +20,77 @@ namespace mbgl { -class Source; +class Environment; +class GlyphAtlas; +class GlyphStore; +class SpriteAtlas; +class LineAtlas; class StyleLayer; -class Style : public util::noncopyable { +class Style : public GlyphStore::Observer, + public Source::Observer, + public Sprite::Observer, + public util::noncopyable { public: - Style(); + Style(const std::string& data, + const std::string& base, + uv_loop_t*, Environment&); ~Style(); - void loadJSON(const uint8_t *const data); + class Observer { + public: + virtual ~Observer() = default; + + virtual void onTileDataChanged() = 0; + virtual void onResourceLoadingFailed(std::exception_ptr error) = 0; + }; + + void setObserver(Observer*); + bool isLoaded() const; + // Fetch the tiles needed by the current viewport and emit a signal when + // a tile is ready so observers can render the tile. + void update(MapData&, const TransformState&, TexturePool&); + void cascade(const std::vector<std::string>&); void recalculate(float z, TimePoint now); void setDefaultTransitionDuration(Duration); bool hasTransitions() const; - const std::string &getSpriteURL() const; + std::unique_ptr<GlyphStore> glyphStore; + std::unique_ptr<GlyphAtlas> glyphAtlas; + util::ptr<Sprite> sprite; + std::unique_ptr<SpriteAtlas> spriteAtlas; + std::unique_ptr<LineAtlas> lineAtlas; std::vector<util::ptr<Source>> sources; std::vector<util::ptr<StyleLayer>> layers; - std::string glyph_url; - std::string base; private: - bool loaded = false; - std::string sprite_url; + // GlyphStore::Observer implementation. + void onGlyphRangeLoaded() override; + void onGlyphRangeLoadingFailed(std::exception_ptr error) override; + + // Source::Observer implementation. + void onSourceLoaded() override; + void onSourceLoadingFailed(std::exception_ptr error) override; + void onTileLoaded(bool isNewTile) override; + void onTileLoadingFailed(std::exception_ptr error) override; + + // Sprite::Observer implementation. + void onSpriteLoaded() override; + void onSpriteLoadingFailed(std::exception_ptr error) override; + + void emitTileDataChanged(); + void emitResourceLoadingFailed(std::exception_ptr error); + + bool shouldReparsePartialTiles = false; + + Observer* observer = nullptr; + + std::string spriteURL; PropertyTransition defaultTransition; std::unique_ptr<uv::rwlock> mtx; ZoomHistory zoomHistory; |