diff --git a/Base/res/fonts/LizaBold8x10.font b/Base/res/fonts/LizaBold8x10.font new file mode 100644 index 0000000000..23e9055a5f Binary files /dev/null and b/Base/res/fonts/LizaBold8x10.font differ diff --git a/SharedGraphics/Font.cpp b/SharedGraphics/Font.cpp index f428ee5d3c..54ddf5dff4 100644 --- a/SharedGraphics/Font.cpp +++ b/SharedGraphics/Font.cpp @@ -32,10 +32,12 @@ static constexpr const char* error_glyph { }; static Font* s_default_font; +static Font* s_default_bold_font; void Font::initialize() { s_default_font = nullptr; + s_default_bold_font = nullptr; } Font& Font::default_font() @@ -44,7 +46,6 @@ Font& Font::default_font() if (!s_default_font) { #ifdef USERLAND s_default_font = Font::load_from_file(default_font_path).leak_ref(); - ASSERT(s_default_font); #else int error; auto descriptor = VFS::the().open(default_font_path, error, 0, 0, *VFS::the().root_inode()); @@ -56,10 +57,33 @@ Font& Font::default_font() ASSERT(buffer); s_default_font = Font::load_from_memory(buffer.pointer()).leak_ref(); #endif + ASSERT(s_default_font); } return *s_default_font; } +Font& Font::default_bold_font() +{ + static const char* default_bold_font_path = "/res/fonts/LizaBold8x10.font"; + if (!s_default_bold_font) { +#ifdef USERLAND + s_default_bold_font = Font::load_from_file(default_bold_font_path).leak_ref(); +#else + int error; + auto descriptor = VFS::the().open(default_bold_font_path, error, 0, 0, *VFS::the().root_inode()); + if (!descriptor) { + kprintf("Failed to open default font (%s)\n", default_bold_font_path); + ASSERT_NOT_REACHED(); + } + auto buffer = descriptor->read_entire_file(*current); + ASSERT(buffer); + s_default_bold_font = Font::load_from_memory(buffer.pointer()).leak_ref(); +#endif + ASSERT(s_default_bold_font); + } + return *s_default_bold_font; +} + RetainPtr Font::clone() const { size_t bytes_per_glyph = glyph_width() * glyph_height(); diff --git a/SharedGraphics/Font.h b/SharedGraphics/Font.h index b32d672b1f..0b560d822c 100644 --- a/SharedGraphics/Font.h +++ b/SharedGraphics/Font.h @@ -9,6 +9,7 @@ class Font : public Retainable { public: static Font& default_font(); + static Font& default_bold_font(); RetainPtr clone() const; diff --git a/WindowServer/WSWindowManager.cpp b/WindowServer/WSWindowManager.cpp index c4fcf0d471..7e039a94fd 100644 --- a/WindowServer/WSWindowManager.cpp +++ b/WindowServer/WSWindowManager.cpp @@ -123,6 +123,11 @@ WSWindowManager::WSWindowManager() m_front_painter = make(*m_front_bitmap); m_back_painter = make(*m_back_bitmap); + m_font = Font::default_bold_font(); + + m_front_painter->set_font(font()); + m_back_painter->set_font(font()); + m_background_color = Color(50, 50, 50); m_active_window_border_color = Color(110, 34, 9); m_active_window_border_color2 = Color(244, 202, 158); @@ -159,7 +164,7 @@ void WSWindowManager::paint_window_frame(WSWindow& window) auto titlebar_title_rect = titlebar_inner_rect; - titlebar_title_rect.set_width(Font::default_font().glyph_width() * window.title().length()); + titlebar_title_rect.set_width(font().glyph_width() * window.title().length()); Rect inner_border_rect { window.x() - 1, diff --git a/WindowServer/WSWindowManager.h b/WindowServer/WSWindowManager.h index 3373dba232..d55ea34791 100644 --- a/WindowServer/WSWindowManager.h +++ b/WindowServer/WSWindowManager.h @@ -39,6 +39,9 @@ public: void invalidate(); void flush(const Rect&); + Font& font() { return *m_font; } + const Font& font() const { return *m_font; } + private: WSWindowManager(); virtual ~WSWindowManager() override; @@ -98,6 +101,8 @@ private: OwnPtr m_back_painter; OwnPtr m_front_painter; + RetainPtr m_font; + mutable Lock m_lock; bool m_flash_flush { false };