/* * Copyright (c) 2023, MacDue * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #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; Optional edge() const { if (m_properties.edge == PositionEdge::Center) return {}; return m_properties.edge; } NonnullRefPtr offset() const { if (m_properties.edge == PositionEdge::Center) return PercentageStyleValue::create(Percentage(50)); if (!m_properties.offset) return PercentageStyleValue::create(Percentage(0)); return *m_properties.offset; } virtual String to_string(SerializationMode) const override; ValueComparingNonnullRefPtr resolved_value(CalculationContext context) const; bool properties_equal(EdgeStyleValue const& other) const { return m_properties == other.m_properties; } 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; }; }