diff --git a/LibGUI/GTextBox.cpp b/LibGUI/GTextBox.cpp index 27ee49413d..ee2bd27916 100644 --- a/LibGUI/GTextBox.cpp +++ b/LibGUI/GTextBox.cpp @@ -47,12 +47,7 @@ void GTextBox::paint_event(GPaintEvent&) if (ch == ' ') continue; int x = innerRect.x() + (i * font().glyph_width()); - auto* bitmap = font().glyph_bitmap(ch); - if (!bitmap) { - dbgprintf("GTextBox: glyph missing: %02x\n", ch); - ASSERT_NOT_REACHED(); - } - painter.draw_bitmap({x, y}, *bitmap, Color::Black); + painter.draw_bitmap({x, y}, font().glyph_bitmap(ch), Color::Black); } if (is_focused() && m_cursorBlinkState) { diff --git a/SharedGraphics/Font.cpp b/SharedGraphics/Font.cpp index 9313503fe3..dea6dba741 100644 --- a/SharedGraphics/Font.cpp +++ b/SharedGraphics/Font.cpp @@ -26,20 +26,16 @@ Font::Font(const char* const* glyphs, byte glyph_width, byte glyph_height, byte , m_last_glyph(last_glyph) { m_error_bitmap = CharacterBitmap::create_from_ascii(DEFAULT_FONT_NAME::error_glyph, m_glyph_width, m_glyph_height); + for (unsigned ch = 0; ch < 256; ++ch) { + if (ch < m_first_glyph || ch > m_last_glyph) { + m_bitmaps[ch] = m_error_bitmap.copyRef(); + continue; + } + const char* data = m_glyphs[(unsigned)ch - m_first_glyph]; + m_bitmaps[ch] = CharacterBitmap::create_from_ascii(data, m_glyph_width, m_glyph_height); + } } Font::~Font() { } - -const CharacterBitmap* Font::glyph_bitmap(byte ch) const -{ - if (!m_bitmaps[ch]) { - if (ch < m_first_glyph || ch > m_last_glyph) - return nullptr; - const char* data = m_glyphs[(unsigned)ch - m_first_glyph]; - m_bitmaps[ch] = CharacterBitmap::create_from_ascii(data, m_glyph_width, m_glyph_height); - } - ASSERT(ch >= m_first_glyph && ch <= m_last_glyph); - return m_bitmaps[ch].ptr(); -} diff --git a/SharedGraphics/Font.h b/SharedGraphics/Font.h index 60b3863445..10e35e6bcf 100644 --- a/SharedGraphics/Font.h +++ b/SharedGraphics/Font.h @@ -11,8 +11,7 @@ public: ~Font(); - const CharacterBitmap* glyph_bitmap(byte) const; - const CharacterBitmap* error_bitmap() const { return m_error_bitmap.ptr(); } + const CharacterBitmap& glyph_bitmap(char ch) const { return *m_bitmaps[(byte)ch]; } byte glyph_width() const { return m_glyph_width; } byte glyph_height() const { return m_glyph_height; } diff --git a/SharedGraphics/Painter.cpp b/SharedGraphics/Painter.cpp index c477f530b2..f171aa7793 100644 --- a/SharedGraphics/Painter.cpp +++ b/SharedGraphics/Painter.cpp @@ -184,14 +184,7 @@ void Painter::draw_bitmap(const Point& p, const CharacterBitmap& bitmap, Color c void Painter::draw_glyph(const Point& point, char ch, Color color) { - auto* bitmap = font().glyph_bitmap(ch); - if (!bitmap) { - dbgprintf("Font doesn't have 0x%b ('%c')\n", (byte)ch, ch); - bitmap = font().error_bitmap(); - } - int x = point.x(); - int y = point.y(); - draw_bitmap({ x, y }, *bitmap, color); + draw_bitmap(point, font().glyph_bitmap(ch), color); } void Painter::draw_text(const Rect& rect, const String& text, TextAlignment alignment, Color color)