Skip to content

Commit 28028be

Browse files
MacDuetrflynn89
authored andcommitted
LibWeb: Support repeating-radial-gradient()s
1 parent f539bf4 commit 28028be

File tree

4 files changed

+17
-5
lines changed

4 files changed

+17
-5
lines changed

Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2655,8 +2655,14 @@ RefPtr<StyleValue> Parser::parse_radial_gradient_function(ComponentValue const&
26552655
if (!component_value.is_function())
26562656
return {};
26572657

2658+
auto repeating_gradient = GradientRepeating::No;
2659+
26582660
auto function_name = component_value.function().name();
26592661

2662+
function_name = consume_if_starts_with(function_name, "repeating-"sv, [&] {
2663+
repeating_gradient = GradientRepeating::Yes;
2664+
});
2665+
26602666
if (!function_name.equals_ignoring_case("radial-gradient"sv))
26612667
return {};
26622668

@@ -2786,7 +2792,7 @@ RefPtr<StyleValue> Parser::parse_radial_gradient_function(ComponentValue const&
27862792
if (!color_stops.has_value())
27872793
return {};
27882794

2789-
return RadialGradientStyleValue::create(ending_shape, size, at_position, move(*color_stops));
2795+
return RadialGradientStyleValue::create(ending_shape, size, at_position, move(*color_stops), repeating_gradient);
27902796
}
27912797

27922798
Optional<PositionValue> Parser::parse_position(TokenStream<ComponentValue>& tokens, PositionValue initial_value)

Userland/Libraries/LibWeb/CSS/StyleValue.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1984,6 +1984,8 @@ bool PositionValue::operator==(PositionValue const& other) const
19841984
String RadialGradientStyleValue::to_string() const
19851985
{
19861986
StringBuilder builder;
1987+
if (is_repeating())
1988+
builder.append("repeating-"sv);
19871989
builder.appendff("radial-gradient({} "sv,
19881990
m_ending_shape == EndingShape::Circle ? "circle"sv : "ellipse"sv);
19891991

Userland/Libraries/LibWeb/CSS/StyleValue.h

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1232,10 +1232,10 @@ class RadialGradientStyleValue final : public AbstractImageStyleValue {
12321232

12331233
using Size = Variant<Extent, CircleSize, EllipseSize>;
12341234

1235-
static NonnullRefPtr<RadialGradientStyleValue> create(EndingShape ending_shape, Size size, PositionValue position, Vector<LinearColorStopListElement> color_stop_list)
1235+
static NonnullRefPtr<RadialGradientStyleValue> create(EndingShape ending_shape, Size size, PositionValue position, Vector<LinearColorStopListElement> color_stop_list, GradientRepeating repeating)
12361236
{
12371237
VERIFY(color_stop_list.size() >= 2);
1238-
return adopt_ref(*new RadialGradientStyleValue(ending_shape, size, position, move(color_stop_list)));
1238+
return adopt_ref(*new RadialGradientStyleValue(ending_shape, size, position, move(color_stop_list), repeating));
12391239
}
12401240

12411241
virtual String to_string() const override;
@@ -1255,22 +1255,26 @@ class RadialGradientStyleValue final : public AbstractImageStyleValue {
12551255

12561256
Gfx::FloatSize resolve_size(Layout::Node const&, Gfx::FloatPoint, Gfx::FloatRect const&) const;
12571257

1258+
bool is_repeating() const { return m_repeating == GradientRepeating::Yes; }
1259+
12581260
virtual ~RadialGradientStyleValue() override = default;
12591261

12601262
private:
1261-
RadialGradientStyleValue(EndingShape ending_shape, Size size, PositionValue position, Vector<LinearColorStopListElement> color_stop_list)
1263+
RadialGradientStyleValue(EndingShape ending_shape, Size size, PositionValue position, Vector<LinearColorStopListElement> color_stop_list, GradientRepeating repeating)
12621264
: AbstractImageStyleValue(Type::RadialGradient)
12631265
, m_ending_shape(ending_shape)
12641266
, m_size(size)
12651267
, m_position(position)
12661268
, m_color_stop_list(move(color_stop_list))
1269+
, m_repeating(repeating)
12671270
{
12681271
}
12691272

12701273
EndingShape m_ending_shape;
12711274
Size m_size;
12721275
PositionValue m_position;
12731276
Vector<LinearColorStopListElement> m_color_stop_list;
1277+
GradientRepeating m_repeating;
12741278

12751279
struct ResolvedData {
12761280
Painting::RadialGradientData data;

Userland/Libraries/LibWeb/Painting/GradientPainting.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,7 @@ RadialGradientData resolve_radial_gradient_data(Layout::Node const& node, Gfx::F
163163
radial_gradient.color_stop_list(), [&](auto const& length_percentage) {
164164
return length_percentage.resolved(node, gradient_length).to_px(node) / gradient_size.width();
165165
},
166-
false);
166+
radial_gradient.is_repeating());
167167
return { resolved_color_stops };
168168
}
169169

0 commit comments

Comments
 (0)