From 4dfdca74e2d1f21d38b802b6c2bd2fd78d39611a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mateusz=20G=C3=B3rzy=C5=84ski?= Date: Wed, 30 Nov 2022 16:56:33 +0100 Subject: LibWeb: Handle values in the `font-size` CSS property --- Userland/Libraries/LibWeb/CSS/StyleComputer.cpp | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) (limited to 'Userland') diff --git a/Userland/Libraries/LibWeb/CSS/StyleComputer.cpp b/Userland/Libraries/LibWeb/CSS/StyleComputer.cpp index 14837678c0..7999780505 100644 --- a/Userland/Libraries/LibWeb/CSS/StyleComputer.cpp +++ b/Userland/Libraries/LibWeb/CSS/StyleComputer.cpp @@ -1022,14 +1022,24 @@ void StyleComputer::compute_font(StyleProperties& style, DOM::Element const* ele { CSS::ValueID::XLarge, 1.5 }, { CSS::ValueID::XxLarge, 2.0 }, { CSS::ValueID::XxxLarge, 3.0 }, + { CSS::ValueID::Smaller, 0.8 }, + { CSS::ValueID::Larger, 1.25 }, }; + auto const identifier = static_cast(*font_size).id(); + + // https://w3c.github.io/csswg-drafts/css-fonts/#valdef-font-size-relative-size + // TODO: If the parent element has a keyword font size in the absolute size keyword mapping table, + // larger may compute the font size to the next entry in the table, + // and smaller may compute the font size to the previous entry in the table. if (identifier == CSS::ValueID::Smaller || identifier == CSS::ValueID::Larger) { - // FIXME: Should be based on parent element - } else { - auto const multiplier = absolute_size_mapping.get(identifier).value_or(1.0); - font_size_in_px *= multiplier; + if (parent_element && parent_element->computed_css_values()) { + font_size_in_px = parent_element->computed_css_values()->computed_font().pixel_metrics().size; + } } + auto const multiplier = absolute_size_mapping.get(identifier).value_or(1.0); + font_size_in_px *= multiplier; + } else { float root_font_size = root_element_font_size(); -- cgit v1.2.3