aboutsummaryrefslogtreecommitdiffstats
path: root/components/layout/wrapper.rs
diff options
context:
space:
mode:
authorbors-servo <lbergstrom+bors@mozilla.com>2016-03-31 00:47:07 +0530
committerbors-servo <lbergstrom+bors@mozilla.com>2016-03-31 00:47:07 +0530
commit723989b9dddeb9bcdc28dc7d640fd6fd7247a27f (patch)
tree1cc0d0875809577e8d2dafab2a3623b043022523 /components/layout/wrapper.rs
parente1485718128bff632eff5445583e925ff796bdba (diff)
parent46829bd53ced5d7d5a4b4c6600f2061cc8720536 (diff)
downloadservo-723989b9dddeb9bcdc28dc7d640fd6fd7247a27f.tar.gz
servo-723989b9dddeb9bcdc28dc7d640fd6fd7247a27f.zip
Auto merge of #10252 - emilio:selection, r=mbrubeck
Implement ::selection pseudo-element It only supports `color` and `background`, for now, but it shouldn't be hard to add more properties (like text-shadow). r? @mbrubeck <!-- Reviewable:start --> --- This change is [<img src="https://reviewable.io/review_button.svg" height="35" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/10252) <!-- Reviewable:end -->
Diffstat (limited to 'components/layout/wrapper.rs')
-rw-r--r--components/layout/wrapper.rs25
1 files changed, 17 insertions, 8 deletions
diff --git a/components/layout/wrapper.rs b/components/layout/wrapper.rs
index 387e5238d07..a0f7c54de93 100644
--- a/components/layout/wrapper.rs
+++ b/components/layout/wrapper.rs
@@ -702,11 +702,14 @@ pub trait ThreadSafeLayoutNode : Clone + Copy + Sized + PartialEq {
})
}
+ // TODO(emilio): Since the ::-details-* pseudos are internal, just affecting one element, and
+ // only changing `display` property when the element `open` attribute changes, this should be
+ // eligible for not being cascaded eagerly, reading the display property from layout instead.
#[inline]
fn get_details_summary_pseudo(&self) -> Option<Self> {
if self.is_element() &&
- self.as_element().get_local_name() == &atom!("details") &&
- self.as_element().get_namespace() == &ns!(html) {
+ self.as_element().get_local_name() == &atom!("details") &&
+ self.as_element().get_namespace() == &ns!(html) {
self.borrow_layout_data().unwrap()
.style_data.per_pseudo
.get(&PseudoElement::DetailsSummary)
@@ -721,8 +724,8 @@ pub trait ThreadSafeLayoutNode : Clone + Copy + Sized + PartialEq {
#[inline]
fn get_details_content_pseudo(&self) -> Option<Self> {
if self.is_element() &&
- self.as_element().get_local_name() == &atom!("details") &&
- self.as_element().get_namespace() == &ns!(html) {
+ self.as_element().get_local_name() == &atom!("details") &&
+ self.as_element().get_namespace() == &ns!(html) {
self.borrow_layout_data().unwrap()
.style_data.per_pseudo
.get(&PseudoElement::DetailsContent)
@@ -764,6 +767,13 @@ pub trait ThreadSafeLayoutNode : Clone + Copy + Sized + PartialEq {
})
}
+ #[inline]
+ fn selected_style(&self) -> Ref<Arc<ServoComputedValues>> {
+ Ref::map(self.borrow_layout_data().unwrap(), |data| {
+ data.style_data.per_pseudo.get(&PseudoElement::Selection).unwrap_or(data.style_data.style.as_ref().unwrap())
+ })
+ }
+
/// Removes the style from this node.
///
/// Unlike the version on TNode, this handles pseudo-elements.
@@ -1015,7 +1025,7 @@ impl<'ln> ThreadSafeLayoutNode for ServoThreadSafeLayoutNode<'ln> {
}
fn text_content(&self) -> TextContent {
- if self.pseudo != PseudoElementType::Normal {
+ if self.pseudo.is_before_or_after() {
let data = &self.borrow_layout_data().unwrap().style_data;
let style = if self.pseudo.is_before() {
@@ -1136,7 +1146,6 @@ impl<ConcreteNode> Iterator for ThreadSafeLayoutNodeChildrenIterator<ConcreteNod
type Item = ConcreteNode;
fn next(&mut self) -> Option<ConcreteNode> {
match self.parent_node.get_pseudo_element_type() {
-
PseudoElementType::Before(_) | PseudoElementType::After(_) => None,
PseudoElementType::DetailsSummary(_) => {
@@ -1162,8 +1171,8 @@ impl<ConcreteNode> Iterator for ThreadSafeLayoutNodeChildrenIterator<ConcreteNod
let node = self.current_node.clone();
let node = node.and_then(|node| {
if node.is_element() &&
- node.as_element().get_local_name() == &atom!("summary") &&
- node.as_element().get_namespace() == &ns!(html) {
+ node.as_element().get_local_name() == &atom!("summary") &&
+ node.as_element().get_namespace() == &ns!(html) {
unsafe { node.dangerous_next_sibling() }
} else {
Some(node)