/* * 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, Optional 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; } LengthPercentage offset() const { if (m_properties.edge == PositionEdge::Center) return Percentage(50); if (!m_properties.offset.has_value()) return Percentage(0); return m_properties.offset.value(); } 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, Optional const& offset) : StyleValueWithDefaultOperators(Type::Edge) , m_properties { .edge = edge, .offset = offset } { } struct Properties { Optional edge; Optional offset; bool operator==(Properties const&) const = default; } m_properties; }; }