diff options
Diffstat (limited to 'Userland/Libraries/LibWeb/CSS/StyleResolver.cpp')
-rw-r--r-- | Userland/Libraries/LibWeb/CSS/StyleResolver.cpp | 106 |
1 files changed, 8 insertions, 98 deletions
diff --git a/Userland/Libraries/LibWeb/CSS/StyleResolver.cpp b/Userland/Libraries/LibWeb/CSS/StyleResolver.cpp index 89ae825ddb..0e759ade69 100644 --- a/Userland/Libraries/LibWeb/CSS/StyleResolver.cpp +++ b/Userland/Libraries/LibWeb/CSS/StyleResolver.cpp @@ -336,56 +336,6 @@ static inline bool is_line_width(StyleValue const& value) } } -static inline bool is_list_style_image(StyleValue const& value) -{ - if (value.is_builtin_or_dynamic()) - return true; - if (value.is_image()) - return true; - if (value.is_identifier() && value.to_identifier() == ValueID::None) - return true; - - return false; -} - -static inline bool is_list_style_position(StyleValue const& value) -{ - if (value.is_builtin_or_dynamic()) - return true; - - switch (value.to_identifier()) { - case ValueID::Inside: - case ValueID::Outside: - return true; - default: - return false; - } -} - -static inline bool is_list_style_type(StyleValue const& value) -{ - if (value.is_builtin_or_dynamic()) - return true; - // FIXME: Handle strings and symbols("...") syntax - switch (value.to_identifier()) { - case CSS::ValueID::None: - case CSS::ValueID::Disc: - case CSS::ValueID::Circle: - case CSS::ValueID::Square: - case CSS::ValueID::Decimal: - case CSS::ValueID::DecimalLeadingZero: - case CSS::ValueID::LowerAlpha: - case CSS::ValueID::LowerLatin: - case CSS::ValueID::UpperAlpha: - case CSS::ValueID::UpperLatin: - case CSS::ValueID::UpperRoman: - case CSS::ValueID::LowerRoman: - return true; - default: - return true; - } -} - static inline bool is_text_decoration_line(StyleValue const& value) { if (value.is_builtin_or_dynamic()) @@ -868,59 +818,19 @@ static void set_property_expanding_shorthands(StyleProperties& style, CSS::Prope } if (property_id == CSS::PropertyID::ListStyle) { - if (value.is_component_value_list()) { - auto parts = static_cast<CSS::ValueListStyleValue const&>(value).values(); - - if (!parts.is_empty() && parts.size() <= 3) { - RefPtr<StyleValue> position_value; - RefPtr<StyleValue> image_value; - RefPtr<StyleValue> type_value; - - // FIXME: `none` is ambiguous as it is a valid value for ListStyleImage and ListStyleType, - // so requires special handling. https://www.w3.org/TR/css-lists-3/#propdef-list-style - - for (auto& part : parts) { - auto value = Parser::parse_css_value(context, property_id, part); - if (!value) - return; - - if (is_list_style_position(*value)) { - if (position_value) - return; - position_value = move(value); - continue; - } - if (is_list_style_image(*value)) { - if (image_value) - return; - image_value = move(value); - continue; - } - if (is_list_style_type(*value)) { - if (type_value) - return; - type_value = move(value); - continue; - } - } - - if (position_value) - style.set_property(CSS::PropertyID::ListStylePosition, *position_value); - if (image_value) - style.set_property(CSS::PropertyID::ListStyleImage, *image_value); - if (type_value) - style.set_property(CSS::PropertyID::ListStyleType, *type_value); - } + if (value.is_list_style()) { + auto& list_style = static_cast<CSS::ListStyleStyleValue const&>(value); + style.set_property(CSS::PropertyID::ListStylePosition, list_style.position()); + style.set_property(CSS::PropertyID::ListStyleImage, list_style.image()); + style.set_property(CSS::PropertyID::ListStyleType, list_style.style_type()); return; } - - if (is_list_style_position(value)) + if (value.is_builtin()) { style.set_property(CSS::PropertyID::ListStylePosition, value); - else if (is_list_style_image(value)) style.set_property(CSS::PropertyID::ListStyleImage, value); - else if (is_list_style_type(value)) style.set_property(CSS::PropertyID::ListStyleType, value); - + return; + } return; } |