From 3407ab0fd1c287391cad8cb89e4a36fa3a07c453 Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Tue, 3 Jan 2023 14:43:07 +0100 Subject: [PATCH] LibGfx: Make Font::width() return a float --- Userland/Applications/Browser/BookmarksBarWidget.cpp | 2 +- Userland/Applications/KeyboardMapper/KeyButton.cpp | 2 +- Userland/Applications/PixelPaint/Tools/TextTool.cpp | 4 ++-- Userland/Applications/Welcome/WelcomeWidget.cpp | 4 ++-- Userland/Games/BrickGame/BrickGame.cpp | 2 +- Userland/Games/ColorLines/ColorLines.cpp | 2 +- Userland/Games/Hearts/ScoreCard.cpp | 2 +- Userland/Libraries/LibCards/CardPainter.cpp | 2 +- Userland/Libraries/LibGUI/Breadcrumbbar.cpp | 4 ++-- Userland/Libraries/LibGUI/Button.cpp | 2 +- Userland/Libraries/LibGUI/GroupBox.cpp | 2 +- Userland/Libraries/LibGUI/HeaderView.cpp | 2 +- Userland/Libraries/LibGUI/LinkLabel.cpp | 2 +- Userland/Libraries/LibGUI/RadioButton.cpp | 2 +- Userland/Libraries/LibGUI/TabWidget.cpp | 2 +- Userland/Libraries/LibGUI/TreeView.cpp | 2 +- Userland/Libraries/LibGfx/Font/BitmapFont.cpp | 6 +++--- Userland/Libraries/LibGfx/Font/BitmapFont.h | 6 +++--- Userland/Libraries/LibGfx/Font/Font.h | 6 +++--- Userland/Libraries/LibGfx/Font/ScaledFont.cpp | 8 ++++---- Userland/Libraries/LibGfx/Font/ScaledFont.h | 8 ++++---- Userland/Libraries/LibGfx/Painter.cpp | 2 +- .../Libraries/LibWeb/HTML/CanvasRenderingContext2D.cpp | 2 +- Userland/Services/Taskbar/TaskbarButton.cpp | 2 +- Userland/Services/WindowServer/Overlays.cpp | 2 +- 25 files changed, 40 insertions(+), 40 deletions(-) diff --git a/Userland/Applications/Browser/BookmarksBarWidget.cpp b/Userland/Applications/Browser/BookmarksBarWidget.cpp index acbb3bd8ea..76942649f8 100644 --- a/Userland/Applications/Browser/BookmarksBarWidget.cpp +++ b/Userland/Applications/Browser/BookmarksBarWidget.cpp @@ -196,7 +196,7 @@ void BookmarksBarWidget::model_did_update(unsigned) auto title = model()->index(item_index, 0).data().to_deprecated_string(); auto url = model()->index(item_index, 1).data().to_deprecated_string(); - Gfx::IntRect rect { width, 0, font().width(title) + 32, height() }; + Gfx::IntRect rect { width, 0, static_cast(ceilf(font().width(title))) + 32, height() }; auto& button = add(); m_bookmarks.append(button); diff --git a/Userland/Applications/KeyboardMapper/KeyButton.cpp b/Userland/Applications/KeyboardMapper/KeyButton.cpp index e9bfd91b5a..d5417d88d5 100644 --- a/Userland/Applications/KeyboardMapper/KeyButton.cpp +++ b/Userland/Applications/KeyboardMapper/KeyButton.cpp @@ -41,7 +41,7 @@ void KeyButton::paint_event(GUI::PaintEvent& event) if (text().is_empty() || text().starts_with('\0')) return; - Gfx::IntRect text_rect { 0, 0, font.width(text()), font.glyph_height() }; + Gfx::IntRect text_rect { 0, 0, static_cast(ceilf(font.width(text()))), font.glyph_height() }; text_rect.align_within(key_cap_face_rect, Gfx::TextAlignment::Center); painter.draw_text(text_rect, text(), font, Gfx::TextAlignment::Center, Color::Black, Gfx::TextElision::Right); diff --git a/Userland/Applications/PixelPaint/Tools/TextTool.cpp b/Userland/Applications/PixelPaint/Tools/TextTool.cpp index 6a930669d9..d30fdd439c 100644 --- a/Userland/Applications/PixelPaint/Tools/TextTool.cpp +++ b/Userland/Applications/PixelPaint/Tools/TextTool.cpp @@ -205,7 +205,7 @@ void TextTool::on_second_paint(Layer const* layer, GUI::PaintEvent& event) painter.draw_scaled_bitmap(scaled_rect, text_bitmap, text_bitmap->rect(), 1.0); // marching ants box - auto right_padding = m_selected_font->width(" "sv); + auto right_padding = static_cast(ceilf(m_selected_font->width(" "sv))); m_ants_rect = Gfx::IntRect(text_location.translated(-4, -2), { scaled_rect.width() + 4 + right_padding, scaled_rect.height() + 4 }); m_editor->draw_marching_ants(painter, m_ants_rect); @@ -241,7 +241,7 @@ void TextTool::apply_text_to_layer() auto text_height = m_selected_font->preferred_line_height() * static_cast(m_text_editor->line_count()); painter.set_font(*m_selected_font); - auto text_rect = Gfx::Rect(m_add_text_position, { text_width, text_height }); + auto text_rect = Gfx::Rect(m_add_text_position, { static_cast(ceilf(text_width)), text_height }); painter.draw_text(text_rect, demo_text, Gfx::TextAlignment::TopLeft, m_text_color); m_editor->did_complete_action(tool_name()); layer->did_modify_bitmap(text_rect); diff --git a/Userland/Applications/Welcome/WelcomeWidget.cpp b/Userland/Applications/Welcome/WelcomeWidget.cpp index d5c82cc558..0078ab8c9b 100644 --- a/Userland/Applications/Welcome/WelcomeWidget.cpp +++ b/Userland/Applications/Welcome/WelcomeWidget.cpp @@ -110,6 +110,6 @@ void WelcomeWidget::paint_event(GUI::PaintEvent& event) static auto font = Gfx::BitmapFont::load_from_file("/res/fonts/MarietaRegular24.font"sv); painter.draw_text({ 12, 4, 1, 30 }, "Welcome to "sv, *font, Gfx::TextAlignment::CenterLeft, palette().base_text()); - painter.draw_text({ 12 + font->width("Welcome to "sv), 4, 1, 30 }, "Serenity"sv, font->bold_variant(), Gfx::TextAlignment::CenterLeft, palette().base_text()); - painter.draw_text({ 12 + font->width("Welcome to "sv) + font->bold_variant().width("Serenity"sv), 4, 1, 30 }, "OS"sv, font->bold_variant(), Gfx::TextAlignment::CenterLeft, palette().base() == palette().window() ? palette().base_text() : palette().base()); + painter.draw_text({ 12 + static_cast(ceilf(font->width("Welcome to "sv))), 4, 1, 30 }, "Serenity"sv, font->bold_variant(), Gfx::TextAlignment::CenterLeft, palette().base_text()); + painter.draw_text({ 12 + static_cast(ceilf(font->width("Welcome to "sv))) + static_cast(ceilf(font->bold_variant().width("Serenity"sv))), 4, 1, 30 }, "OS"sv, font->bold_variant(), Gfx::TextAlignment::CenterLeft, palette().base() == palette().window() ? palette().base_text() : palette().base()); } diff --git a/Userland/Games/BrickGame/BrickGame.cpp b/Userland/Games/BrickGame/BrickGame.cpp index 8d8a6e78c6..76b0a10f08 100644 --- a/Userland/Games/BrickGame/BrickGame.cpp +++ b/Userland/Games/BrickGame/BrickGame.cpp @@ -499,7 +499,7 @@ void BrickGame::paint_cell(GUI::Painter& painter, Gfx::IntRect rect, bool is_on) void BrickGame::paint_text(GUI::Painter& painter, int row, DeprecatedString const& text) { - auto const text_width { font().width(text) }; + auto const text_width = static_cast(ceilf(font().width(text))); auto const entire_area_rect { frame_inner_rect() }; auto const margin = 4; auto const glyph_height = font().glyph_height(); diff --git a/Userland/Games/ColorLines/ColorLines.cpp b/Userland/Games/ColorLines/ColorLines.cpp index f8b4b095f3..ec5a66661e 100644 --- a/Userland/Games/ColorLines/ColorLines.cpp +++ b/Userland/Games/ColorLines/ColorLines.cpp @@ -211,7 +211,7 @@ void ColorLines::paint_event(GUI::PaintEvent& event) // Draw score auto const score_text = MUST(String::formatted("{:05}"sv, m_score)); - auto text_width { m_score_font->width(score_text) }; + auto text_width = static_cast(ceilf(m_score_font->width(score_text))); auto const glyph_height = m_score_font->glyph_height(); auto const score_text_rect = Gfx::IntRect { frame_inner_rect().top_left().translated(text_margin), diff --git a/Userland/Games/Hearts/ScoreCard.cpp b/Userland/Games/Hearts/ScoreCard.cpp index 23251a5d98..270744e6ce 100644 --- a/Userland/Games/Hearts/ScoreCard.cpp +++ b/Userland/Games/Hearts/ScoreCard.cpp @@ -71,7 +71,7 @@ void ScoreCard::paint_event(GUI::PaintEvent& event) for (int score_index = 0; score_index < (int)player.scores.size(); score_index++) { auto text_rect = cell_rect(player_index, 1 + score_index); auto score_text = DeprecatedString::formatted("{}", player.scores[score_index]); - auto score_text_width = font.width(score_text); + auto score_text_width = static_cast(ceilf(font.width(score_text))); if (score_index != (int)player.scores.size() - 1) { painter.draw_line( { text_rect.left() + text_rect.width() / 2 - score_text_width / 2 - 3, text_rect.top() + font.glyph_height() / 2 }, diff --git a/Userland/Libraries/LibCards/CardPainter.cpp b/Userland/Libraries/LibCards/CardPainter.cpp index 2b46cacdee..8ac0aa5a2b 100644 --- a/Userland/Libraries/LibCards/CardPainter.cpp +++ b/Userland/Libraries/LibCards/CardPainter.cpp @@ -175,7 +175,7 @@ void CardPainter::paint_card_front(Gfx::Bitmap& bitmap, Cards::Suit suit, Cards: paint_rect.set_height(paint_rect.height() / 2); paint_rect.shrink(10, 6); - auto text_rect = Gfx::IntRect { 4, 6, font.width("10"sv), font.glyph_height() }; + auto text_rect = Gfx::IntRect { 4, 6, static_cast(ceilf(font.width("10"sv))), font.glyph_height() }; painter.draw_text(text_rect, card_rank_label(rank), font, Gfx::TextAlignment::Center, suit_color); painter.draw_bitmap( diff --git a/Userland/Libraries/LibGUI/Breadcrumbbar.cpp b/Userland/Libraries/LibGUI/Breadcrumbbar.cpp index 385df6ae78..e9af6543f2 100644 --- a/Userland/Libraries/LibGUI/Breadcrumbbar.cpp +++ b/Userland/Libraries/LibGUI/Breadcrumbbar.cpp @@ -109,10 +109,10 @@ void Breadcrumbbar::append_segment(DeprecatedString text, Gfx::Bitmap const* ico auto button_width = min(button_text_width + icon_width + icon_padding + 16, max_button_width); auto shrunken_width = icon_width + icon_padding + (icon ? 4 : 16); - button.set_max_size(button_width, 16 + 8); + button.set_max_size(static_cast(ceilf(button_width)), 16 + 8); button.set_min_size(shrunken_width, 16 + 8); - Segment segment { icon, text, data, button_width, shrunken_width, button.make_weak_ptr() }; + Segment segment { icon, text, data, static_cast(ceilf(button_width)), shrunken_width, button.make_weak_ptr() }; m_segments.append(move(segment)); relayout(); diff --git a/Userland/Libraries/LibGUI/Button.cpp b/Userland/Libraries/LibGUI/Button.cpp index 5a19df7772..44616283a1 100644 --- a/Userland/Libraries/LibGUI/Button.cpp +++ b/Userland/Libraries/LibGUI/Button.cpp @@ -108,7 +108,7 @@ void Button::paint_event(PaintEvent& event) content_rect.set_width(content_rect.width() - m_icon->width() - icon_spacing()); } - Gfx::IntRect text_rect { 0, 0, font.width(text()), font.glyph_height() }; + Gfx::IntRect text_rect { 0, 0, static_cast(ceilf(font.width(text()))), font.glyph_height() }; if (text_rect.width() > content_rect.width()) text_rect.set_width(content_rect.width()); text_rect.align_within(content_rect, text_alignment()); diff --git a/Userland/Libraries/LibGUI/GroupBox.cpp b/Userland/Libraries/LibGUI/GroupBox.cpp index 1dc4af0b47..5f5b731ca5 100644 --- a/Userland/Libraries/LibGUI/GroupBox.cpp +++ b/Userland/Libraries/LibGUI/GroupBox.cpp @@ -43,7 +43,7 @@ void GroupBox::paint_event(PaintEvent& event) Gfx::StylePainter::paint_frame(painter, frame_rect, palette(), Gfx::FrameShape::Box, Gfx::FrameShadow::Sunken, 2); if (!m_title.is_empty()) { - Gfx::IntRect text_rect { 6, 1, font().width(m_title) + 6, font().glyph_height() }; + Gfx::IntRect text_rect { 6, 1, static_cast(ceilf(font().width(m_title) + 6)), font().glyph_height() }; painter.fill_rect(text_rect, palette().button()); painter.draw_text(text_rect, m_title, Gfx::TextAlignment::Center, palette().button_text()); } diff --git a/Userland/Libraries/LibGUI/HeaderView.cpp b/Userland/Libraries/LibGUI/HeaderView.cpp index 4a3264f4de..c29586dd0c 100644 --- a/Userland/Libraries/LibGUI/HeaderView.cpp +++ b/Userland/Libraries/LibGUI/HeaderView.cpp @@ -272,7 +272,7 @@ void HeaderView::paint_horizontal(Painter& painter) painter.draw_text(text_rect, text, font(), section_data.alignment, palette().button_text()); if (is_key_column && (m_table_view.sort_order() != SortOrder::None)) { - Gfx::IntPoint offset { text_rect.x() + font().width(text) + sorting_arrow_offset, sorting_arrow_offset }; + Gfx::IntPoint offset { text_rect.x() + static_cast(ceilf(font().width(text))) + sorting_arrow_offset, sorting_arrow_offset }; auto coordinates = m_table_view.sort_order() == SortOrder::Ascending ? ascending_arrow_coordinates.span() : descending_arrow_coordinates.span(); diff --git a/Userland/Libraries/LibGUI/LinkLabel.cpp b/Userland/Libraries/LibGUI/LinkLabel.cpp index e95d8123f2..b13e9fa0a7 100644 --- a/Userland/Libraries/LibGUI/LinkLabel.cpp +++ b/Userland/Libraries/LibGUI/LinkLabel.cpp @@ -79,7 +79,7 @@ void LinkLabel::paint_event(PaintEvent& event) GUI::Painter painter(*this); if (m_hovered) - painter.draw_line({ 0, rect().bottom() }, { font().width(text()), rect().bottom() }, palette().link()); + painter.draw_line({ 0, rect().bottom() }, { static_cast(ceilf(font().width(text()))), rect().bottom() }, palette().link()); if (is_focused()) painter.draw_focus_rect(text_rect(), palette().focus_outline()); diff --git a/Userland/Libraries/LibGUI/RadioButton.cpp b/Userland/Libraries/LibGUI/RadioButton.cpp index 7572827754..f49ba66591 100644 --- a/Userland/Libraries/LibGUI/RadioButton.cpp +++ b/Userland/Libraries/LibGUI/RadioButton.cpp @@ -46,7 +46,7 @@ void RadioButton::paint_event(PaintEvent& event) Gfx::StylePainter::paint_radio_button(painter, circle_rect, palette(), is_checked(), is_being_pressed()); - Gfx::IntRect text_rect { circle_rect.right() + 7, 0, font().width(text()), font().glyph_height() }; + Gfx::IntRect text_rect { circle_rect.right() + 7, 0, static_cast(ceilf(font().width(text()))), font().glyph_height() }; text_rect.center_vertically_within(rect()); paint_text(painter, text_rect, font(), Gfx::TextAlignment::TopLeft); diff --git a/Userland/Libraries/LibGUI/TabWidget.cpp b/Userland/Libraries/LibGUI/TabWidget.cpp index 05bb14c521..4e3301f196 100644 --- a/Userland/Libraries/LibGUI/TabWidget.cpp +++ b/Userland/Libraries/LibGUI/TabWidget.cpp @@ -452,7 +452,7 @@ Gfx::IntRect TabWidget::close_button_rect(size_t index) const int TabWidget::TabData::width(Gfx::Font const& font) const { - auto width = 16 + font.width(title) + (icon ? (16 + 4) : 0); + auto width = 16 + static_cast(ceilf(font.width(title))) + (icon ? (16 + 4) : 0); // NOTE: This needs to always be an odd number, because the button rect // includes 3px of light and shadow on the left and right edges. If // the button rect width is not an odd number, the area left for the diff --git a/Userland/Libraries/LibGUI/TreeView.cpp b/Userland/Libraries/LibGUI/TreeView.cpp index 0cbf1d2a1d..c52987750c 100644 --- a/Userland/Libraries/LibGUI/TreeView.cpp +++ b/Userland/Libraries/LibGUI/TreeView.cpp @@ -188,7 +188,7 @@ void TreeView::traverse_in_paint_order(Callback callback) const auto node_text = index.data().to_deprecated_string(); Gfx::IntRect rect = { x_offset, y_offset, - icon_size() + icon_spacing() + text_padding() + font_for_index(index)->width(node_text) + text_padding(), row_height() + static_cast(ceilf(icon_size() + icon_spacing() + text_padding() + font_for_index(index)->width(node_text) + text_padding())), row_height() }; Gfx::IntRect toggle_rect; if (row_count_at_index > 0) { diff --git a/Userland/Libraries/LibGfx/Font/BitmapFont.cpp b/Userland/Libraries/LibGfx/Font/BitmapFont.cpp index 395f779a5c..7fb9d9ad39 100644 --- a/Userland/Libraries/LibGfx/Font/BitmapFont.cpp +++ b/Userland/Libraries/LibGfx/Font/BitmapFont.cpp @@ -335,9 +335,9 @@ int BitmapFont::glyph_or_emoji_width_for_variable_width_font(u32 code_point) con return glyph_height() * emoji->width() / emoji->height(); } -int BitmapFont::width(StringView view) const { return unicode_view_width(Utf8View(view)); } -int BitmapFont::width(Utf8View const& view) const { return unicode_view_width(view); } -int BitmapFont::width(Utf32View const& view) const { return unicode_view_width(view); } +float BitmapFont::width(StringView view) const { return unicode_view_width(Utf8View(view)); } +float BitmapFont::width(Utf8View const& view) const { return unicode_view_width(view); } +float BitmapFont::width(Utf32View const& view) const { return unicode_view_width(view); } template ALWAYS_INLINE int BitmapFont::unicode_view_width(T const& view) const diff --git a/Userland/Libraries/LibGfx/Font/BitmapFont.h b/Userland/Libraries/LibGfx/Font/BitmapFont.h index 93d10d503c..c0f680a17a 100644 --- a/Userland/Libraries/LibGfx/Font/BitmapFont.h +++ b/Userland/Libraries/LibGfx/Font/BitmapFont.h @@ -88,9 +88,9 @@ public: update_x_height(); } - int width(StringView) const override; - int width(Utf8View const&) const override; - int width(Utf32View const&) const override; + virtual float width(StringView) const override; + virtual float width(Utf8View const&) const override; + virtual float width(Utf32View const&) const override; DeprecatedString name() const override { return m_name; } void set_name(DeprecatedString name) { m_name = move(name); } diff --git a/Userland/Libraries/LibGfx/Font/Font.h b/Userland/Libraries/LibGfx/Font/Font.h index 8fa421e0dc..578ffad8aa 100644 --- a/Userland/Libraries/LibGfx/Font/Font.h +++ b/Userland/Libraries/LibGfx/Font/Font.h @@ -140,9 +140,9 @@ public: virtual u8 baseline() const = 0; virtual u8 mean_line() const = 0; - virtual int width(StringView) const = 0; - virtual int width(Utf8View const&) const = 0; - virtual int width(Utf32View const&) const = 0; + virtual float width(StringView) const = 0; + virtual float width(Utf8View const&) const = 0; + virtual float width(Utf32View const&) const = 0; virtual DeprecatedString name() const = 0; diff --git a/Userland/Libraries/LibGfx/Font/ScaledFont.cpp b/Userland/Libraries/LibGfx/Font/ScaledFont.cpp index 8dd9b84f08..26cd070b72 100644 --- a/Userland/Libraries/LibGfx/Font/ScaledFont.cpp +++ b/Userland/Libraries/LibGfx/Font/ScaledFont.cpp @@ -10,12 +10,12 @@ namespace Gfx { -int ScaledFont::width(StringView view) const { return unicode_view_width(Utf8View(view)); } -int ScaledFont::width(Utf8View const& view) const { return unicode_view_width(view); } -int ScaledFont::width(Utf32View const& view) const { return unicode_view_width(view); } +float ScaledFont::width(StringView view) const { return unicode_view_width(Utf8View(view)); } +float ScaledFont::width(Utf8View const& view) const { return unicode_view_width(view); } +float ScaledFont::width(Utf32View const& view) const { return unicode_view_width(view); } template -ALWAYS_INLINE int ScaledFont::unicode_view_width(T const& view) const +ALWAYS_INLINE float ScaledFont::unicode_view_width(T const& view) const { if (view.is_empty()) return 0; diff --git a/Userland/Libraries/LibGfx/Font/ScaledFont.h b/Userland/Libraries/LibGfx/Font/ScaledFont.h index db710d9f45..fd2b4186ee 100644 --- a/Userland/Libraries/LibGfx/Font/ScaledFont.h +++ b/Userland/Libraries/LibGfx/Font/ScaledFont.h @@ -54,9 +54,9 @@ public: virtual u8 glyph_fixed_width() const override; virtual u8 baseline() const override { return m_point_height; } // FIXME: Read from font virtual u8 mean_line() const override { return m_point_height; } // FIXME: Read from font - virtual int width(StringView) const override; - virtual int width(Utf8View const&) const override; - virtual int width(Utf32View const&) const override; + virtual float width(StringView) const override; + virtual float width(Utf8View const&) const override; + virtual float width(Utf32View const&) const override; virtual DeprecatedString name() const override { return DeprecatedString::formatted("{} {}", family(), variant()); } virtual bool is_fixed_width() const override { return m_font->is_fixed_width(); } virtual u8 glyph_spacing() const override { return 0; } @@ -75,7 +75,7 @@ private: mutable HashMap> m_cached_glyph_bitmaps; template - int unicode_view_width(T const& view) const; + float unicode_view_width(T const& view) const; }; } diff --git a/Userland/Libraries/LibGfx/Painter.cpp b/Userland/Libraries/LibGfx/Painter.cpp index 6c9f4f30ea..afbd2933c0 100644 --- a/Userland/Libraries/LibGfx/Painter.cpp +++ b/Userland/Libraries/LibGfx/Painter.cpp @@ -2443,7 +2443,7 @@ void Gfx::Painter::draw_ui_text(Gfx::IntRect const& rect, StringView text, Gfx:: Optional underline_offset; auto name_to_draw = parse_ampersand_string(text, &underline_offset); - Gfx::IntRect text_rect { 0, 0, font.width(name_to_draw), static_cast(ceilf(font.pixel_size())) }; + Gfx::IntRect text_rect { 0, 0, static_cast(ceilf(font.width(name_to_draw))), static_cast(ceilf(font.pixel_size())) }; text_rect.align_within(rect, text_alignment); draw_text(text_rect, name_to_draw, font, text_alignment, color); diff --git a/Userland/Libraries/LibWeb/HTML/CanvasRenderingContext2D.cpp b/Userland/Libraries/LibWeb/HTML/CanvasRenderingContext2D.cpp index ef0a4a727b..82bdcde6f5 100644 --- a/Userland/Libraries/LibWeb/HTML/CanvasRenderingContext2D.cpp +++ b/Userland/Libraries/LibWeb/HTML/CanvasRenderingContext2D.cpp @@ -205,7 +205,7 @@ void CanvasRenderingContext2D::fill_text(DeprecatedString const& text, float x, auto& drawing_state = this->drawing_state(); // FIXME: painter only supports integer rects for text right now, so this effectively chops off any fractional position - auto text_rect = Gfx::IntRect(x, y, max_width.has_value() ? max_width.value() : painter->font().width(text), painter->font().pixel_size()); + auto text_rect = Gfx::IntRect(x, y, max_width.has_value() ? static_cast(max_width.value()) : painter->font().width(text), painter->font().pixel_size()); auto transformed_rect = drawing_state.transform.map(text_rect); painter->draw_text(transformed_rect, text, Gfx::TextAlignment::TopLeft, drawing_state.fill_style); did_draw(transformed_rect.to_type()); diff --git a/Userland/Services/Taskbar/TaskbarButton.cpp b/Userland/Services/Taskbar/TaskbarButton.cpp index 7693da51d8..5b8d748438 100644 --- a/Userland/Services/Taskbar/TaskbarButton.cpp +++ b/Userland/Services/Taskbar/TaskbarButton.cpp @@ -106,7 +106,7 @@ void TaskbarButton::paint_event(GUI::PaintEvent& event) content_rect.set_width(content_rect.width() - icon.width() - 4); } - Gfx::IntRect text_rect { 0, 0, font.width(text()), font.glyph_height() }; + Gfx::IntRect text_rect { 0, 0, static_cast(ceilf(font.width(text()))), font.glyph_height() }; if (text_rect.width() > content_rect.width()) text_rect.set_width(content_rect.width()); text_rect.align_within(content_rect, text_alignment()); diff --git a/Userland/Services/WindowServer/Overlays.cpp b/Userland/Services/WindowServer/Overlays.cpp index 1a7066c746..0fa782341a 100644 --- a/Userland/Services/WindowServer/Overlays.cpp +++ b/Userland/Services/WindowServer/Overlays.cpp @@ -243,7 +243,7 @@ void WindowGeometryOverlay::update_rect() } else { m_label = window->rect().to_deprecated_string(); } - m_label_rect = Gfx::IntRect { 0, 0, wm.font().width(m_label) + 16, wm.font().glyph_height() + 10 }; + m_label_rect = Gfx::IntRect { 0, 0, static_cast(ceilf(wm.font().width(m_label))) + 16, wm.font().glyph_height() + 10 }; auto rect = calculate_frame_rect(m_label_rect).centered_within(window->frame().rect()); auto desktop_rect = wm.desktop_rect(ScreenInput::the().cursor_location_screen());