/* * Copyright (c) 2025, Tim Ledbetter * * SPDX-License-Identifier: BSD-2-Clause */ #include "FontStyleStyleValue.h" #include #include #include #include namespace Web::CSS { FontStyleStyleValue::FontStyleStyleValue(FontStyle font_style, ValueComparingRefPtr angle_value) : StyleValueWithDefaultOperators(Type::FontStyle) , m_font_style(font_style) , m_angle_value(angle_value) { } FontStyleStyleValue::~FontStyleStyleValue() = default; int FontStyleStyleValue::to_font_slope() const { // FIXME: Implement oblique switch (as_font_style().font_style()) { case FontStyle::Italic: static int italic_slope = Gfx::name_to_slope("Italic"sv); return italic_slope; case FontStyle::Oblique: static int oblique_slope = Gfx::name_to_slope("Oblique"sv); return oblique_slope; case FontStyle::Normal: default: static int normal_slope = Gfx::name_to_slope("Normal"sv); return normal_slope; } } String FontStyleStyleValue::to_string(SerializationMode mode) const { Optional angle_string; if (m_angle_value) { angle_string = m_angle_value->to_string(mode); if (m_font_style == FontStyle::Oblique && angle_string == "0deg"sv) return "normal"_string; } StringBuilder builder; builder.append(CSS::to_string(m_font_style)); // https://drafts.csswg.org/css-fonts/#valdef-font-style-oblique-angle--90deg-90deg // The lack of an represents 14deg. (Note that a font might internally provide its own mapping for "oblique", but the mapping within the font is disregarded.) if (angle_string.has_value() && angle_string != "14deg"sv) builder.appendff(" {}", angle_string); return MUST(builder.to_string()); } ValueComparingNonnullRefPtr FontStyleStyleValue::absolutized(ComputationContext const& computation_context) const { ValueComparingRefPtr absolutized_angle; if (m_angle_value) absolutized_angle = m_angle_value->absolutized(computation_context); if (absolutized_angle == m_angle_value) return *this; return FontStyleStyleValue::create(m_font_style, absolutized_angle); } }