From f58668031db222b2b4a2e8c5897745d0158b4bab Mon Sep 17 00:00:00 2001 From: Aliaksandr Kalenik Date: Sat, 4 Feb 2023 23:08:48 +0300 Subject: [PATCH] LibWeb: Respect `font-stretch` in `StyleComputer::compute_font` --- .../Libraries/LibWeb/CSS/StyleComputer.cpp | 55 +++++++++++++++++++ 1 file changed, 55 insertions(+) diff --git a/Userland/Libraries/LibWeb/CSS/StyleComputer.cpp b/Userland/Libraries/LibWeb/CSS/StyleComputer.cpp index 0a766d26ba..d752220e51 100644 --- a/Userland/Libraries/LibWeb/CSS/StyleComputer.cpp +++ b/Userland/Libraries/LibWeb/CSS/StyleComputer.cpp @@ -997,8 +997,63 @@ void StyleComputer::compute_font(StyleProperties& style, DOM::Element const* ele auto font_size = style.property(CSS::PropertyID::FontSize); auto font_style = style.property(CSS::PropertyID::FontStyle); auto font_weight = style.property(CSS::PropertyID::FontWeight); + auto font_stretch = style.property(CSS::PropertyID::FontStretch); int width = Gfx::FontWidth::Normal; + if (font_stretch->is_identifier()) { + switch (static_cast(*font_stretch).id()) { + case CSS::ValueID::UltraCondensed: + width = Gfx::FontWidth::UltraCondensed; + break; + case CSS::ValueID::ExtraCondensed: + width = Gfx::FontWidth::ExtraCondensed; + break; + case CSS::ValueID::Condensed: + width = Gfx::FontWidth::Condensed; + break; + case CSS::ValueID::SemiCondensed: + width = Gfx::FontWidth::SemiCondensed; + break; + case CSS::ValueID::Normal: + width = Gfx::FontWidth::Normal; + break; + case CSS::ValueID::SemiExpanded: + width = Gfx::FontWidth::SemiExpanded; + break; + case CSS::ValueID::Expanded: + width = Gfx::FontWidth::Expanded; + break; + case CSS::ValueID::ExtraExpanded: + width = Gfx::FontWidth::ExtraExpanded; + break; + case CSS::ValueID::UltraExpanded: + width = Gfx::FontWidth::UltraExpanded; + break; + default: + break; + } + } else if (font_stretch->is_percentage()) { + float percentage = font_stretch->as_percentage().percentage().value(); + if (percentage <= 50) { + width = Gfx::FontWidth::UltraCondensed; + } else if (percentage <= 62.5f) { + width = Gfx::FontWidth::ExtraCondensed; + } else if (percentage <= 75.0f) { + width = Gfx::FontWidth::Condensed; + } else if (percentage <= 87.5f) { + width = Gfx::FontWidth::SemiCondensed; + } else if (percentage <= 100.0f) { + width = Gfx::FontWidth::Normal; + } else if (percentage <= 112.5f) { + width = Gfx::FontWidth::SemiExpanded; + } else if (percentage <= 125.0f) { + width = Gfx::FontWidth::Expanded; + } else if (percentage <= 150.0f) { + width = Gfx::FontWidth::ExtraExpanded; + } else { + width = Gfx::FontWidth::UltraExpanded; + } + } int weight = Gfx::FontWeight::Regular; if (font_weight->is_identifier()) {