
Previously: CSSImportRule::loaded_style_sheet() (and others) depend on the definition of class CSSStyleSheet. Meanwhile, CSSStyleSheet::template for_each_effective_style_rule (and others) depend on the definition of class CSSImportRule. This hasn't caused any problems so far because CSSStyleSheet.h happened to be always included after CSSImportRule.h (in part due to alphabetical ordering). However, a compilation unit that (for example) only contains #include <Userland/Libraries/LibWeb/CSSImportRule.h> would fail to compile. This patch resolves this issue by pushing the inline definition of Web::CSS::CSSStyleSheet::for_each_effective_style_rule and for_first_not_loaded_import_rule into a different file, and adding the missing headers.
66 lines
1.8 KiB
C++
66 lines
1.8 KiB
C++
/*
|
|
* Copyright (c) 2019-2021, Andreas Kling <kling@serenityos.org>
|
|
*
|
|
* SPDX-License-Identifier: BSD-2-Clause
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <AK/Function.h>
|
|
#include <AK/NonnullRefPtrVector.h>
|
|
#include <AK/TypeCasts.h>
|
|
#include <LibWeb/CSS/CSSRule.h>
|
|
#include <LibWeb/CSS/CSSRuleList.h>
|
|
#include <LibWeb/CSS/CSSStyleRule.h>
|
|
#include <LibWeb/CSS/StyleSheet.h>
|
|
#include <LibWeb/Loader/Resource.h>
|
|
|
|
namespace Web::CSS {
|
|
|
|
class CSSImportRule;
|
|
|
|
class CSSStyleSheet final : public StyleSheet {
|
|
public:
|
|
using WrapperType = Bindings::CSSStyleSheetWrapper;
|
|
|
|
static NonnullRefPtr<CSSStyleSheet> create(NonnullRefPtrVector<CSSRule> rules)
|
|
{
|
|
return adopt_ref(*new CSSStyleSheet(move(rules)));
|
|
}
|
|
|
|
virtual ~CSSStyleSheet() override;
|
|
|
|
void set_owner_css_rule(CSSRule* rule) { m_owner_css_rule = rule; }
|
|
|
|
virtual String type() const override { return "text/css"; }
|
|
|
|
CSSRuleList const& rules() const { return m_rules; }
|
|
CSSRuleList& rules() { return m_rules; }
|
|
void set_rules(NonnullRefPtr<CSSRuleList> rules) { m_rules = move(rules); }
|
|
|
|
CSSRuleList* css_rules() { return m_rules; }
|
|
CSSRuleList const* css_rules() const { return m_rules; }
|
|
|
|
DOM::ExceptionOr<unsigned> insert_rule(StringView rule, unsigned index);
|
|
DOM::ExceptionOr<void> remove_rule(unsigned index);
|
|
DOM::ExceptionOr<void> delete_rule(unsigned index);
|
|
|
|
void for_each_effective_style_rule(Function<void(CSSStyleRule const&)> const& callback) const;
|
|
bool for_first_not_loaded_import_rule(Function<void(CSSImportRule&)> const& callback);
|
|
|
|
private:
|
|
explicit CSSStyleSheet(NonnullRefPtrVector<CSSRule>);
|
|
|
|
NonnullRefPtr<CSSRuleList> m_rules;
|
|
|
|
// FIXME: Use WeakPtr.
|
|
CSSRule* m_owner_css_rule { nullptr };
|
|
};
|
|
|
|
}
|
|
|
|
namespace Web::Bindings {
|
|
|
|
CSSStyleSheetWrapper* wrap(JS::GlobalObject&, CSS::CSSStyleSheet&);
|
|
|
|
}
|