mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-04-25 22:08:59 +00:00
This solves an awkward dependency cycle, where CalculatedStyleValue needs the definition of Percentage, but including that would also pull in PercentageOr, which in turn needs CalculatedStyleValue. Many places that previously included StyleValue.h no longer need to. :^)
72 lines
2.4 KiB
C++
72 lines
2.4 KiB
C++
/*
|
|
* Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org>
|
|
* Copyright (c) 2021, Tobias Christiansen <tobyase@serenityos.org>
|
|
* Copyright (c) 2021-2023, Sam Atkins <atkinssj@serenityos.org>
|
|
* Copyright (c) 2022-2023, MacDue <macdue@dueutil.tech>
|
|
*
|
|
* SPDX-License-Identifier: BSD-2-Clause
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <LibWeb/CSS/Angle.h>
|
|
#include <LibWeb/CSS/Position.h>
|
|
#include <LibWeb/CSS/StyleValues/AbstractImageStyleValue.h>
|
|
#include <LibWeb/Painting/GradientPainting.h>
|
|
|
|
namespace Web::CSS {
|
|
|
|
class ConicGradientStyleValue final : public AbstractImageStyleValue {
|
|
public:
|
|
static ValueComparingNonnullRefPtr<ConicGradientStyleValue> create(Angle from_angle, PositionValue position, Vector<AngularColorStopListElement> color_stop_list, GradientRepeating repeating)
|
|
{
|
|
VERIFY(color_stop_list.size() >= 2);
|
|
return adopt_ref(*new ConicGradientStyleValue(from_angle, position, move(color_stop_list), repeating));
|
|
}
|
|
|
|
virtual ErrorOr<String> to_string() const override;
|
|
|
|
void paint(PaintContext&, DevicePixelRect const& dest_rect, CSS::ImageRendering) const override;
|
|
|
|
virtual bool equals(StyleValue const& other) const override;
|
|
|
|
Vector<AngularColorStopListElement> const& color_stop_list() const
|
|
{
|
|
return m_properties.color_stop_list;
|
|
}
|
|
|
|
float angle_degrees() const;
|
|
|
|
bool is_paintable() const override { return true; }
|
|
|
|
void resolve_for_size(Layout::Node const&, CSSPixelSize) const override;
|
|
|
|
virtual ~ConicGradientStyleValue() override = default;
|
|
|
|
bool is_repeating() const { return m_properties.repeating == GradientRepeating::Yes; }
|
|
|
|
private:
|
|
ConicGradientStyleValue(Angle from_angle, PositionValue position, Vector<AngularColorStopListElement> color_stop_list, GradientRepeating repeating)
|
|
: AbstractImageStyleValue(Type::ConicGradient)
|
|
, m_properties { .from_angle = from_angle, .position = position, .color_stop_list = move(color_stop_list), .repeating = repeating }
|
|
{
|
|
}
|
|
|
|
struct Properties {
|
|
// FIXME: Support <color-interpolation-method>
|
|
Angle from_angle;
|
|
PositionValue position;
|
|
Vector<AngularColorStopListElement> color_stop_list;
|
|
GradientRepeating repeating;
|
|
bool operator==(Properties const&) const = default;
|
|
} m_properties;
|
|
|
|
struct ResolvedData {
|
|
Painting::ConicGradientData data;
|
|
CSSPixelPoint position;
|
|
};
|
|
|
|
mutable Optional<ResolvedData> m_resolved;
|
|
};
|
|
|
|
}
|