style: Allow storing a DocumentState for invalidation.

This commit is contained in:
Emilio Cobos Álvarez 2018-01-11 12:37:47 +01:00
parent 1e27f2883b
commit cb1a951477
No known key found for this signature in database
GPG key ID: 056B727BB9C1027C
2 changed files with 26 additions and 6 deletions

View file

@ -2110,8 +2110,14 @@ impl<'le> ::selectors::Element for GeckoElement<'le> {
self.get_document_theme() == DocumentTheme::Doc_Theme_Dark
}
NonTSPseudoClass::MozWindowInactive => {
self.document_state()
.contains(DocumentState::NS_DOCUMENT_STATE_WINDOW_INACTIVE)
let state_bit = DocumentState::NS_DOCUMENT_STATE_WINDOW_INACTIVE;
if let Some(ref invalidation_data) = context.extra_data {
if invalidation_data.document_state.intersects(state_bit) {
return true;
}
}
self.document_state().contains(state_bit)
}
NonTSPseudoClass::MozPlaceholder => false,
NonTSPseudoClass::MozAny(ref sels) => {
@ -2126,9 +2132,16 @@ impl<'le> ::selectors::Element for GeckoElement<'le> {
self.match_element_lang(None, lang_arg)
}
NonTSPseudoClass::MozLocaleDir(ref dir) => {
let doc_is_rtl =
self.document_state()
.contains(DocumentState::NS_DOCUMENT_STATE_RTL_LOCALE);
let state_bit = DocumentState::NS_DOCUMENT_STATE_RTL_LOCALE;
if let Some(ref invalidation_data) = context.extra_data {
// NOTE(emilio): We could still return false for
// Direction::Other(..), but we don't bother.
if invalidation_data.document_state.intersects(state_bit) {
return true;
}
}
let doc_is_rtl = self.document_state().contains(state_bit);
match **dir {
Direction::Ltr => !doc_is_rtl,