diff --git a/Tests/LibWeb/Ref/css-gradients.html b/Tests/LibWeb/Ref/css-gradients.html index df436174f6..af32ba6299 100644 --- a/Tests/LibWeb/Ref/css-gradients.html +++ b/Tests/LibWeb/Ref/css-gradients.html @@ -204,6 +204,10 @@ .grad-radial-repeat-3 { background-image: repeating-radial-gradient(circle at 100%, #333, #333 10px, #eee 10px, #eee 20px); } + + .grad-radial-calc { + background-image: repeating-radial-gradient(circle at calc(100% - 10px) calc(20% + 10px), #333, #333 10px, #eee 10px, #eee 20px); + }
@@ -245,5 +249,6 @@
+
diff --git a/Tests/LibWeb/Ref/reference/images/css-gradients-ref.png b/Tests/LibWeb/Ref/reference/images/css-gradients-ref.png index f7631861a3..8ca07f66d2 100644 Binary files a/Tests/LibWeb/Ref/reference/images/css-gradients-ref.png and b/Tests/LibWeb/Ref/reference/images/css-gradients-ref.png differ diff --git a/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp b/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp index 339ace8189..8a88d3080d 100644 --- a/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp +++ b/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp @@ -2359,11 +2359,17 @@ RefPtr Parser::parse_position_value(TokenStream Optional { if (token.is(Token::Type::EndOfFile)) return {}; - // FIXME: calc()! - auto dimension = parse_dimension(token); - if (!dimension.has_value() || !dimension->is_length_percentage()) + + if (auto dimension = parse_dimension(token); dimension.has_value()) { + if (dimension->is_length_percentage()) + return dimension->length_percentage(); return {}; - return dimension->length_percentage(); + } + + if (auto calc = parse_calculated_value(token); calc && calc->resolves_to_length_percentage()) + return LengthPercentage { calc.release_nonnull() }; + + return {}; }; auto is_horizontal = [](PositionEdge edge, bool accept_center) -> bool {