// SPDX-License-Identifier: GPL-2.0-or-later #ifndef INKSCAPE_PATTERN_MANAGER_H #define INKSCAPE_PATTERN_MANAGER_H #include #include #include #include "ui/widget/pattern-store.h" class SPPattern; class SPDocument; namespace Inkscape { class PatternManager { public: static PatternManager& get(); ~PatternManager() = default; struct Category : Glib::Object { const Glib::ustring name; const std::vector patterns; const bool all; Category(Glib::ustring name, std::vector patterns, bool all) : name(std::move(name)), patterns(std::move(patterns)), all(all) {} }; class PatternCategoryColumns : public Gtk::TreeModel::ColumnRecord { public: PatternCategoryColumns() { add(name); add(category); add(all_patterns); } Gtk::TreeModelColumn name; Gtk::TreeModelColumn> category; Gtk::TreeModelColumn all_patterns; } columns; // get all stock pattern categories Glib::RefPtr get_categories(); // get pattern description item Glib::RefPtr get_item(SPPattern* pattern); // get pattern image on a solid background for use in UI lists Cairo::RefPtr get_image(SPPattern* pattern, int width, int height, double device_scale); // get pattern image on checkerboard background for use as a larger preview Cairo::RefPtr get_preview(SPPattern* pattern, int width, int height, unsigned int rgba_background, double device_scale); private: PatternManager(); Glib::RefPtr _model; std::vector> _documents; std::vector> _categories; std::unordered_map> _cache; std::shared_ptr _preview_doc; std::shared_ptr _big_preview_doc; }; } // namespace #endif