#pragma once #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include namespace mbgl { class FileSource; class GlyphAtlas; class SpriteAtlas; class LineAtlas; class RenderData; namespace style { class UpdateParameters; class QueryParameters; class Style : public GlyphStoreObserver, public SpriteStoreObserver, public SourceObserver, public util::noncopyable { public: Style(FileSource&, float pixelRatio); ~Style() override; void setJSON(const std::string&); 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(const UpdateParameters&); void cascade(const TimePoint&, MapMode); void recalculate(float z, const TimePoint&, MapMode); bool hasTransitions() const; std::exception_ptr getLastError() const { return lastError; } Source* getSource(const std::string& id) const; void addSource(std::unique_ptr); std::vector> getLayers() const; Layer* getLayer(const std::string& id) const; void addLayer(std::unique_ptr, optional beforeLayerID = {}); void removeLayer(const std::string& layerID); bool addClass(const std::string&, const TransitionOptions& = {}); bool removeClass(const std::string&, const TransitionOptions& = {}); bool hasClass(const std::string&) const; void setClasses(const std::vector&, const TransitionOptions& = {}); std::vector getClasses() const; RenderData getRenderData() const; std::vector queryRenderedFeatures(const QueryParameters&) const; float getQueryRadius() const; void setSourceTileCacheSize(size_t); void onLowMemory(); void dumpDebugLogs() const; FileSource& fileSource; std::unique_ptr glyphStore; std::unique_ptr glyphAtlas; std::unique_ptr spriteStore; std::unique_ptr spriteAtlas; std::unique_ptr lineAtlas; private: std::vector> sources; std::vector> layers; std::vector classes; optional transitionProperties; std::vector>::const_iterator findLayer(const std::string& layerID) const; // GlyphStoreObserver implementation. void onGlyphsLoaded(const FontStack&, const GlyphRange&) override; void onGlyphsError(const FontStack&, const GlyphRange&, std::exception_ptr) override; // SpriteStoreObserver implementation. void onSpriteLoaded() override; void onSpriteError(std::exception_ptr) override; // SourceObserver implementation. void onSourceLoaded(Source&) override; 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; Observer nullObserver; Observer* observer = &nullObserver; std::exception_ptr lastError; ZoomHistory zoomHistory; bool hasPendingTransitions = false; public: bool shouldReparsePartialTiles = false; bool loaded = false; Worker workers; }; } // namespace style } // namespace mbgl