LibWeb/CSS: Make dimension types serialize in resolved form

Some dimensions would always serialize in a canonical unit, others never
did, and others we manually would do so in their StyleValue. This
commit moves all of that into the dimension types, which means for
example that Length can apply its special rounding.

Our local serialization test now produces the same output as other
browsers. :^)
This commit is contained in:
Sam Atkins 2025-05-16 20:02:16 +01:00 committed by Tim Ledbetter
commit 443f9e5afb
Notes: github-actions[bot] 2025-05-17 06:54:42 +00:00
20 changed files with 70 additions and 58 deletions

View file

@ -21,9 +21,7 @@ AngleStyleValue::~AngleStyleValue() = default;
String AngleStyleValue::to_string(SerializationMode serialization_mode) const
{
if (serialization_mode == SerializationMode::ResolvedValue)
return MUST(String::formatted("{}deg", m_angle.to_degrees()));
return m_angle.to_string();
return m_angle.to_string(serialization_mode);
}
bool AngleStyleValue::equals(CSSStyleValue const& other) const

View file

@ -23,7 +23,7 @@ public:
virtual double value() const override { return m_flex.raw_value(); }
virtual StringView unit() const override { return m_flex.unit_name(); }
virtual String to_string(SerializationMode) const override { return m_flex.to_string(); }
virtual String to_string(SerializationMode serialization_mode) const override { return m_flex.to_string(serialization_mode); }
bool equals(CSSStyleValue const& other) const override
{

View file

@ -26,7 +26,7 @@ public:
virtual double value() const override { return m_frequency.raw_value(); }
virtual StringView unit() const override { return m_frequency.unit_name(); }
virtual String to_string(SerializationMode) const override { return m_frequency.to_string(); }
virtual String to_string(SerializationMode serialization_mode) const override { return m_frequency.to_string(serialization_mode); }
bool equals(CSSStyleValue const& other) const override
{

View file

@ -23,7 +23,7 @@ public:
virtual double value() const override { return m_length.raw_value(); }
virtual StringView unit() const override { return m_length.unit_name(); }
virtual String to_string(SerializationMode) const override { return m_length.to_string(); }
virtual String to_string(SerializationMode serialization_mode) const override { return m_length.to_string(serialization_mode); }
virtual ValueComparingNonnullRefPtr<CSSStyleValue const> absolutized(CSSPixelRect const& viewport_rect, Length::FontMetrics const& font_metrics, Length::FontMetrics const& root_font_metrics) const override;
bool equals(CSSStyleValue const& other) const override;

View file

@ -23,7 +23,7 @@ public:
virtual double value() const override { return m_resolution.raw_value(); }
virtual StringView unit() const override { return m_resolution.unit_name(); }
virtual String to_string(SerializationMode) const override { return m_resolution.to_string(); }
virtual String to_string(SerializationMode serialization_mode) const override { return m_resolution.to_string(serialization_mode); }
bool equals(CSSStyleValue const& other) const override
{

View file

@ -26,12 +26,7 @@ public:
virtual double value() const override { return m_time.raw_value(); }
virtual StringView unit() const override { return m_time.unit_name(); }
virtual String to_string(SerializationMode serialization_mode) const override
{
if (serialization_mode == SerializationMode::ResolvedValue)
return MUST(String::formatted("{}s", m_time.to_seconds()));
return m_time.to_string();
}
virtual String to_string(SerializationMode serialization_mode) const override { return m_time.to_string(serialization_mode); }
bool equals(CSSStyleValue const& other) const override
{