LibWeb: Don't truncate font sizes before scaling them to device pixels

This fixes an issue where fonts would often paint at the wrong sizes
with device pixel ratios other than 1.0.
This commit is contained in:
Andreas Kling 2023-03-15 11:00:11 +01:00
parent a4927f523b
commit 664f30a2c9
Notes: sideshowbarker 2024-07-16 22:54:55 +09:00
2 changed files with 5 additions and 3 deletions

View file

@ -59,6 +59,8 @@ public:
return clone;
}
float device_pixels_per_css_pixel() const { return m_device_pixels_per_css_pixel; }
private:
Gfx::Painter& m_painter;
Palette m_palette;

View file

@ -527,13 +527,13 @@ static void paint_text_fragment(PaintContext& context, Layout::TextNode const& t
auto& font = fragment.layout_node().font();
auto scaled_font = [&]() -> RefPtr<Gfx::Font const> {
auto device_font_pt_size = context.enclosing_device_pixels(font.presentation_size());
FontSelector font_selector = { FlyString::from_deprecated_fly_string(font.family()).release_value_but_fixme_should_propagate_errors(), static_cast<float>(device_font_pt_size.value()), font.weight(), font.width(), font.slope() };
auto device_font_pt_size = font.point_size() * context.device_pixels_per_css_pixel();
FontSelector font_selector = { FlyString::from_deprecated_fly_string(font.family()).release_value_but_fixme_should_propagate_errors(), device_font_pt_size, font.weight(), font.width(), font.slope() };
if (auto cached_font = FontCache::the().get(font_selector)) {
return cached_font;
}
if (auto font_with_device_pt_size = font.with_size(static_cast<float>(device_font_pt_size.value()))) {
if (auto font_with_device_pt_size = font.with_size(device_font_pt_size)) {
FontCache::the().set(font_selector, *font_with_device_pt_size);
return font_with_device_pt_size;
}