From 956968d4b28c86883dee5df0e178826f8be7e418 Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Sun, 3 Oct 2021 17:56:01 +0200 Subject: [PATCH] LibWeb: Make ColorStyleValue serialization spec compliant [CSS Color 4] tells us to use either rgb() or rgba() notation, depending on the color's alpha value. --- Userland/Libraries/LibWeb/CSS/StyleValue.cpp | 9 +++++++++ Userland/Libraries/LibWeb/CSS/StyleValue.h | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/Userland/Libraries/LibWeb/CSS/StyleValue.cpp b/Userland/Libraries/LibWeb/CSS/StyleValue.cpp index 2960d6f30e..99c4fe8306 100644 --- a/Userland/Libraries/LibWeb/CSS/StyleValue.cpp +++ b/Userland/Libraries/LibWeb/CSS/StyleValue.cpp @@ -387,4 +387,13 @@ void ImageStyleValue::resource_did_load() if (m_document && m_document->browsing_context()) m_document->browsing_context()->set_needs_display({}); } + +// https://www.w3.org/TR/css-color-4/#serializing-sRGB-values +String ColorStyleValue::to_string() const +{ + if (m_color.alpha() == 1) + return String::formatted("rgb({}, {}, {})", m_color.red(), m_color.green(), m_color.blue()); + return String::formatted("rgba({}, {}, {}, {})", m_color.red(), m_color.green(), m_color.blue(), (float)(m_color.alpha()) / 255.0f); +} + } diff --git a/Userland/Libraries/LibWeb/CSS/StyleValue.h b/Userland/Libraries/LibWeb/CSS/StyleValue.h index 4ab90d8dfc..f12954a846 100644 --- a/Userland/Libraries/LibWeb/CSS/StyleValue.h +++ b/Userland/Libraries/LibWeb/CSS/StyleValue.h @@ -683,7 +683,7 @@ public: virtual ~ColorStyleValue() override { } Color color() const { return m_color; } - virtual String to_string() const override { return m_color.to_string(); } + virtual String to_string() const override; virtual bool has_color() const override { return true; } virtual Color to_color(Layout::NodeWithStyle const&) const override { return m_color; }