Преглед изворни кода

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.
Andreas Kling пре 3 година
родитељ
комит
956968d4b2

+ 9 - 0
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);
+}
+
 }

+ 1 - 1
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; }