mirror of
https://github.com/servo/servo.git
synced 2025-08-07 06:25:32 +01:00
style: More container queries plumbing
Provide container information in computed::Context and use it to resolve the container queries. This still fails a lot of tests because we are not ensuring that layout is up-to-date when we style the container descendants, but that's expected. Differential Revision: https://phabricator.services.mozilla.com/D146478
This commit is contained in:
parent
5c2fac087f
commit
bbf10a43b8
18 changed files with 420 additions and 143 deletions
|
@ -10,7 +10,7 @@ use crate::context::QuirksMode;
|
|||
use crate::dom::TElement;
|
||||
use crate::rule_tree::CascadeLevel;
|
||||
use crate::selector_parser::SelectorImpl;
|
||||
use crate::stylist::{CascadeData, Rule};
|
||||
use crate::stylist::{Stylist, CascadeData, Rule, ContainerConditionId};
|
||||
use crate::AllocErr;
|
||||
use crate::{Atom, LocalName, Namespace, ShrinkIfNeeded, WeakAtom};
|
||||
use precomputed_hash::PrecomputedHash;
|
||||
|
@ -191,9 +191,10 @@ impl SelectorMap<Rule> {
|
|||
element: E,
|
||||
rule_hash_target: E,
|
||||
matching_rules_list: &mut ApplicableDeclarationList,
|
||||
context: &mut MatchingContext<E::Impl>,
|
||||
matching_context: &mut MatchingContext<E::Impl>,
|
||||
cascade_level: CascadeLevel,
|
||||
cascade_data: &CascadeData,
|
||||
stylist: &Stylist,
|
||||
) where
|
||||
E: TElement,
|
||||
{
|
||||
|
@ -201,16 +202,17 @@ impl SelectorMap<Rule> {
|
|||
return;
|
||||
}
|
||||
|
||||
let quirks_mode = context.quirks_mode();
|
||||
let quirks_mode = matching_context.quirks_mode();
|
||||
|
||||
if rule_hash_target.is_root() {
|
||||
SelectorMap::get_matching_rules(
|
||||
element,
|
||||
&self.root,
|
||||
matching_rules_list,
|
||||
context,
|
||||
matching_context,
|
||||
cascade_level,
|
||||
cascade_data,
|
||||
stylist,
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -220,9 +222,10 @@ impl SelectorMap<Rule> {
|
|||
element,
|
||||
rules,
|
||||
matching_rules_list,
|
||||
context,
|
||||
matching_context,
|
||||
cascade_level,
|
||||
cascade_data,
|
||||
stylist,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
@ -233,9 +236,10 @@ impl SelectorMap<Rule> {
|
|||
element,
|
||||
rules,
|
||||
matching_rules_list,
|
||||
context,
|
||||
matching_context,
|
||||
cascade_level,
|
||||
cascade_data,
|
||||
stylist,
|
||||
)
|
||||
}
|
||||
});
|
||||
|
@ -247,9 +251,10 @@ impl SelectorMap<Rule> {
|
|||
element,
|
||||
rules,
|
||||
matching_rules_list,
|
||||
context,
|
||||
matching_context,
|
||||
cascade_level,
|
||||
cascade_data,
|
||||
stylist,
|
||||
)
|
||||
}
|
||||
});
|
||||
|
@ -260,9 +265,10 @@ impl SelectorMap<Rule> {
|
|||
element,
|
||||
rules,
|
||||
matching_rules_list,
|
||||
context,
|
||||
matching_context,
|
||||
cascade_level,
|
||||
cascade_data,
|
||||
stylist,
|
||||
)
|
||||
}
|
||||
|
||||
|
@ -271,9 +277,10 @@ impl SelectorMap<Rule> {
|
|||
element,
|
||||
rules,
|
||||
matching_rules_list,
|
||||
context,
|
||||
matching_context,
|
||||
cascade_level,
|
||||
cascade_data,
|
||||
stylist,
|
||||
)
|
||||
}
|
||||
|
||||
|
@ -281,9 +288,10 @@ impl SelectorMap<Rule> {
|
|||
element,
|
||||
&self.other,
|
||||
matching_rules_list,
|
||||
context,
|
||||
matching_context,
|
||||
cascade_level,
|
||||
cascade_data,
|
||||
stylist,
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -292,23 +300,32 @@ impl SelectorMap<Rule> {
|
|||
element: E,
|
||||
rules: &[Rule],
|
||||
matching_rules: &mut ApplicableDeclarationList,
|
||||
context: &mut MatchingContext<E::Impl>,
|
||||
matching_context: &mut MatchingContext<E::Impl>,
|
||||
cascade_level: CascadeLevel,
|
||||
cascade_data: &CascadeData,
|
||||
stylist: &Stylist,
|
||||
) where
|
||||
E: TElement,
|
||||
{
|
||||
for rule in rules {
|
||||
if matches_selector(
|
||||
if !matches_selector(
|
||||
&rule.selector,
|
||||
0,
|
||||
Some(&rule.hashes),
|
||||
&element,
|
||||
context,
|
||||
matching_context,
|
||||
) {
|
||||
matching_rules
|
||||
.push(rule.to_applicable_declaration_block(cascade_level, cascade_data));
|
||||
continue;
|
||||
}
|
||||
|
||||
if rule.container_condition_id != ContainerConditionId::none() {
|
||||
if !cascade_data.container_condition_matches(rule.container_condition_id, stylist, element) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
matching_rules
|
||||
.push(rule.to_applicable_declaration_block(cascade_level, cascade_data));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue