mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-07-30 12:49:19 +00:00
LibWeb/CSS: Add support for the srgb
color space in color()
It makes the following WPT tests pass: - css/css-color/predefined-001.html - css/css-color/xyz-003.html - css/css-color/xyz-d50-003.html - css/css-color/xyz-d50-004.html - css/css-color/xyz-d65-003.html Also we now render the reference of color-mix-currentcolor-nested-for- color-property.html properly. Which means that it's now different from the actual test, that is still rendered incorrectly. In other word, the false positive for this test is now turned into a true negative.
This commit is contained in:
parent
3b04c983f1
commit
a3ef24e30a
Notes:
github-actions[bot]
2024-11-14 09:27:29 +00:00
Author: https://github.com/LucasChollet
Commit: a3ef24e30a
Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/2329
Reviewed-by: https://github.com/AtkinsSJ ✅
5 changed files with 37 additions and 2 deletions
|
@ -15,6 +15,8 @@ namespace {
|
|||
|
||||
CSSColorValue::ColorType color_type_from_string_view(StringView color_space)
|
||||
{
|
||||
if (color_space == "srgb"sv)
|
||||
return CSSColorValue::ColorType::sRGB;
|
||||
if (color_space == "xyz-d50"sv)
|
||||
return CSSColorValue::ColorType::XYZD50;
|
||||
if (color_space == "xyz"sv || color_space == "xyz-d65")
|
||||
|
@ -61,6 +63,11 @@ Color CSSColor::to_color(Optional<Layout::NodeWithStyle const&>) const
|
|||
auto const c3 = resolve_with_reference_value(m_properties.channels[2], 100).value_or(0);
|
||||
auto const alpha_val = resolve_alpha(m_properties.alpha).value_or(1);
|
||||
|
||||
if (color_type() == ColorType::sRGB) {
|
||||
auto const to_u8 = [](float c) -> u8 { return round_to<u8>(clamp(255 * c, 0, 255)); };
|
||||
return Color(to_u8(c1), to_u8(c2), to_u8(c3), to_u8(alpha_val));
|
||||
}
|
||||
|
||||
if (color_type() == ColorType::XYZD50)
|
||||
return Color::from_xyz50(c1, c2, c3, alpha_val);
|
||||
|
||||
|
|
|
@ -21,7 +21,7 @@ public:
|
|||
virtual Color to_color(Optional<Layout::NodeWithStyle const&>) const override;
|
||||
virtual String to_string() const override;
|
||||
|
||||
static constexpr Array s_supported_color_space = { "xyz"sv, "xyz-d50"sv, "xyz-d65"sv };
|
||||
static constexpr Array s_supported_color_space = { "srgb"sv, "xyz"sv, "xyz-d50"sv, "xyz-d65"sv };
|
||||
|
||||
private:
|
||||
CSSColor(ColorType color_type, ValueComparingNonnullRefPtr<CSSStyleValue> c1, ValueComparingNonnullRefPtr<CSSStyleValue> c2, ValueComparingNonnullRefPtr<CSSStyleValue> c3, ValueComparingNonnullRefPtr<CSSStyleValue> alpha)
|
||||
|
|
|
@ -23,13 +23,14 @@ public:
|
|||
virtual bool has_color() const override { return true; }
|
||||
|
||||
enum class ColorType {
|
||||
RGB,
|
||||
RGB, // This is used by CSSRGB for rgb(...) and rgba(...).
|
||||
HSL,
|
||||
HWB,
|
||||
Lab,
|
||||
LCH,
|
||||
OKLab,
|
||||
OKLCH,
|
||||
sRGB, // This is used by CSSColor for color(srgb ...).
|
||||
XYZD50,
|
||||
XYZD65,
|
||||
};
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue