Просмотр исходного кода

LibHTML: Implement basic support for "text-decoration: underline"

Andreas Kling 5 лет назад
Родитель
Сommit
8271ad40a5

+ 1 - 1
Libraries/LibHTML/CSS/StyleResolver.cpp

@@ -63,7 +63,7 @@ StyleProperties StyleResolver::resolve_style(const Element& element, const Style
     if (parent_properties) {
         parent_properties->for_each_property([&](const StringView& name, auto& value) {
             // TODO: proper inheritance
-            if (name.starts_with("font") || name == "white-space" || name == "color")
+            if (name.starts_with("font") || name == "white-space" || name == "color" || name == "text-decoration")
                 style_properties.set_property(name, value);
         });
     }

+ 6 - 0
Libraries/LibHTML/Layout/LayoutText.cpp

@@ -228,6 +228,9 @@ void LayoutText::render(RenderingContext& context)
     painter.set_font(*m_font);
 
     auto color = style_properties().color_or_fallback("color", Color::Black);
+    auto text_decoration = style_properties().string_or_fallback("text-decoration", "none");
+
+    bool is_underline = text_decoration == "underline";
 
     for (auto& run : m_runs) {
         Rect rect {
@@ -237,5 +240,8 @@ void LayoutText::render(RenderingContext& context)
             m_font->glyph_height()
         };
         painter.draw_text(rect, run.text, TextAlignment::TopLeft, color);
+
+        if (is_underline)
+            painter.draw_line(rect.bottom_left().translated(0, 1), rect.bottom_right().translated(0, 1), color);
     }
 }