/* * Copyright (c) 2023, Sam Atkins * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include namespace Web::CSS { class RatioStyleValue final : public StyleValueWithDefaultOperators { public: static ValueComparingNonnullRefPtr create(ValueComparingNonnullRefPtr numerator, ValueComparingNonnullRefPtr denominator) { return adopt_ref(*new (nothrow) RatioStyleValue(move(numerator), move(denominator))); } virtual ~RatioStyleValue() override = default; Ratio resolved() const; virtual ValueComparingNonnullRefPtr absolutized(ComputationContext const&) const override; virtual void serialize(StringBuilder&, SerializationMode) const override; Vector tokenize() const override; bool properties_equal(RatioStyleValue const& other) const { return m_numerator == other.m_numerator && m_denominator == other.m_denominator; } virtual bool is_computationally_independent() const override { return m_numerator->is_computationally_independent() && m_denominator->is_computationally_independent(); } private: RatioStyleValue(ValueComparingNonnullRefPtr numerator, ValueComparingNonnullRefPtr denominator) : StyleValueWithDefaultOperators(Type::Ratio) , m_numerator(move(numerator)) , m_denominator(move(denominator)) { } ValueComparingNonnullRefPtr m_numerator; ValueComparingNonnullRefPtr m_denominator; }; }