style: Provide whether we're styling or not to rust-selectors.

This makes us not adding the flags to everything in servo.
This commit is contained in:
Emilio Cobos Álvarez 2016-08-31 16:16:30 -07:00
parent bbfe38e35f
commit 468b329645
No known key found for this signature in database
GPG key ID: 056B727BB9C1027C
15 changed files with 88 additions and 64 deletions

View file

@ -16,7 +16,7 @@ use selector_impl::{ElementExt, TheSelectorImpl, PseudoElement};
use selectors::Element;
use selectors::bloom::BloomFilter;
use selectors::matching::{AFFECTED_BY_STYLE_ATTRIBUTE, AFFECTED_BY_PRESENTATIONAL_HINTS};
use selectors::matching::{StyleRelations, matches_complex_selector};
use selectors::matching::{MatchingReason, StyleRelations, matches_complex_selector};
use selectors::parser::{Selector, SimpleSelector, LocalName, ComplexSelector};
use sink::Push;
use smallvec::VecLike;
@ -293,7 +293,8 @@ impl Stylist {
None,
None,
Some(pseudo),
&mut declarations);
&mut declarations,
MatchingReason::ForStyling);
let (computed, _) =
properties::cascade(self.device.au_viewport_size(),
@ -344,7 +345,8 @@ impl Stylist {
parent_bf: Option<&BloomFilter>,
style_attribute: Option<&Arc<PropertyDeclarationBlock>>,
pseudo_element: Option<&PseudoElement>,
applicable_declarations: &mut V) -> StyleRelations
applicable_declarations: &mut V,
reason: MatchingReason) -> StyleRelations
where E: Element<Impl=TheSelectorImpl> +
fmt::Debug +
PresentationalHintsSynthetizer,
@ -370,6 +372,7 @@ impl Stylist {
parent_bf,
applicable_declarations,
&mut relations,
reason,
Importance::Normal);
debug!("UA normal: {:?}", relations);
@ -387,12 +390,14 @@ impl Stylist {
parent_bf,
applicable_declarations,
&mut relations,
reason,
Importance::Normal);
debug!("user normal: {:?}", relations);
map.author.normal.get_all_matching_rules(element,
parent_bf,
applicable_declarations,
&mut relations,
reason,
Importance::Normal);
debug!("author normal: {:?}", relations);
@ -413,6 +418,7 @@ impl Stylist {
parent_bf,
applicable_declarations,
&mut relations,
reason,
Importance::Important);
debug!("author important: {:?}", relations);
@ -434,6 +440,7 @@ impl Stylist {
parent_bf,
applicable_declarations,
&mut relations,
reason,
Importance::Important);
debug!("user important: {:?}", relations);
@ -442,6 +449,7 @@ impl Stylist {
parent_bf,
applicable_declarations,
&mut relations,
reason,
Importance::Important);
debug!("UA important: {:?}", relations);
@ -468,19 +476,22 @@ impl Stylist {
{
use selectors::matching::StyleRelations;
use selectors::matching::matches_complex_selector;
// XXX we can probably do better, the candidate should already know what
// rules it matches.
// TODO(emilio): we can probably do better, the candidate should already
// know what rules it matches. Also, we should only match until we find
// a descendant combinator, the rest should be ok, since the parent is
// the same.
//
// XXX Could the bloom filter help here? Should be available.
// TODO(emilio): Use the bloom filter, since they contain the element's
// ancestor chain and it's correct for the candidate too.
for ref selector in self.non_common_style_affecting_attributes_selectors.iter() {
let element_matches = matches_complex_selector(&selector.complex_selector,
element,
None,
&mut StyleRelations::empty());
let candidate_matches = matches_complex_selector(&selector.complex_selector,
candidate,
None,
&mut StyleRelations::empty());
let element_matches =
matches_complex_selector(&selector.complex_selector, element,
None, &mut StyleRelations::empty(),
MatchingReason::Other);
let candidate_matches =
matches_complex_selector(&selector.complex_selector, candidate,
None, &mut StyleRelations::empty(),
MatchingReason::Other);
if element_matches != candidate_matches {
return false;
@ -497,20 +508,21 @@ impl Stylist {
{
use selectors::matching::StyleRelations;
use selectors::matching::matches_complex_selector;
// XXX we can probably do better, the candidate should already know what
// rules it matches.
// TODO(emilio): we can probably do better, the candidate should already
// know what rules it matches.
//
// XXX The bloom filter would help here, and should be available.
// TODO(emilio): Use the bloom filter, since they contain the element's
// ancestor chain and it's correct for the candidate too.
for ref selector in self.sibling_affecting_selectors.iter() {
let element_matches = matches_complex_selector(&selector.complex_selector,
element,
None,
&mut StyleRelations::empty());
let element_matches =
matches_complex_selector(&selector.complex_selector, element,
None, &mut StyleRelations::empty(),
MatchingReason::Other);
let candidate_matches = matches_complex_selector(&selector.complex_selector,
candidate,
None,
&mut StyleRelations::empty());
let candidate_matches =
matches_complex_selector(&selector.complex_selector, candidate,
None, &mut StyleRelations::empty(),
MatchingReason::Other);
if element_matches != candidate_matches {
debug!("match_same_sibling_affecting_rules: Failure due to {:?}",
@ -650,6 +662,7 @@ impl SelectorMap {
parent_bf: Option<&BloomFilter>,
matching_rules_list: &mut V,
relations: &mut StyleRelations,
reason: MatchingReason,
importance: Importance)
where E: Element<Impl=TheSelectorImpl>,
V: VecLike<DeclarationBlock>
@ -667,6 +680,7 @@ impl SelectorMap {
&id,
matching_rules_list,
relations,
reason,
importance)
}
@ -677,6 +691,7 @@ impl SelectorMap {
class,
matching_rules_list,
relations,
reason,
importance);
});
@ -691,6 +706,7 @@ impl SelectorMap {
element.get_local_name(),
matching_rules_list,
relations,
reason,
importance);
SelectorMap::get_matching_rules(element,
@ -698,6 +714,7 @@ impl SelectorMap {
&self.other_rules,
matching_rules_list,
relations,
reason,
importance);
// Sort only the rules we just added.
@ -735,6 +752,7 @@ impl SelectorMap {
key: &BorrowedStr,
matching_rules: &mut Vector,
relations: &mut StyleRelations,
reason: MatchingReason,
importance: Importance)
where E: Element<Impl=TheSelectorImpl>,
Str: Borrow<BorrowedStr> + Eq + Hash,
@ -747,6 +765,7 @@ impl SelectorMap {
rules,
matching_rules,
relations,
reason,
importance)
}
}
@ -757,6 +776,7 @@ impl SelectorMap {
rules: &[Rule],
matching_rules: &mut V,
relations: &mut StyleRelations,
reason: MatchingReason,
importance: Importance)
where E: Element<Impl=TheSelectorImpl>,
V: VecLike<DeclarationBlock>
@ -769,8 +789,8 @@ impl SelectorMap {
block.any_normal()
};
if any_declaration_for_importance &&
matches_complex_selector(&*rule.selector,
element, parent_bf, relations) {
matches_complex_selector(&*rule.selector, element, parent_bf,
relations, reason) {
matching_rules.push(rule.declarations.clone());
}
}