Selaa lähdekoodia

SharedGraphics: Draw an error glyph instead of crashing due to missing glyphs.

Andreas Kling 6 vuotta sitten
vanhempi
commit
7a7fc37ca1

+ 1 - 0
SharedGraphics/Font.cpp

@@ -22,6 +22,7 @@ Font::Font(const char* const* glyphs, byte glyph_width, byte glyph_height, byte
     , m_first_glyph(first_glyph)
     , m_last_glyph(last_glyph)
 {
+    m_error_bitmap = CharacterBitmap::create_from_ascii(Peanut8x10::error_glyph, m_glyph_width, m_glyph_height);
 }
 
 Font::~Font()

+ 2 - 0
SharedGraphics/Font.h

@@ -12,6 +12,7 @@ public:
     ~Font();
 
     const CharacterBitmap* glyph_bitmap(byte) const;
+    const CharacterBitmap* error_bitmap() const { return m_error_bitmap.ptr(); }
 
     byte glyph_width() const { return m_glyph_width; }
     byte glyph_height() const { return m_glyph_height; }
@@ -23,6 +24,7 @@ private:
 
     const char* const* m_glyphs { nullptr };
     mutable RetainPtr<CharacterBitmap> m_bitmaps[256];
+    RetainPtr<CharacterBitmap> m_error_bitmap;
 
     byte m_glyph_width { 0 };
     byte m_glyph_height { 0 };

+ 1 - 1
SharedGraphics/Painter.cpp

@@ -123,7 +123,7 @@ 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);
-        ASSERT_NOT_REACHED();
+        bitmap = font().error_bitmap();
     }
     int x = point.x();
     int y = point.y();

+ 13 - 0
SharedGraphics/Peanut8x10.h

@@ -7,6 +7,19 @@ static constexpr char last_glyph = '~';
 static constexpr byte glyph_width = 8;
 static constexpr byte glyph_height = 10;
 
+static constexpr const char* error_glyph {
+    "  ####  "
+    " #    # "
+    " #    # "
+    " # ## # "
+    " # ## # "
+    "  ####  "
+    "   ##   "
+    " ###### "
+    "   ##   "
+    "   ##   ",
+};
+
 static constexpr const char* glyphs[] {
 
     "   ##   "

+ 11 - 0
SharedGraphics/Peanut8x8.h

@@ -7,6 +7,17 @@ static constexpr char last_character = '~';
 static constexpr byte font_width = 8;
 static constexpr byte font_height = 8;
 
+static constexpr const char* error_glyph {
+    "  ####  "
+    " #    # "
+    " # ## # "
+    " # ## # "
+    "  ####  "
+    "   ##   "
+    " ###### "
+    "   ##   ",
+};
+
 static constexpr const char* font[] {
 
     "   ##   "