#pragma once #include #include #include #include #include namespace renderive { class Font_Face { public: Font_Face(); ~Font_Face(); Font_Face(const Font_Face&) = delete; Font_Face(Font_Face&&) noexcept; Font_Face& operator=(const Font_Face&) = delete; Font_Face& operator=(Font_Face&&) noexcept; [[nodiscard]] bool valid() const; [[nodiscard]] std::string family_name() const; private: struct Impl; std::unique_ptr impl_; friend class Font_Registry; friend class Canvas; }; class Font_Registry { public: Font_Registry(); ~Font_Registry(); std::shared_ptr load_file(const std::filesystem::path& path); std::shared_ptr load_memory(std::span data); void set_default_face(std::shared_ptr face); [[nodiscard]] std::shared_ptr default_face() const; private: struct Impl; std::unique_ptr impl_; }; } // namespace renderive