diff --git a/Userland/Libraries/LibGfx/BitmapFont.h b/Userland/Libraries/LibGfx/BitmapFont.h index a1c0b4d852..b43514fe0a 100644 --- a/Userland/Libraries/LibGfx/BitmapFont.h +++ b/Userland/Libraries/LibGfx/BitmapFont.h @@ -58,6 +58,7 @@ public: void set_weight(u16 weight) { m_weight = weight; } Glyph glyph(u32 code_point) const; + bool contains_glyph(u32 code_point) const { return code_point < (u32)glyph_count(); } u8 glyph_width(size_t ch) const { return m_fixed_width ? m_glyph_width : m_glyph_widths[ch]; } int glyph_or_emoji_width(u32 code_point) const; diff --git a/Userland/Libraries/LibGfx/Font.h b/Userland/Libraries/LibGfx/Font.h index 747f778b25..f074dd1e2e 100644 --- a/Userland/Libraries/LibGfx/Font.h +++ b/Userland/Libraries/LibGfx/Font.h @@ -110,6 +110,7 @@ public: virtual u16 weight() const = 0; virtual Glyph glyph(u32 code_point) const = 0; + virtual bool contains_glyph(u32 code_point) const = 0; virtual u8 glyph_width(size_t ch) const = 0; virtual int glyph_or_emoji_width(u32 code_point) const = 0; diff --git a/Userland/Libraries/LibGfx/Painter.cpp b/Userland/Libraries/LibGfx/Painter.cpp index 5ee9b56ccb..6e33a43f35 100644 --- a/Userland/Libraries/LibGfx/Painter.cpp +++ b/Userland/Libraries/LibGfx/Painter.cpp @@ -929,9 +929,8 @@ void Painter::draw_emoji(const IntPoint& point, const Gfx::Bitmap& emoji, const void Painter::draw_glyph_or_emoji(const IntPoint& point, u32 code_point, const Font& font, Color color) { - if (code_point < (u32)font.glyph_count()) { - // This looks like a regular character. - draw_glyph(point, (size_t)code_point, font, color); + if (font.contains_glyph(code_point)) { + draw_glyph(point, code_point, font, color); return; } diff --git a/Userland/Libraries/LibTTF/Font.h b/Userland/Libraries/LibTTF/Font.h index c954e2d2dc..d1e96c0267 100644 --- a/Userland/Libraries/LibTTF/Font.h +++ b/Userland/Libraries/LibTTF/Font.h @@ -140,6 +140,7 @@ public: virtual u8 presentation_size() const override { return m_point_height; } virtual u16 weight() const override { return m_font->weight(); } virtual Gfx::Glyph glyph(u32 code_point) const override; + virtual bool contains_glyph(u32 code_point) const override { return m_font->glyph_id_for_codepoint(code_point) > 0; } virtual u8 glyph_width(size_t ch) const override; virtual int glyph_or_emoji_width(u32 code_point) const override; virtual u8 glyph_height() const override { return m_point_height; } /* TODO */