/* * Copyright (c) 2022-2025, Sam Atkins * Copyright (c) 2022, Andreas Kling * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include #include namespace Web::CSS { class FontFace; class CSSFontFaceRule final : public CSSRule , public CSSStyleSheet::Subresource { WEB_PLATFORM_OBJECT(CSSFontFaceRule, CSSRule); GC_DECLARE_ALLOCATOR(CSSFontFaceRule); public: [[nodiscard]] static GC::Ref create(JS::Realm&, GC::Ref); virtual ~CSSFontFaceRule() override = default; bool is_valid() const; ParsedFontFace font_face() const; GC::Ref style() { return m_style; } GC::Ref descriptors() { return m_style; } GC::Ref descriptors() const { return m_style; } GC::Ptr css_connected_font_face() const { return m_css_connected_font_face; } void set_css_connected_font_face(GC::Ptr font_face) { m_css_connected_font_face = font_face; } void handle_descriptor_change(FlyString const& property); void disconnect_font_face(); private: CSSFontFaceRule(JS::Realm&, GC::Ref); virtual void initialize(JS::Realm&) override; virtual String serialized() const override; virtual void visit_edges(Visitor&) override; virtual void dump(StringBuilder&, int indent_levels) const override; void handle_src_descriptor_change(); virtual void set_parent_style_sheet(CSSStyleSheet*) override; GC::Ptr parent_style_sheet_for_subresource() override { return parent_style_sheet(); } GC::Ref m_style; GC::Ptr m_css_connected_font_face; }; template<> inline bool CSSRule::fast_is() const { return type() == CSSRule::Type::FontFace; } }