summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Tests/LibWeb/Layout/expected/svg/svg-with-css-variable-in-presentation-hint.txt7
-rw-r--r--Tests/LibWeb/Layout/input/svg/svg-with-css-variable-in-presentation-hint.html10
-rw-r--r--Userland/Libraries/LibWeb/CSS/StyleComputer.cpp16
3 files changed, 32 insertions, 1 deletions
diff --git a/Tests/LibWeb/Layout/expected/svg/svg-with-css-variable-in-presentation-hint.txt b/Tests/LibWeb/Layout/expected/svg/svg-with-css-variable-in-presentation-hint.txt
new file mode 100644
index 0000000000..8e4c2837fb
--- /dev/null
+++ b/Tests/LibWeb/Layout/expected/svg/svg-with-css-variable-in-presentation-hint.txt
@@ -0,0 +1,7 @@
+Viewport <#document> at (0,0) content-size 800x600 children: not-inline
+ BlockContainer <html> at (0,0) content-size 800x118 [BFC] children: not-inline
+ BlockContainer <body> at (8,8) content-size 784x102 children: inline
+ line 0 width: 102, height: 102, bottom: 102, baseline: 60
+ frag 0 from SVGSVGBox start: 0, length: 0, rect: [9,9 100x100]
+ SVGSVGBox <svg> at (9,9) content-size 100x100 [SVG] children: not-inline
+ SVGGeometryBox <rect> at (29,29) content-size 60x60 children: not-inline
diff --git a/Tests/LibWeb/Layout/input/svg/svg-with-css-variable-in-presentation-hint.html b/Tests/LibWeb/Layout/input/svg/svg-with-css-variable-in-presentation-hint.html
new file mode 100644
index 0000000000..cfc01018d0
--- /dev/null
+++ b/Tests/LibWeb/Layout/input/svg/svg-with-css-variable-in-presentation-hint.html
@@ -0,0 +1,10 @@
+<!doctype html><style>
+ :root {
+ --huge: 5px;
+ }
+ svg {
+ width: 100px;
+ height: 100px;
+ border: 1px solid black;
+ }
+</style><svg viewBox="0 0 10 10"><rect x=4.5 y=4.5 width=1 height=1 stroke="green" stroke-width="var(--huge)" /> \ No newline at end of file
diff --git a/Userland/Libraries/LibWeb/CSS/StyleComputer.cpp b/Userland/Libraries/LibWeb/CSS/StyleComputer.cpp
index 47fdbc5be1..34e1656b43 100644
--- a/Userland/Libraries/LibWeb/CSS/StyleComputer.cpp
+++ b/Userland/Libraries/LibWeb/CSS/StyleComputer.cpp
@@ -973,9 +973,23 @@ ErrorOr<void> StyleComputer::compute_cascaded_values(StyleProperties& style, DOM
// FIXME: Normal user declarations
// Author presentational hints (NOTE: The spec doesn't say exactly how to prioritize these.)
- if (!pseudo_element.has_value())
+ if (!pseudo_element.has_value()) {
element.apply_presentational_hints(style);
+ // SVG presentation attributes are parsed as CSS values, so we need to handle potential custom properties here.
+ if (element.is_svg_element()) {
+ // FIXME: This is not very efficient, we should only resolve the custom properties that are actually used.
+ for (auto i = to_underlying(CSS::first_property_id); i <= to_underlying(CSS::last_property_id); ++i) {
+ auto property_id = (CSS::PropertyID)i;
+ auto& property = style.m_property_values[i];
+ if (property && property->is_unresolved()) {
+ if (auto resolved = resolve_unresolved_style_value(element, pseudo_element, property_id, property->as_unresolved()))
+ property = resolved.release_nonnull();
+ }
+ }
+ }
+ }
+
// Normal author declarations
cascade_declarations(style, element, pseudo_element, matching_rule_set.author_rules, CascadeOrigin::Author, Important::No);