/* * Copyright (c) 2025, Callum Law * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include namespace Web::CSS { class RadialSizeStyleValue : public StyleValueWithDefaultOperators { public: using Component = Variant>; static ValueComparingNonnullRefPtr create(Vector components) { VERIFY(components.size() == 1 || components.size() == 2); return adopt_ref(*new (nothrow) RadialSizeStyleValue(move(components))); } virtual ~RadialSizeStyleValue() override = default; virtual ValueComparingNonnullRefPtr absolutized(ComputationContext const&) const override; virtual void serialize(StringBuilder&, SerializationMode) const override; Vector components() const { return m_components; } CSSPixels resolve_circle_size(CSSPixelPoint const& center, CSSPixelRect const& reference_box, Layout::Node const&) const; CSSPixelSize resolve_ellipse_size(CSSPixelPoint const& center, CSSPixelRect const& reference_box, Layout::Node const&) const; bool properties_equal(RadialSizeStyleValue const& other) const { return m_components == other.m_components; } virtual bool is_computationally_independent() const override { return all_of(m_components, [](auto const& component) { return component.visit( [](RadialExtent) { return true; }, [](NonnullRefPtr const& value) { return value->is_computationally_independent(); }); }); } private: explicit RadialSizeStyleValue(Vector components) : StyleValueWithDefaultOperators(Type::RadialSize) , m_components(move(components)) { } Vector m_components; }; }