1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-28 14:25:06 +00:00

LibHTML: Make StyleResolver responsible for loading the default style

Instead of HtmlView clients having to worry about parsing and loading
the default CSS, just take care of it inside StyleResolver.

The default style is automatically inserted into the stylesheet list,
at the very start, so everyone else gets a chance to override it.
This commit is contained in:
Andreas Kling 2019-10-05 09:01:12 +02:00
parent 77218b1c2a
commit ee64d99a96
4 changed files with 26 additions and 12 deletions

View file

@ -33,10 +33,31 @@ static bool matches(const Selector& selector, const Element& element)
}
}
static StyleSheet& default_stylesheet()
{
static StyleSheet* sheet;
if (!sheet) {
extern const char default_stylesheet_source[];
String css = default_stylesheet_source;
sheet = &parse_css(css).leak_ref();
}
return *sheet;
}
template<typename Callback>
void StyleResolver::for_each_stylesheet(Callback callback) const
{
callback(default_stylesheet());
for (auto& sheet : document().stylesheets()) {
callback(sheet);
}
}
NonnullRefPtrVector<StyleRule> StyleResolver::collect_matching_rules(const Element& element) const
{
NonnullRefPtrVector<StyleRule> matching_rules;
for (auto& sheet : document().stylesheets()) {
for_each_stylesheet([&](auto& sheet) {
for (auto& rule : sheet.rules()) {
for (auto& selector : rule.selectors()) {
if (matches(selector, element)) {
@ -45,7 +66,7 @@ NonnullRefPtrVector<StyleRule> StyleResolver::collect_matching_rules(const Eleme
}
}
}
}
});
#ifdef HTML_DEBUG
dbgprintf("Rules matching Element{%p}\n", &element);