From a26cec380548edda37410c01312b8df3ed92922e Mon Sep 17 00:00:00 2001 From: Sam Atkins Date: Fri, 14 Jan 2022 16:52:14 +0000 Subject: [PATCH] LibWeb: Convert `stroke-width` to LengthPercentage This is a guinea pig. So far so good? --- Userland/Libraries/LibWeb/CSS/ComputedValues.h | 6 +++--- Userland/Libraries/LibWeb/SVG/SVGGraphicsElement.cpp | 8 ++++++-- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/Userland/Libraries/LibWeb/CSS/ComputedValues.h b/Userland/Libraries/LibWeb/CSS/ComputedValues.h index 6b3a7f0101..f63a95a69d 100644 --- a/Userland/Libraries/LibWeb/CSS/ComputedValues.h +++ b/Userland/Libraries/LibWeb/CSS/ComputedValues.h @@ -135,7 +135,7 @@ public: Optional fill() const { return m_inherited.fill; } Optional stroke() const { return m_inherited.stroke; } - Optional const& stroke_width() const { return m_inherited.stroke_width; } + Optional const& stroke_width() const { return m_inherited.stroke_width; } Vector transformations() const { return m_noninherited.transformations; } @@ -158,7 +158,7 @@ protected: Optional fill; Optional stroke; - Optional stroke_width; + Optional stroke_width; } m_inherited; struct { @@ -256,7 +256,7 @@ public: void set_fill(Color value) { m_inherited.fill = value; } void set_stroke(Color value) { m_inherited.stroke = value; } - void set_stroke_width(Length value) { m_inherited.stroke_width = value; } + void set_stroke_width(LengthPercentage value) { m_inherited.stroke_width = value; } }; } diff --git a/Userland/Libraries/LibWeb/SVG/SVGGraphicsElement.cpp b/Userland/Libraries/LibWeb/SVG/SVGGraphicsElement.cpp index 4fa2c64485..ffe00c2bc7 100644 --- a/Userland/Libraries/LibWeb/SVG/SVGGraphicsElement.cpp +++ b/Userland/Libraries/LibWeb/SVG/SVGGraphicsElement.cpp @@ -59,8 +59,12 @@ Optional SVGGraphicsElement::stroke_width() const return {}; // FIXME: Converting to pixels isn't really correct - values should be in "user units" // https://svgwg.org/svg2-draft/coords.html#TermUserUnits - if (auto width = layout_node()->computed_values().stroke_width(); width.has_value()) - return width->to_px(*layout_node()); + if (auto width = layout_node()->computed_values().stroke_width(); width.has_value()) { + // Resolved relative to the "Scaled viewport size": https://www.w3.org/TR/2017/WD-fill-stroke-3-20170413/#scaled-viewport-size + // FIXME: This isn't right, but it's something. + auto scaled_viewport_size = CSS::Length::make_px((client_width() + client_height()) * 0.5f); + return width->resolved(scaled_viewport_size).to_px(*layout_node()); + } return {}; }