diff --git a/Libraries/LibWeb/CSS/StyleValues/CSSColor.cpp b/Libraries/LibWeb/CSS/StyleValues/CSSColor.cpp index 512015be80b..52b949d0f59 100644 --- a/Libraries/LibWeb/CSS/StyleValues/CSSColor.cpp +++ b/Libraries/LibWeb/CSS/StyleValues/CSSColor.cpp @@ -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) 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(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); diff --git a/Libraries/LibWeb/CSS/StyleValues/CSSColor.h b/Libraries/LibWeb/CSS/StyleValues/CSSColor.h index 36b2843ecc9..639a205538a 100644 --- a/Libraries/LibWeb/CSS/StyleValues/CSSColor.h +++ b/Libraries/LibWeb/CSS/StyleValues/CSSColor.h @@ -21,7 +21,7 @@ public: virtual Color to_color(Optional) 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 c1, ValueComparingNonnullRefPtr c2, ValueComparingNonnullRefPtr c3, ValueComparingNonnullRefPtr alpha) diff --git a/Libraries/LibWeb/CSS/StyleValues/CSSColorValue.h b/Libraries/LibWeb/CSS/StyleValues/CSSColorValue.h index bde9c251078..03f8a4765cb 100644 --- a/Libraries/LibWeb/CSS/StyleValues/CSSColorValue.h +++ b/Libraries/LibWeb/CSS/StyleValues/CSSColorValue.h @@ -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, }; diff --git a/Tests/LibWeb/Ref/expected/wpt-import/css/css-color/greensquare-090-ref.html b/Tests/LibWeb/Ref/expected/wpt-import/css/css-color/greensquare-090-ref.html new file mode 100644 index 00000000000..18bdcf55c47 --- /dev/null +++ b/Tests/LibWeb/Ref/expected/wpt-import/css/css-color/greensquare-090-ref.html @@ -0,0 +1,10 @@ + + +Green square #009900 reference + + +

Test passes if you see a green square, and no red.

+
+ diff --git a/Tests/LibWeb/Ref/input/wpt-import/css/css-color/predefined-001.html b/Tests/LibWeb/Ref/input/wpt-import/css/css-color/predefined-001.html new file mode 100644 index 00000000000..e0a5f1dc1f4 --- /dev/null +++ b/Tests/LibWeb/Ref/input/wpt-import/css/css-color/predefined-001.html @@ -0,0 +1,17 @@ + + +CSS Color 4: predefined colorspaces, srgb, decimal values + + + + + + +

Test passes if you see a green square, and no red.

+

+

+