/* * Copyright (c) 2018-2020, Andreas Kling * Copyright (c) 2021, Tobias Christiansen * Copyright (c) 2021-2023, Sam Atkins * Copyright (c) 2022-2023, MacDue * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include namespace Web::CSS { class FontStyleValue final : public StyleValueWithDefaultOperators { public: static ErrorOr> create( ValueComparingNonnullRefPtr font_stretch, ValueComparingNonnullRefPtr font_style, ValueComparingNonnullRefPtr font_weight, ValueComparingNonnullRefPtr font_size, ValueComparingNonnullRefPtr line_height, ValueComparingNonnullRefPtr font_families) { return adopt_nonnull_ref_or_enomem(new (nothrow) FontStyleValue(move(font_stretch), move(font_style), move(font_weight), move(font_size), move(line_height), move(font_families))); } virtual ~FontStyleValue() override = default; ValueComparingNonnullRefPtr font_stretch() const { return m_properties.font_stretch; } ValueComparingNonnullRefPtr font_style() const { return m_properties.font_style; } ValueComparingNonnullRefPtr font_weight() const { return m_properties.font_weight; } ValueComparingNonnullRefPtr font_size() const { return m_properties.font_size; } ValueComparingNonnullRefPtr line_height() const { return m_properties.line_height; } ValueComparingNonnullRefPtr font_families() const { return m_properties.font_families; } virtual ErrorOr to_string() const override; bool properties_equal(FontStyleValue const& other) const { return m_properties == other.m_properties; }; private: FontStyleValue(ValueComparingNonnullRefPtr font_stretch, ValueComparingNonnullRefPtr font_style, ValueComparingNonnullRefPtr font_weight, ValueComparingNonnullRefPtr font_size, ValueComparingNonnullRefPtr line_height, ValueComparingNonnullRefPtr font_families) : StyleValueWithDefaultOperators(Type::Font) , m_properties { .font_stretch = move(font_stretch), .font_style = move(font_style), .font_weight = move(font_weight), .font_size = move(font_size), .line_height = move(line_height), .font_families = move(font_families) } { } struct Properties { ValueComparingNonnullRefPtr font_stretch; ValueComparingNonnullRefPtr font_style; ValueComparingNonnullRefPtr font_weight; ValueComparingNonnullRefPtr font_size; ValueComparingNonnullRefPtr line_height; ValueComparingNonnullRefPtr font_families; // FIXME: Implement font-variant. bool operator==(Properties const&) const = default; } m_properties; }; }