LibWeb: Introduce color-function-specific style values

Instead of CSSColorValue holding a Gfx::Color, make it an abstract class
with subclasses for each different color function, to match the Typed-OM
spec. This means moving the color calculations from the parsing code to
the `to_color()` method on the style value.

This lets us have calc() inside a color function, instead of having to
fully resolve the color at parse time. The canvas fillStyle tests have
been updated to reflect this.

The other test change is Screenshot/css-color-functions.html: previously
we produced slightly different colors for an alpha of 0.5 and one of
50%, and this incorrect behavior was baked into the test. So now it's
more correct. :^)
This commit is contained in:
Sam Atkins 2024-08-16 16:42:16 +01:00 committed by Sam Atkins
parent 27be8678c9
commit 3af6a69f1e
Notes: github-actions[bot] 2024-08-21 09:52:45 +00:00
24 changed files with 1108 additions and 496 deletions

View file

@ -76,7 +76,7 @@ void HTMLMetaElement::inserted()
auto css_value = parse_css_value(context, value, CSS::PropertyID::Color);
if (css_value.is_null() || !css_value->is_color())
return;
auto color = css_value->as_color().color();
auto color = css_value->to_color({}); // TODO: Pass a layout node?
// 4. If color is not failure, then return color.
document().page().client().page_did_change_theme_color(color);