Kaynağa Gözat

LibWeb: Add new property 'text-decoration-style'

This patch makes the property 'text-decoration-style' known throughout
all the places in LibWeb that care.
Tobias Christiansen 3 yıl önce
ebeveyn
işleme
69aac6ecd7

+ 4 - 0
Userland/Libraries/LibWeb/CSS/ComputedValues.h

@@ -21,6 +21,7 @@ public:
     static CSS::TextAlign text_align() { return CSS::TextAlign::Left; }
     static CSS::Position position() { return CSS::Position::Static; }
     static CSS::TextDecorationLine text_decoration_line() { return CSS::TextDecorationLine::None; }
+    static CSS::TextDecorationStyle text_decoration_style() { return CSS::TextDecorationStyle::Solid; }
     static CSS::TextTransform text_transform() { return CSS::TextTransform::None; }
     static CSS::Display display() { return CSS::Display { CSS::Display::Outside::Inline, CSS::Display::Inside::Flow }; }
     static Color color() { return Color::Black; }
@@ -91,6 +92,7 @@ public:
     Optional<int> const& z_index() const { return m_noninherited.z_index; }
     CSS::TextAlign text_align() const { return m_inherited.text_align; }
     CSS::TextDecorationLine text_decoration_line() const { return m_noninherited.text_decoration_line; }
+    CSS::TextDecorationStyle text_decoration_style() const { return m_noninherited.text_decoration_style; }
     CSS::TextTransform text_transform() const { return m_inherited.text_transform; }
     CSS::Position position() const { return m_noninherited.position; }
     CSS::WhiteSpace white_space() const { return m_inherited.white_space; }
@@ -168,6 +170,7 @@ protected:
         CSS::Display display { InitialValues::display() };
         Optional<int> z_index;
         CSS::TextDecorationLine text_decoration_line { InitialValues::text_decoration_line() };
+        CSS::TextDecorationStyle text_decoration_style { InitialValues::text_decoration_style() };
         CSS::Position position { InitialValues::position() };
         CSS::LengthPercentage width { Length::make_auto() };
         CSS::LengthPercentage min_width { Length::make_auto() };
@@ -219,6 +222,7 @@ public:
     void set_z_index(Optional<int> value) { m_noninherited.z_index = value; }
     void set_text_align(CSS::TextAlign text_align) { m_inherited.text_align = text_align; }
     void set_text_decoration_line(CSS::TextDecorationLine value) { m_noninherited.text_decoration_line = value; }
+    void set_text_decoration_style(CSS::TextDecorationStyle value) { m_noninherited.text_decoration_style = value; }
     void set_text_transform(CSS::TextTransform value) { m_inherited.text_transform = value; }
     void set_position(CSS::Position position) { m_noninherited.position = position; }
     void set_white_space(CSS::WhiteSpace value) { m_inherited.white_space = value; }

+ 19 - 0
Userland/Libraries/LibWeb/CSS/ResolvedCSSStyleDeclaration.cpp

@@ -163,6 +163,23 @@ static CSS::ValueID to_css_value_id(CSS::TextDecorationLine value)
     VERIFY_NOT_REACHED();
 }
 
+static CSS::ValueID to_css_value_id(CSS::TextDecorationStyle value)
+{
+    switch (value) {
+    case TextDecorationStyle::Solid:
+        return CSS::ValueID::Solid;
+    case TextDecorationStyle::Double:
+        return CSS::ValueID::Double;
+    case TextDecorationStyle::Dotted:
+        return CSS::ValueID::Dotted;
+    case TextDecorationStyle::Dashed:
+        return CSS::ValueID::Dashed;
+    case TextDecorationStyle::Wavy:
+        return CSS::ValueID::Wavy;
+    }
+    VERIFY_NOT_REACHED();
+}
+
 static CSS::ValueID to_css_value_id(CSS::Cursor value)
 {
     switch (value) {
@@ -467,6 +484,8 @@ RefPtr<StyleValue> ResolvedCSSStyleDeclaration::style_value_for_property(Layout:
         return IdentifierStyleValue::create(to_css_value_id(layout_node.computed_values().text_align()));
     case CSS::PropertyID::TextDecorationLine:
         return IdentifierStyleValue::create(to_css_value_id(layout_node.computed_values().text_decoration_line()));
+    case CSS::PropertyID::TextDecorationStyle:
+        return IdentifierStyleValue::create(to_css_value_id(layout_node.computed_values().text_decoration_style()));
     case CSS::PropertyID::TextTransform:
         return IdentifierStyleValue::create(to_css_value_id(layout_node.computed_values().text_transform()));
     case CSS::PropertyID::Position:

+ 21 - 0
Userland/Libraries/LibWeb/CSS/StyleProperties.cpp

@@ -645,6 +645,27 @@ Optional<CSS::TextDecorationLine> StyleProperties::text_decoration_line() const
     }
 }
 
+Optional<CSS::TextDecorationStyle> StyleProperties::text_decoration_style() const
+{
+    auto value = property(CSS::PropertyID::TextDecorationStyle);
+    if (!value.has_value())
+        return {};
+    switch (value.value()->to_identifier()) {
+    case CSS::ValueID::Solid:
+        return CSS::TextDecorationStyle::Solid;
+    case CSS::ValueID::Double:
+        return CSS::TextDecorationStyle::Double;
+    case CSS::ValueID::Dotted:
+        return CSS::TextDecorationStyle::Dotted;
+    case CSS::ValueID::Dashed:
+        return CSS::TextDecorationStyle::Dashed;
+    case CSS::ValueID::Wavy:
+        return CSS::TextDecorationStyle::Wavy;
+    default:
+        return {};
+    }
+}
+
 Optional<CSS::TextTransform> StyleProperties::text_transform() const
 {
     auto value = property(CSS::PropertyID::TextTransform);

+ 1 - 0
Userland/Libraries/LibWeb/CSS/StyleProperties.h

@@ -51,6 +51,7 @@ public:
     Optional<CSS::WhiteSpace> white_space() const;
     Optional<CSS::LineStyle> line_style(CSS::PropertyID) const;
     Optional<CSS::TextDecorationLine> text_decoration_line() const;
+    Optional<CSS::TextDecorationStyle> text_decoration_style() const;
     Optional<CSS::TextTransform> text_transform() const;
     Optional<CSS::ListStyleType> list_style_type() const;
     Optional<CSS::FlexDirection> flex_direction() const;

+ 8 - 0
Userland/Libraries/LibWeb/CSS/StyleValue.h

@@ -233,6 +233,14 @@ enum class TextDecorationLine {
     Blink,
 };
 
+enum class TextDecorationStyle {
+    Solid,
+    Double,
+    Dotted,
+    Dashed,
+    Wavy,
+};
+
 enum class TextTransform {
     None,
     Capitalize,

+ 4 - 0
Userland/Libraries/LibWeb/Layout/Node.cpp

@@ -404,6 +404,10 @@ void NodeWithStyle::apply_style(const CSS::StyleProperties& specified_style)
     if (text_decoration_line.has_value())
         computed_values.set_text_decoration_line(text_decoration_line.value());
 
+    auto text_decoration_style = specified_style.text_decoration_style();
+    if (text_decoration_style.has_value())
+        computed_values.set_text_decoration_style(text_decoration_style.value());
+
     auto text_transform = specified_style.text_transform();
     if (text_transform.has_value())
         computed_values.set_text_transform(text_transform.value());