summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Userland/Libraries/LibWeb/CSS/Serialize.cpp19
-rw-r--r--Userland/Libraries/LibWeb/CSS/Serialize.h3
-rw-r--r--Userland/Libraries/LibWeb/CSS/StyleValue.cpp8
3 files changed, 23 insertions, 7 deletions
diff --git a/Userland/Libraries/LibWeb/CSS/Serialize.cpp b/Userland/Libraries/LibWeb/CSS/Serialize.cpp
index dfb1e34843..29a2c614a9 100644
--- a/Userland/Libraries/LibWeb/CSS/Serialize.cpp
+++ b/Userland/Libraries/LibWeb/CSS/Serialize.cpp
@@ -117,6 +117,18 @@ void serialize_a_url(StringBuilder& builder, StringView url)
builder.append(')');
}
+// https://www.w3.org/TR/css-color-4/#serializing-sRGB-values
+void serialize_a_srgb_value(StringBuilder& builder, Color color)
+{
+ // The serialized form is derived from the computed value and thus, uses either the rgb() or rgba() form
+ // (depending on whether the alpha is exactly 1, or not), with lowercase letters for the function name.
+ // NOTE: Since we use Gfx::Color, having an "alpha of 1" means its value is 255.
+ if (color.alpha() == 255)
+ builder.appendff("rgb({}, {}, {})"sv, color.red(), color.green(), color.blue());
+ else
+ builder.appendff("rgba({}, {}, {}, {})"sv, color.red(), color.green(), color.blue(), (float)(color.alpha()) / 255.0f);
+}
+
String escape_a_character(u32 character)
{
StringBuilder builder;
@@ -152,4 +164,11 @@ String serialize_a_url(StringView url)
return builder.to_string();
}
+String serialize_a_srgb_value(Color color)
+{
+ StringBuilder builder;
+ serialize_a_srgb_value(builder, color);
+ return builder.to_string();
+}
+
}
diff --git a/Userland/Libraries/LibWeb/CSS/Serialize.h b/Userland/Libraries/LibWeb/CSS/Serialize.h
index 15ca58151b..3988c2ba61 100644
--- a/Userland/Libraries/LibWeb/CSS/Serialize.h
+++ b/Userland/Libraries/LibWeb/CSS/Serialize.h
@@ -9,6 +9,7 @@
#include <AK/String.h>
#include <AK/StringBuilder.h>
#include <AK/StringView.h>
+#include <LibGfx/Color.h>
namespace Web::CSS {
@@ -17,11 +18,13 @@ void escape_a_character_as_code_point(StringBuilder&, u32 character);
void serialize_an_identifier(StringBuilder&, StringView ident);
void serialize_a_string(StringBuilder&, StringView string);
void serialize_a_url(StringBuilder&, StringView url);
+void serialize_a_srgb_value(StringBuilder&, Color color);
String escape_a_character(u32 character);
String escape_a_character_as_code_point(u32 character);
String serialize_an_identifier(StringView ident);
String serialize_a_string(StringView string);
String serialize_a_url(StringView url);
+String serialize_a_srgb_value(Color color);
}
diff --git a/Userland/Libraries/LibWeb/CSS/StyleValue.cpp b/Userland/Libraries/LibWeb/CSS/StyleValue.cpp
index d5f030dd34..63221f75d4 100644
--- a/Userland/Libraries/LibWeb/CSS/StyleValue.cpp
+++ b/Userland/Libraries/LibWeb/CSS/StyleValue.cpp
@@ -1071,15 +1071,9 @@ CalculatedStyleValue::CalculationResult CalculatedStyleValue::CalcNumberSumPartW
return value->resolve(layout_node, percentage_basis);
}
-// https://www.w3.org/TR/css-color-4/#serializing-sRGB-values
String ColorStyleValue::to_string() const
{
- // The serialized form is derived from the computed value and thus, uses either the rgb() or rgba() form
- // (depending on whether the alpha is exactly 1, or not), with lowercase letters for the function name.
- // NOTE: Since we use Gfx::Color, having an "alpha of 1" means its value is 255.
- if (m_color.alpha() == 255)
- 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);
+ return serialize_a_srgb_value(m_color);
}
bool ColorStyleValue::equals(StyleValue const& other) const