LibGfx: Make Font::glyph_width*() APIs return float

This commit is contained in:
Andreas Kling 2023-01-03 14:55:48 +01:00
parent 3407ab0fd1
commit 555d7a6fce
Notes: sideshowbarker 2024-07-17 11:33:34 +09:00
7 changed files with 14 additions and 14 deletions

View file

@ -308,7 +308,7 @@ bool BitmapFont::contains_glyph(u32 code_point) const
return index.has_value() && m_glyph_widths[index.value()] > 0;
}
u8 BitmapFont::glyph_width(u32 code_point) const
float BitmapFont::glyph_width(u32 code_point) const
{
if (is_ascii(code_point) && !is_ascii_printable(code_point))
return 0;

View file

@ -56,7 +56,7 @@ public:
bool contains_glyph(u32 code_point) const override;
bool contains_raw_glyph(u32 code_point) const { return m_glyph_widths[code_point] > 0; }
ALWAYS_INLINE int glyph_or_emoji_width(u32 code_point) const override
virtual float glyph_or_emoji_width(u32 code_point) const override
{
if (m_fixed_width)
return m_glyph_width;
@ -67,7 +67,7 @@ public:
int x_height() const override { return m_x_height; }
int preferred_line_height() const override { return glyph_height() + m_line_gap; }
u8 glyph_width(u32 code_point) const override;
virtual float glyph_width(u32 code_point) const override;
u8 raw_glyph_width(u32 code_point) const { return m_glyph_widths[code_point]; }
u8 min_glyph_width() const override { return m_min_glyph_width; }

View file

@ -126,8 +126,8 @@ public:
virtual Glyph glyph(u32 code_point) const = 0;
virtual bool contains_glyph(u32 code_point) const = 0;
virtual u8 glyph_width(u32 code_point) const = 0;
virtual int glyph_or_emoji_width(u32 code_point) const = 0;
virtual float glyph_width(u32 code_point) const = 0;
virtual float glyph_or_emoji_width(u32 code_point) const = 0;
virtual float glyphs_horizontal_kerning(u32 left_code_point, u32 right_code_point) const = 0;
virtual u8 glyph_height() const = 0;
virtual int x_height() const = 0;

View file

@ -57,14 +57,14 @@ Gfx::Glyph ScaledFont::glyph(u32 code_point) const
return Gfx::Glyph(bitmap, metrics.left_side_bearing, metrics.advance_width, metrics.ascender);
}
u8 ScaledFont::glyph_width(u32 code_point) const
float ScaledFont::glyph_width(u32 code_point) const
{
auto id = glyph_id_for_code_point(code_point);
auto metrics = glyph_metrics(id);
return metrics.advance_width;
}
int ScaledFont::glyph_or_emoji_width(u32 code_point) const
float ScaledFont::glyph_or_emoji_width(u32 code_point) const
{
auto id = glyph_id_for_code_point(code_point);
auto metrics = glyph_metrics(id);

View file

@ -43,8 +43,8 @@ public:
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_code_point(code_point) > 0; }
virtual u8 glyph_width(u32 code_point) const override;
virtual int glyph_or_emoji_width(u32 code_point) const override;
virtual float glyph_width(u32 code_point) const override;
virtual float glyph_or_emoji_width(u32 code_point) const override;
virtual float glyphs_horizontal_kerning(u32 left_code_point, u32 right_code_point) const override;
virtual int preferred_line_height() const override { return metrics().height() + metrics().line_gap; }
virtual u8 glyph_height() const override { return m_point_height; }

View file

@ -2450,7 +2450,7 @@ void Gfx::Painter::draw_ui_text(Gfx::IntRect const& rect, StringView text, Gfx::
if (underline_offset.has_value()) {
Utf8View utf8_view { name_to_draw };
int width = 0;
float width = 0;
for (auto it = utf8_view.begin(); it != utf8_view.end(); ++it) {
if (utf8_view.byte_offset_of(it) >= underline_offset.value()) {
int y = text_rect.bottom() + 1;

View file

@ -154,13 +154,13 @@ Gfx::IntRect TerminalWidget::glyph_rect(u16 row, u16 column)
{
int y = row * m_line_height;
int x = column * font().glyph_width('x');
return { x + frame_thickness() + m_inset, y + frame_thickness() + m_inset, font().glyph_width('x'), font().glyph_height() };
return { x + frame_thickness() + m_inset, y + frame_thickness() + m_inset, static_cast<int>(ceilf(font().glyph_width('x'))), font().glyph_height() };
}
Gfx::IntRect TerminalWidget::row_rect(u16 row)
{
int y = row * m_line_height;
Gfx::IntRect rect = { frame_thickness() + m_inset, y + frame_thickness() + m_inset, font().glyph_width('x') * m_terminal.columns(), font().glyph_height() };
Gfx::IntRect rect = { frame_thickness() + m_inset, y + frame_thickness() + m_inset, static_cast<int>(ceilf(font().glyph_width('x'))) * m_terminal.columns(), font().glyph_height() };
rect.inflate(0, m_line_spacing);
return rect;
}
@ -534,7 +534,7 @@ Gfx::IntSize TerminalWidget::compute_base_size() const
void TerminalWidget::apply_size_increments_to_window(GUI::Window& window)
{
window.set_size_increment({ font().glyph_width('x'), m_line_height });
window.set_size_increment({ static_cast<int>(ceilf(font().glyph_width('x'))), m_line_height });
window.set_base_size(compute_base_size());
}
@ -1230,7 +1230,7 @@ void TerminalWidget::update_color_scheme()
Gfx::IntSize TerminalWidget::widget_size_for_font(Gfx::Font const& font) const
{
return {
(frame_thickness() * 2) + (m_inset * 2) + (m_terminal.columns() * font.glyph_width('x')) + m_scrollbar->width(),
(frame_thickness() * 2) + (m_inset * 2) + (m_terminal.columns() * static_cast<int>(ceilf(font.glyph_width('x')))) + m_scrollbar->width(),
(frame_thickness() * 2) + (m_inset * 2) + (m_terminal.rows() * (font.glyph_height() + m_line_spacing))
};
}