#pragma once #include <luna/Buffer.h> #include <luna/SharedPtr.h> #include <os/Path.h> #include <ui/Canvas.h> #define PSF_FONT_MAGIC 0x864ab572 namespace ui { class Font : public Shareable { public: enum FontWeight { Regular, Bold, }; static Result<SharedPtr<Font>> load(const os::Path& path); static Result<SharedPtr<Font>> load_builtin(StringView name, FontWeight weight); static SharedPtr<Font> default_font(); static SharedPtr<Font> default_bold_font(); void render(wchar_t codepoint, ui::Color color, ui::Canvas& canvas); void render(const wchar_t* text, ui::Color color, ui::Canvas& canvas); int width() const { return m_psf_header.width; } int height() const { return m_psf_header.height; } private: struct PSFHeader { u32 magic; u32 version; // zero u32 headersize; u32 flags; // 0 if there's no unicode table u32 numglyph; u32 bytesperglyph; int height; int width; }; PSFHeader m_psf_header; Buffer m_font_data; }; };