diff --git a/Userland/Libraries/LibWeb/CSS/StyleComputer.cpp b/Userland/Libraries/LibWeb/CSS/StyleComputer.cpp index 8e36372b58..0e97ec6596 100644 --- a/Userland/Libraries/LibWeb/CSS/StyleComputer.cpp +++ b/Userland/Libraries/LibWeb/CSS/StyleComputer.cpp @@ -774,7 +774,7 @@ void StyleComputer::compute_font(StyleProperties& style, DOM::Element const* ele bool bold = weight > Gfx::FontWeight::Regular; - int size = 10; + float font_size_in_px = 10; if (font_size->is_identifier()) { switch (static_cast(*font_size).id()) { @@ -783,14 +783,14 @@ void StyleComputer::compute_font(StyleProperties& style, DOM::Element const* ele case CSS::ValueID::Small: case CSS::ValueID::Medium: // FIXME: Should be based on "user's default font size" - size = 10; + font_size_in_px = 10; break; case CSS::ValueID::Large: case CSS::ValueID::XLarge: case CSS::ValueID::XxLarge: case CSS::ValueID::XxxLarge: // FIXME: Should be based on "user's default font size" - size = 12; + font_size_in_px = 12; break; case CSS::ValueID::Smaller: case CSS::ValueID::Larger: @@ -810,14 +810,14 @@ void StyleComputer::compute_font(StyleProperties& style, DOM::Element const* ele auto parent_font_size = [&]() -> float { if (!parent_element || !parent_element->computed_css_values()) - return size; + return font_size_in_px; auto value = parent_element->computed_css_values()->property(CSS::PropertyID::FontSize).value(); if (value->is_length()) { auto length = static_cast(*value).to_length(); if (length.is_absolute() || length.is_relative()) - return length.to_px(viewport_rect(), font_metrics, size, root_font_size); + return length.to_px(viewport_rect(), font_metrics, font_size_in_px, root_font_size); } - return size; + return font_size_in_px; }; Optional maybe_length; @@ -837,7 +837,7 @@ void StyleComputer::compute_font(StyleProperties& style, DOM::Element const* ele if (!maybe_length->is_calculated()) { auto px = maybe_length.value().to_px(viewport_rect(), font_metrics, parent_font_size(), root_font_size); if (px != 0) - size = px; + font_size_in_px = px; } } } @@ -865,12 +865,13 @@ void StyleComputer::compute_font(StyleProperties& style, DOM::Element const* ele bool monospace = false; auto find_font = [&](String const& family) -> RefPtr { - font_selector = { family, size, weight, slope }; + int font_size_in_pt = roundf(font_size_in_px * 0.75f); + font_selector = { family, font_size_in_pt, weight, slope }; if (auto found_font = FontCache::the().get(font_selector)) return found_font; - if (auto found_font = Gfx::FontDatabase::the().get(family, size, weight, slope, Gfx::Font::AllowInexactSizeMatch::Yes)) + if (auto found_font = Gfx::FontDatabase::the().get(family, font_size_in_pt, weight, slope, Gfx::Font::AllowInexactSizeMatch::Yes)) return found_font; return {}; @@ -926,7 +927,7 @@ void StyleComputer::compute_font(StyleProperties& style, DOM::Element const* ele FontCache::the().set(font_selector, *found_font); - style.set_property(CSS::PropertyID::FontSize, LengthStyleValue::create(CSS::Length::make_px(size))); + style.set_property(CSS::PropertyID::FontSize, LengthStyleValue::create(CSS::Length::make_px(font_size_in_px))); style.set_property(CSS::PropertyID::FontWeight, NumericStyleValue::create_integer(weight)); style.set_computed_font(found_font.release_nonnull());