From dfff2996d23572861887d115b1d8300e3d6e0bae Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Tue, 15 Jan 2019 04:44:47 +0100 Subject: [PATCH] Factor out individual glyph drawing into Painter::draw_glyph(). --- Terminal/Terminal.cpp | 12 ++++++------ Widgets/Color.cpp | 5 ----- Widgets/Color.h | 2 +- Widgets/Painter.cpp | 23 ++++++++++++++--------- Widgets/Painter.h | 1 + 5 files changed, 22 insertions(+), 21 deletions(-) diff --git a/Terminal/Terminal.cpp b/Terminal/Terminal.cpp index 2aebda19f7..2b47f33741 100644 --- a/Terminal/Terminal.cpp +++ b/Terminal/Terminal.cpp @@ -424,14 +424,14 @@ void Terminal::paint() Painter painter(*m_backing); painter.fill_rect(rect, Color::Black); - char buf[2] = { 0, 0 }; - for (unsigned row = 0; row < m_rows; ++row) { + for (word row = 0; row < m_rows; ++row) { int y = row * font.glyphHeight(); - for (unsigned column = 0; column < m_columns; ++column) { + for (word column = 0; column < m_columns; ++column) { + char ch = m_buffer[(row * 160) + (column * 2)]; + if (ch == ' ') + continue; int x = column * font.glyphWidth(); - //buf[0] = at(row, column).character; - buf[0] = m_buffer[(row * 160) + (column * 2)]; - painter.draw_text({ x + 2, y + 2, font.glyphWidth(), font.glyphHeight() }, buf, Painter::TextAlignment::TopLeft, Color(0xa0, 0xa0, 0xa0)); + painter.draw_glyph({ x + 2, y + 2 }, ch, Color(0xa0, 0xa0, 0xa0)); } } diff --git a/Widgets/Color.cpp b/Widgets/Color.cpp index 7db2bd9dae..6d34582ebc 100644 --- a/Widgets/Color.cpp +++ b/Widgets/Color.cpp @@ -1,11 +1,6 @@ #include "Color.h" #include -Color::Color(byte r, byte g, byte b) -{ - m_value = (r << 16) | (g << 8) | b; -} - Color::Color(NamedColor named) { struct { diff --git a/Widgets/Color.h b/Widgets/Color.h index 50abcdc2ea..bf302e65bc 100644 --- a/Widgets/Color.h +++ b/Widgets/Color.h @@ -21,7 +21,7 @@ public: Color() { } Color(NamedColor); - Color(byte r, byte g, byte b); + Color(byte r, byte g, byte b) : m_value((r << 16) | (g << 8) | b) { } Color(RGBA32 rgba) : m_value(rgba) { } RGBA32 value() const { return m_value; } diff --git a/Widgets/Painter.cpp b/Widgets/Painter.cpp index 12313a6bf6..f9016ca971 100644 --- a/Widgets/Painter.cpp +++ b/Widgets/Painter.cpp @@ -93,6 +93,18 @@ 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().glyphBitmap(ch); + if (!bitmap) { + dbgprintf("Font doesn't have 0x%02x ('%c')\n", ch, ch); + ASSERT_NOT_REACHED(); + } + int x = point.x(); + int y = point.y(); + draw_bitmap({ x, y }, *bitmap, color); +} + void Painter::draw_text(const Rect& rect, const String& text, TextAlignment alignment, Color color) { Point point; @@ -109,18 +121,11 @@ void Painter::draw_text(const Rect& rect, const String& text, TextAlignment alig ASSERT_NOT_REACHED(); } - for (unsigned i = 0; i < text.length(); ++i) { + for (unsigned i = 0; i < text.length(); ++i, point.moveBy(font().glyphWidth(), 0)) { byte ch = text[i]; if (ch == ' ') continue; - auto* bitmap = font().glyphBitmap(ch); - if (!bitmap) { - dbgprintf("Font doesn't have 0x%02x ('%c')\n", ch, ch); - ASSERT_NOT_REACHED(); - } - int x = point.x() + i * font().glyphWidth(); - int y = point.y(); - draw_bitmap({ x, y }, *bitmap, color); + draw_glyph(point, ch, color); } } diff --git a/Widgets/Painter.h b/Widgets/Painter.h index 16f885074a..adf41a3805 100644 --- a/Widgets/Painter.h +++ b/Widgets/Painter.h @@ -27,6 +27,7 @@ public: enum class TextAlignment { TopLeft, CenterLeft, Center }; void draw_text(const Rect&, const String&, TextAlignment = TextAlignment::TopLeft, Color = Color()); + void draw_glyph(const Point&, char, Color); const Font& font() const { return *m_font; }