diff options
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) |