/* * Copyright (c) 2022-2025, Sam Atkins * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include #include namespace Web::CSS { class Angle { public: Angle(double value, AngleUnit unit); static Angle make_degrees(double); Angle percentage_of(Percentage const&) const; String to_string(SerializationMode = SerializationMode::Normal) const; double to_degrees() const; double to_radians() const; double raw_value() const { return m_value; } AngleUnit unit() const { return m_unit; } FlyString unit_name() const { return CSS::to_string(m_unit); } bool operator==(Angle const& other) const { return m_unit == other.m_unit && m_value == other.m_value; } int operator<=>(Angle const& other) const { auto this_degrees = to_degrees(); auto other_degrees = other.to_degrees(); if (this_degrees < other_degrees) return -1; if (this_degrees > other_degrees) return 1; return 0; } static Angle resolve_calculated(NonnullRefPtr const&, Layout::Node const&, Angle const& reference_value); private: AngleUnit m_unit; double m_value { 0 }; }; } template<> struct AK::Formatter : Formatter { ErrorOr format(FormatBuilder& builder, Web::CSS::Angle const& angle) { return Formatter::format(builder, angle.to_string()); } };