LibWeb: Set color filter value to 1 if omitted

This commit is contained in:
Tim Ledbetter 2025-04-04 11:37:46 +01:00 committed by Sam Atkins
commit 61f76c7ec5
Notes: github-actions[bot] 2025-04-04 16:14:08 +00:00
4 changed files with 22 additions and 26 deletions

View file

@ -4433,7 +4433,7 @@ RefPtr<CSSStyleValue> Parser::parse_filter_value_list_value(TokenStream<Componen
if (amount->is_number() && amount->number().value() < 0) if (amount->is_number() && amount->number().value() < 0)
return {}; return {};
} }
return if_no_more_tokens_return(FilterOperation::Color { filter_token_to_operation(filter_token), amount }); return if_no_more_tokens_return(FilterOperation::Color { filter_token_to_operation(filter_token), amount.value_or(Number { Number::Type::Integer, 1 }) });
} }
}; };

View file

@ -32,23 +32,19 @@ float FilterOperation::HueRotate::angle_degrees(Layout::Node const& node) const
float FilterOperation::Color::resolved_amount() const float FilterOperation::Color::resolved_amount() const
{ {
// Default value when omitted is 1. if (amount.is_number())
if (!amount.has_value()) return amount.number().value();
return 1;
if (amount->is_number()) if (amount.is_percentage())
return amount->number().value(); return amount.percentage().as_fraction();
if (amount->is_percentage()) if (amount.is_calculated()) {
return amount->percentage().as_fraction();
if (amount->is_calculated()) {
CalculationResolutionContext context {}; CalculationResolutionContext context {};
if (amount->calculated()->resolves_to_number()) if (amount.calculated()->resolves_to_number())
return amount->calculated()->resolve_number(context).value(); return amount.calculated()->resolve_number(context).value();
if (amount->calculated()->resolves_to_percentage()) if (amount.calculated()->resolves_to_percentage())
return amount->calculated()->resolve_percentage(context)->as_fraction(); return amount.calculated()->resolve_percentage(context)->as_fraction();
} }
VERIFY_NOT_REACHED(); VERIFY_NOT_REACHED();
@ -111,8 +107,8 @@ String FilterValueListStyleValue::to_string(SerializationMode) const
VERIFY_NOT_REACHED(); VERIFY_NOT_REACHED();
} }
}()); }());
if (color.amount.has_value())
builder.append(color.amount->to_string()); builder.append(color.amount.to_string());
}); });
builder.append(')'); builder.append(')');
first = false; first = false;

View file

@ -46,7 +46,7 @@ struct HueRotate {
struct Color { struct Color {
Gfx::ColorFilter::Type operation; Gfx::ColorFilter::Type operation;
Optional<NumberPercentage> amount {}; NumberPercentage amount { Number { Number::Type::Integer, 1.0 } };
float resolved_amount() const; float resolved_amount() const;
bool operator==(Color const&) const = default; bool operator==(Color const&) const = default;
}; };

View file

@ -2,39 +2,39 @@ Harness status: OK
Found 34 tests Found 34 tests
9 Pass 16 Pass
25 Fail 18 Fail
Pass Property filter value 'none' Pass Property filter value 'none'
Pass Property filter value 'blur(100px)' Pass Property filter value 'blur(100px)'
Fail Property filter value 'blur()' Fail Property filter value 'blur()'
Pass Property filter value 'brightness(0)' Pass Property filter value 'brightness(0)'
Fail Property filter value 'brightness(300%)' Fail Property filter value 'brightness(300%)'
Fail Property filter value 'brightness()' Pass Property filter value 'brightness()'
Pass Property filter value 'contrast(0)' Pass Property filter value 'contrast(0)'
Fail Property filter value 'contrast(300%)' Fail Property filter value 'contrast(300%)'
Fail Property filter value 'contrast()' Pass Property filter value 'contrast()'
Fail Property filter value 'drop-shadow(1px 2px)' Fail Property filter value 'drop-shadow(1px 2px)'
Pass Property filter value 'drop-shadow(rgb(4, 5, 6) 1px 2px 0px)' Pass Property filter value 'drop-shadow(rgb(4, 5, 6) 1px 2px 0px)'
Fail Property filter value 'grayscale(50%)' Fail Property filter value 'grayscale(50%)'
Fail Property filter value 'grayscale(calc(50%))' Fail Property filter value 'grayscale(calc(50%))'
Fail Property filter value 'grayscale(2)' Fail Property filter value 'grayscale(2)'
Fail Property filter value 'grayscale(calc(2))' Fail Property filter value 'grayscale(calc(2))'
Fail Property filter value 'grayscale()' Pass Property filter value 'grayscale()'
Fail Property filter value 'hue-rotate(90deg)' Fail Property filter value 'hue-rotate(90deg)'
Fail Property filter value 'hue-rotate()' Fail Property filter value 'hue-rotate()'
Pass Property filter value 'invert(0)' Pass Property filter value 'invert(0)'
Fail Property filter value 'invert(100%)' Fail Property filter value 'invert(100%)'
Fail Property filter value 'invert(2)' Fail Property filter value 'invert(2)'
Fail Property filter value 'invert()' Pass Property filter value 'invert()'
Pass Property filter value 'opacity(0)' Pass Property filter value 'opacity(0)'
Fail Property filter value 'opacity(100%)' Fail Property filter value 'opacity(100%)'
Fail Property filter value 'opacity(2)' Fail Property filter value 'opacity(2)'
Fail Property filter value 'opacity()' Pass Property filter value 'opacity()'
Pass Property filter value 'saturate(0)' Pass Property filter value 'saturate(0)'
Fail Property filter value 'saturate(300%)' Fail Property filter value 'saturate(300%)'
Fail Property filter value 'saturate()' Pass Property filter value 'saturate()'
Pass Property filter value 'sepia(0)' Pass Property filter value 'sepia(0)'
Fail Property filter value 'sepia(100%)' Fail Property filter value 'sepia(100%)'
Fail Property filter value 'sepia(2)' Fail Property filter value 'sepia(2)'
Fail Property filter value 'sepia()' Pass Property filter value 'sepia()'
Fail Property filter value 'blur(10px) url("https://www.example.com/picture.svg#f") contrast(20) brightness(30)' Fail Property filter value 'blur(10px) url("https://www.example.com/picture.svg#f") contrast(20) brightness(30)'