diff options
author | bors-servo <lbergstrom+bors@mozilla.com> | 2015-10-31 10:05:45 +0530 |
---|---|---|
committer | bors-servo <lbergstrom+bors@mozilla.com> | 2015-10-31 10:05:45 +0530 |
commit | 521a87180a85709f8f704df33537f79bd131bf71 (patch) | |
tree | 4cac4c0dc50a40f9fa31b745f3ada54e1ee293d9 /components/layout/wrapper.rs | |
parent | 7512aa69c034767cfb41206180bec50b020b2b0f (diff) | |
parent | 79ac365a68333072d80c41c05e56effbe1335f3d (diff) | |
download | servo-521a87180a85709f8f704df33537f79bd131bf71.tar.gz servo-521a87180a85709f8f704df33537f79bd131bf71.zip |
Auto merge of #8162 - bholley:centralize_event_states, r=pcwalton
Centralize event states in rust-selectors
This still needs a rev bump on rust-selectors once https://github.com/servo/rust-selectors/pull/55 gets merged.
<!-- Reviewable:start -->
[<img src="https://reviewable.io/review_button.png" height=40 alt="Review on Reviewable"/>](https://reviewable.io/reviews/servo/servo/8162)
<!-- Reviewable:end -->
Diffstat (limited to 'components/layout/wrapper.rs')
-rw-r--r-- | components/layout/wrapper.rs | 56 |
1 files changed, 16 insertions, 40 deletions
diff --git a/components/layout/wrapper.rs b/components/layout/wrapper.rs index c9a809dc07a..46a2caed506 100644 --- a/components/layout/wrapper.rs +++ b/components/layout/wrapper.rs @@ -43,8 +43,7 @@ use script::dom::bindings::conversions::Castable; use script::dom::bindings::js::LayoutJS; use script::dom::characterdata::LayoutCharacterDataHelpers; use script::dom::document::{Document, LayoutDocumentHelpers}; -use script::dom::element; -use script::dom::element::{Element, EventState, LayoutElementHelpers, RawLayoutElementHelpers}; +use script::dom::element::{Element, LayoutElementHelpers, RawLayoutElementHelpers}; use script::dom::htmlcanvaselement::{LayoutHTMLCanvasElementHelpers, HTMLCanvasData}; use script::dom::htmliframeelement::HTMLIFrameElement; use script::dom::htmlimageelement::LayoutHTMLImageElementHelpers; @@ -56,6 +55,7 @@ use script::dom::text::Text; use script::layout_interface::TrustedNodeAddress; use selectors::matching::DeclarationBlock; use selectors::parser::{AttrSelector, NamespaceConstraint}; +use selectors::states::*; use smallvec::VecLike; use std::borrow::ToOwned; use std::cell::{Ref, RefMut}; @@ -375,9 +375,9 @@ impl<'le> LayoutDocument<'le> { self.as_node().children().find(LayoutNode::is_element) } - pub fn drain_event_state_changes(&self) -> Vec<(LayoutElement, EventState)> { + pub fn drain_element_state_changes(&self) -> Vec<(LayoutElement, ElementState)> { unsafe { - let changes = self.document.drain_event_state_changes(); + let changes = self.document.drain_element_state_changes(); Vec::from_iter(changes.iter().map(|&(el, state)| (LayoutElement { element: el, @@ -408,11 +408,11 @@ impl<'le> LayoutElement<'le> { } } - /// Properly marks nodes as dirty in response to event state changes. + /// Properly marks nodes as dirty in response to state changes. /// /// Currently this implementation is very conservative, and basically mirrors node::dirty_impl. /// With restyle hints, we can do less work here. - pub fn note_event_state_change(&self) { + pub fn note_state_change(&self) { let node = self.as_node(); // Bail out if we're already dirty. This won't be valid when we start doing more targeted @@ -453,6 +453,15 @@ fn as_element<'le>(node: LayoutJS<Node>) -> Option<LayoutElement<'le>> { }) } +macro_rules! state_getter { + ($( + $(#[$Flag_attr: meta])* + state $css: expr => $variant: ident / $method: ident / + $flag: ident = $value: expr, + )+) => { + $( fn $method(&self) -> bool { self.element.get_state_for_layout().contains($flag) } )+ + } +} impl<'le> ::selectors::Element for LayoutElement<'le> { fn parent_element(&self) -> Option<LayoutElement<'le>> { @@ -544,20 +553,7 @@ impl<'le> ::selectors::Element for LayoutElement<'le> { false } - #[inline] - fn get_hover_state(&self) -> bool { - self.element.get_event_state_for_layout().contains(element::IN_HOVER_STATE) - } - - #[inline] - fn get_focus_state(&self) -> bool { - self.element.get_event_state_for_layout().contains(element::IN_FOCUS_STATE) - } - - #[inline] - fn get_active_state(&self) -> bool { - self.element.get_event_state_for_layout().contains(element::IN_ACTIVE_STATE) - } + state_pseudo_classes!(state_getter); #[inline] fn get_id(&self) -> Option<Atom> { @@ -567,26 +563,6 @@ impl<'le> ::selectors::Element for LayoutElement<'le> { } #[inline] - fn get_disabled_state(&self) -> bool { - self.element.get_event_state_for_layout().contains(element::IN_DISABLED_STATE) - } - - #[inline] - fn get_enabled_state(&self) -> bool { - self.element.get_event_state_for_layout().contains(element::IN_ENABLED_STATE) - } - - #[inline] - fn get_checked_state(&self) -> bool { - self.element.get_checked_state_for_layout() - } - - #[inline] - fn get_indeterminate_state(&self) -> bool { - self.element.get_indeterminate_state_for_layout() - } - - #[inline] fn has_class(&self, name: &Atom) -> bool { unsafe { self.element.has_class_for_layout(name) |