From 344d6199da06091bc4e81bd7f4093561d70acb9e Mon Sep 17 00:00:00 2001 From: Callum Law Date: Sat, 19 Jul 2025 16:31:03 +1200 Subject: [PATCH] LibWeb: Use correct colors for `SVGFEFloodElement::flood_color` Previously we would always render floods as black, we now use the computed color. We also now support relative lengths within any `calc`s present. --- Libraries/LibWeb/CSS/ComputedProperties.cpp | 10 ------- Libraries/LibWeb/CSS/ComputedProperties.h | 1 - Libraries/LibWeb/Layout/Node.cpp | 2 +- Libraries/LibWeb/SVG/SVGFEFloodElement.cpp | 8 +++--- Libraries/LibWeb/SVG/SVGFEFloodElement.h | 2 +- .../LibWeb/Ref/expected/flood-color-ref.html | 12 ++++++++ Tests/LibWeb/Ref/input/flood-color.html | 28 +++++++++++++++++++ 7 files changed, 46 insertions(+), 17 deletions(-) create mode 100644 Tests/LibWeb/Ref/expected/flood-color-ref.html create mode 100644 Tests/LibWeb/Ref/input/flood-color.html diff --git a/Libraries/LibWeb/CSS/ComputedProperties.cpp b/Libraries/LibWeb/CSS/ComputedProperties.cpp index fb351da93c9..97b2aeb4769 100644 --- a/Libraries/LibWeb/CSS/ComputedProperties.cpp +++ b/Libraries/LibWeb/CSS/ComputedProperties.cpp @@ -446,16 +446,6 @@ ClipRule ComputedProperties::clip_rule() const return keyword_to_fill_rule(value.to_keyword()).release_value(); } -Color ComputedProperties::flood_color(Layout::NodeWithStyle const& node) const -{ - auto const& value = property(PropertyID::FloodColor); - if (value.has_color()) { - return value.to_color(ColorResolutionContext::for_layout_node_with_style(node)).value(); - } - - return InitialValues::flood_color(); -} - float ComputedProperties::flood_opacity() const { auto const& value = property(PropertyID::FloodOpacity); diff --git a/Libraries/LibWeb/CSS/ComputedProperties.h b/Libraries/LibWeb/CSS/ComputedProperties.h index 8e9c5168b48..aeee3801305 100644 --- a/Libraries/LibWeb/CSS/ComputedProperties.h +++ b/Libraries/LibWeb/CSS/ComputedProperties.h @@ -193,7 +193,6 @@ public: float stroke_opacity() const; FillRule fill_rule() const; ClipRule clip_rule() const; - Color flood_color(Layout::NodeWithStyle const&) const; float flood_opacity() const; Gfx::FontCascadeList const& computed_font_list() const diff --git a/Libraries/LibWeb/Layout/Node.cpp b/Libraries/LibWeb/Layout/Node.cpp index f24ba87906e..bdad234fa70 100644 --- a/Libraries/LibWeb/Layout/Node.cpp +++ b/Libraries/LibWeb/Layout/Node.cpp @@ -666,7 +666,7 @@ void NodeWithStyle::apply_style(CSS::ComputedProperties const& computed_style) if (computed_style.filter().has_filters()) computed_values.set_filter(resolve_filter(computed_style.filter())); - computed_values.set_flood_color(computed_style.flood_color(*this)); + computed_values.set_flood_color(computed_style.color_or_fallback(CSS::PropertyID::FloodColor, CSS::ColorResolutionContext::for_layout_node_with_style(*this), CSS::InitialValues::flood_color())); computed_values.set_flood_opacity(computed_style.flood_opacity()); computed_values.set_justify_content(computed_style.justify_content()); diff --git a/Libraries/LibWeb/SVG/SVGFEFloodElement.cpp b/Libraries/LibWeb/SVG/SVGFEFloodElement.cpp index c65a0e8ac27..23faf60a248 100644 --- a/Libraries/LibWeb/SVG/SVGFEFloodElement.cpp +++ b/Libraries/LibWeb/SVG/SVGFEFloodElement.cpp @@ -38,11 +38,11 @@ GC::Ptr SVGFEFloodElement::create_layout_node(GC::Refcomputed_properties()) + return this->computed_properties()->color_or_fallback(CSS::PropertyID::FloodColor, CSS::ColorResolutionContext::for_element({ *this }), CSS::InitialValues::flood_color()); + return CSS::InitialValues::flood_color(); } // https://www.w3.org/TR/filter-effects-1/#FloodOpacityProperty diff --git a/Libraries/LibWeb/SVG/SVGFEFloodElement.h b/Libraries/LibWeb/SVG/SVGFEFloodElement.h index 0f7f4302435..73635c24db9 100644 --- a/Libraries/LibWeb/SVG/SVGFEFloodElement.h +++ b/Libraries/LibWeb/SVG/SVGFEFloodElement.h @@ -23,7 +23,7 @@ public: virtual GC::Ptr create_layout_node(GC::Ref) override; - Gfx::Color flood_color() const; + Gfx::Color flood_color(); float flood_opacity() const; private: diff --git a/Tests/LibWeb/Ref/expected/flood-color-ref.html b/Tests/LibWeb/Ref/expected/flood-color-ref.html new file mode 100644 index 00000000000..45391328c3b --- /dev/null +++ b/Tests/LibWeb/Ref/expected/flood-color-ref.html @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/Tests/LibWeb/Ref/input/flood-color.html b/Tests/LibWeb/Ref/input/flood-color.html new file mode 100644 index 00000000000..5d8e5342429 --- /dev/null +++ b/Tests/LibWeb/Ref/input/flood-color.html @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + +