mirror of
https://github.com/RGBCube/serenity
synced 2025-07-28 20:37:35 +00:00
LibGfx+LibTTF: Allow Painter to draw TTF glyphs
This commit is contained in:
parent
0f41f5d9ba
commit
85158dc0ad
5 changed files with 66 additions and 14 deletions
|
@ -75,18 +75,27 @@ public:
|
|||
{
|
||||
}
|
||||
|
||||
Glyph(RefPtr<Bitmap> bitmap)
|
||||
Glyph(RefPtr<Bitmap> bitmap, int left_bearing, int advance, int ascent)
|
||||
: m_bitmap(bitmap)
|
||||
, m_left_bearing(left_bearing)
|
||||
, m_advance(advance)
|
||||
, m_ascent(ascent)
|
||||
{
|
||||
}
|
||||
|
||||
bool is_glyph_bitmap() const { return !m_bitmap; }
|
||||
GlyphBitmap glyph_bitmap() const { return m_glyph_bitmap; }
|
||||
RefPtr<Bitmap> bitmap() const { return m_bitmap; }
|
||||
int left_bearing() const { return m_left_bearing; }
|
||||
int advance() const { return m_advance; }
|
||||
int ascent() const { return m_ascent; }
|
||||
|
||||
private:
|
||||
GlyphBitmap m_glyph_bitmap;
|
||||
RefPtr<Bitmap> m_bitmap;
|
||||
int m_left_bearing;
|
||||
int m_advance;
|
||||
int m_ascent;
|
||||
};
|
||||
|
||||
class Font : public RefCounted<Font> {
|
||||
|
|
|
@ -900,7 +900,16 @@ FLATTEN void Painter::draw_glyph(const IntPoint& point, u32 code_point, Color co
|
|||
|
||||
FLATTEN void Painter::draw_glyph(const IntPoint& point, u32 code_point, const Font& font, Color color)
|
||||
{
|
||||
draw_bitmap(point, font.glyph(code_point).glyph_bitmap(), color);
|
||||
auto glyph = font.glyph(code_point);
|
||||
if (glyph.is_glyph_bitmap()) {
|
||||
draw_bitmap(point, glyph.glyph_bitmap(), color);
|
||||
} else {
|
||||
auto top_left = point + IntPoint(glyph.left_bearing(), font.x_height() - glyph.ascent());
|
||||
|
||||
blit_filtered(top_left, *glyph.bitmap(), glyph.bitmap()->rect(), [color](Color pixel) -> Color {
|
||||
return pixel.multiply(color);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
void Painter::draw_emoji(const IntPoint& point, const Gfx::Bitmap& emoji, const Font& font)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue