LibWeb/CSS: Absolutize GradientStyleValues

This lets us not care about non-absolute Length units when resolving
gradient data, as they'll already have been converted to px.

We can also use Angle::from_style_value() safely on absolutized angles,
which reduces some boilerplate code.
This commit is contained in:
Sam Atkins 2025-11-20 17:16:15 +00:00
parent fbe0567f90
commit f81bb1bd8c
Notes: github-actions[bot] 2025-12-01 11:09:51 +00:00
10 changed files with 205 additions and 161 deletions

View file

@ -16,6 +16,24 @@ GC::Ref<CSSStyleValue> AbstractImageStyleValue::reify(JS::Realm& realm, FlyStrin
return CSSImageValue::create(realm, *this);
}
ColorStopListElement ColorStopListElement::absolutized(ComputationContext const& context) const
{
auto absolutize_if_nonnull = [&context](RefPtr<StyleValue const> const& input) -> RefPtr<StyleValue const> {
if (!input)
return {};
return input->absolutized(context);
};
return {
.transition_hint = transition_hint,
.color_stop = {
.color = absolutize_if_nonnull(color_stop.color),
.position = absolutize_if_nonnull(color_stop.position),
.second_position = absolutize_if_nonnull(color_stop.second_position),
},
};
}
void serialize_color_stop_list(StringBuilder& builder, Vector<ColorStopListElement> const& color_stop_list, SerializationMode mode)
{
bool first = true;