#pragma once #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include namespace mbgl { class FileSource; class GlyphAtlas; class GlyphStore; class SpriteStore; class SpriteAtlas; class LineAtlas; class StyleUpdateParameters; class StyleQueryParameters; class StyleObserver; struct RenderData { Color backgroundColor = {{ 0, 0, 0, 0 }}; std::set sources; std::vector order; }; class Style : public GlyphStoreObserver, public SpriteStoreObserver, public SourceObserver, public util::noncopyable { public: Style(FileSource&, float pixelRatio); ~Style(); void setJSON(const std::string& data, const std::string& base); void setObserver(StyleObserver*); 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 StyleUpdateParameters&); 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; StyleLayer* 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 PropertyTransition& = {}); bool removeClass(const std::string&, const PropertyTransition& = {}); bool hasClass(const std::string&) const; void setClasses(const std::vector&, const PropertyTransition& = {}); std::vector getClasses() const; RenderData getRenderData() const; std::vector queryRenderedFeatures(const StyleQueryParameters&) 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 onPlacementRedone() override; StyleObserver* observer = nullptr; std::exception_ptr lastError; ZoomHistory zoomHistory; bool hasPendingTransitions = false; public: bool shouldReparsePartialTiles = false; bool loaded = false; Worker workers; }; } // namespace mbgl