From d23cbd37b8039596a3d391fda73167f0cfacee81 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Naz=C4=B1m=20Can=20Alt=C4=B1nova?= Date: Sat, 18 Mar 2017 00:52:13 +0300 Subject: [PATCH] Stylo: Add support for -moz-* pseudo-classes for alt text --- components/style/element_state.rs | 18 ++++++++++++++++-- .../style/gecko/non_ts_pseudo_class_list.rs | 10 ++++++++++ components/style/gecko/snapshot.rs | 2 +- components/style/gecko/wrapper.rs | 11 +++++++++-- 4 files changed, 36 insertions(+), 5 deletions(-) diff --git a/components/style/element_state.rs b/components/style/element_state.rs index c5e11ba18489..b57f2a99beb1 100644 --- a/components/style/element_state.rs +++ b/components/style/element_state.rs @@ -9,7 +9,7 @@ bitflags! { #[doc = "Event-based element states."] #[cfg_attr(feature = "servo", derive(HeapSizeOf))] - pub flags ElementState: u16 { + pub flags ElementState: u32 { #[doc = "The mouse is down on this element. \ https://html.spec.whatwg.org/multipage/#selector-active \ FIXME(#7333): set/unset this when appropriate"] @@ -43,7 +43,21 @@ bitflags! { const IN_INVALID_STATE = 0x800, #[doc = "Non-standard: https://developer.mozilla.org/en-US/docs/Web/CSS/:-moz-ui-valid"] const IN_MOZ_UI_VALID_STATE = 0x1000, + #[doc = "Non-standard: https://developer.mozilla.org/en-US/docs/Web/CSS/:-moz-broken"] + const IN_BROKEN_STATE = 0x2000, + #[doc = "Non-standard: https://developer.mozilla.org/en-US/docs/Web/CSS/:-moz-user-disabled"] + const IN_USER_DISABLED_STATE = 0x4000, + #[doc = "Non-standard: https://developer.mozilla.org/en-US/docs/Web/CSS/:-moz-suppressed"] + const IN_SUPPRESSED_STATE = 0x8000, + #[doc = "Non-standard: https://developer.mozilla.org/en-US/docs/Web/CSS/:-moz-loading"] + const IN_LOADING_STATE = 0x10000, + #[doc = "Non-standard: https://developer.mozilla.org/en-US/docs/Web/CSS/:-moz-handler-blocked"] + const IN_HANDLER_BLOCKED_STATE = 0x20000, + #[doc = "Non-standard: https://developer.mozilla.org/en-US/docs/Web/CSS/:-moz-handler-disabled"] + const IN_HANDLER_DISABLED_STATE = 0x40000, + #[doc = "Non-standard: https://developer.mozilla.org/en-US/docs/Web/CSS/:-moz-handler-crashed"] + const IN_HANDLER_CRASHED_STATE = 0x80000, #[doc = "https://html.spec.whatwg.org/multipage/#selector-read-write"] - const IN_READ_WRITE_STATE = 0x2000, + const IN_READ_WRITE_STATE = 0x100000, } } diff --git a/components/style/gecko/non_ts_pseudo_class_list.rs b/components/style/gecko/non_ts_pseudo_class_list.rs index 6f70feca239b..f18bbf839748 100644 --- a/components/style/gecko/non_ts_pseudo_class_list.rs +++ b/components/style/gecko/non_ts_pseudo_class_list.rs @@ -49,6 +49,16 @@ macro_rules! apply_non_ts_list { ("valid", Valid, valid, IN_VALID_STATE, _), ("invalid", Invalid, invalid, IN_INVALID_STATE, _), ("-moz-ui-valid", MozUIValid, mozUIValid, IN_MOZ_UI_VALID_STATE, _), + ("-moz-broken", MozBroken, mozBroken, IN_BROKEN_STATE, _), + ("-moz-user-disabled", MozUserDisabled, mozUserDisabled, IN_USER_DISABLED_STATE, PSEUDO_CLASS_INTERNAL), + ("-moz-suppressed", MozSuppressed, mozSuppressed, IN_SUPPRESSED_STATE, PSEUDO_CLASS_INTERNAL), + ("-moz-loading", MozLoading, mozLoading, IN_LOADING_STATE, _), + ("-moz-handler-blocked", MozHandlerBlocked, mozHandlerBlocked, IN_HANDLER_BLOCKED_STATE, + PSEUDO_CLASS_INTERNAL), + ("-moz-handler-disabled", MozHandlerDisabled, mozHandlerDisabled, IN_HANDLER_DISABLED_STATE, + PSEUDO_CLASS_INTERNAL), + ("-moz-handler-crashed", MozHandlerCrashed, mozHandlerCrashed, IN_HANDLER_CRASHED_STATE, + PSEUDO_CLASS_INTERNAL), ("read-write", ReadWrite, _, IN_READ_WRITE_STATE, _), ("read-only", ReadOnly, _, IN_READ_WRITE_STATE, _), diff --git a/components/style/gecko/snapshot.rs b/components/style/gecko/snapshot.rs index 4398fbf8e294..f0a929835aef 100644 --- a/components/style/gecko/snapshot.rs +++ b/components/style/gecko/snapshot.rs @@ -138,7 +138,7 @@ impl ::selectors::MatchAttr for GeckoElementSnapshot { impl ElementSnapshot for GeckoElementSnapshot { fn state(&self) -> Option { if self.has_any(Flags::State) { - Some(ElementState::from_bits_truncate(unsafe { (*self.0).mState as u16 })) + Some(ElementState::from_bits_truncate(unsafe { (*self.0).mState as u32 })) } else { None } diff --git a/components/style/gecko/wrapper.rs b/components/style/gecko/wrapper.rs index a722677e78f6..fa057a4ae26b 100644 --- a/components/style/gecko/wrapper.rs +++ b/components/style/gecko/wrapper.rs @@ -447,7 +447,7 @@ impl<'le> TElement for GeckoElement<'le> { fn get_state(&self) -> ElementState { unsafe { - ElementState::from_bits_truncate(Gecko_ElementState(self.0)) + ElementState::from_bits_truncate(Gecko_ElementState(self.0) as u32) } } @@ -680,7 +680,14 @@ impl<'le> ::selectors::Element for GeckoElement<'le> { NonTSPseudoClass::Target | NonTSPseudoClass::Valid | NonTSPseudoClass::Invalid | - NonTSPseudoClass::MozUIValid => { + NonTSPseudoClass::MozUIValid | + NonTSPseudoClass::MozBroken | + NonTSPseudoClass::MozUserDisabled | + NonTSPseudoClass::MozSuppressed | + NonTSPseudoClass::MozLoading | + NonTSPseudoClass::MozHandlerBlocked | + NonTSPseudoClass::MozHandlerDisabled | + NonTSPseudoClass::MozHandlerCrashed => { self.get_state().contains(pseudo_class.state_flag()) }, NonTSPseudoClass::ReadOnly => {