/* * Copyright (c) 2023, MacDue * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include namespace Web::CSS { class EdgeStyleValue final : public StyleValueWithDefaultOperators { public: static ValueComparingNonnullRefPtr create(Optional edge, RefPtr const& offset) { return adopt_ref(*new (nothrow) EdgeStyleValue(edge, offset)); } virtual ~EdgeStyleValue() override = default; // This is nonnull as it is only called after resolving keywords NonnullRefPtr offset() const { return *m_properties.offset; } bool is_center(SerializationMode) const; virtual void serialize(StringBuilder&, SerializationMode) const override; ValueComparingNonnullRefPtr with_resolved_keywords() const; virtual ValueComparingNonnullRefPtr absolutized(ComputationContext const& computation_context) const override; bool properties_equal(EdgeStyleValue const& other) const { return m_properties == other.m_properties; } virtual bool is_computationally_independent() const override { return m_properties.offset->is_computationally_independent(); } private: EdgeStyleValue(Optional edge, RefPtr const& offset) : StyleValueWithDefaultOperators(Type::Edge) , m_properties { .edge = edge, .offset = offset } { } struct Properties { Optional edge; ValueComparingRefPtr offset; bool operator==(Properties const&) const = default; } m_properties; }; }