mirror of
https://github.com/servo/servo.git
synced 2025-08-05 21:50:18 +01:00
style: Allow inheritance when computing anonymous box styles
This is used a lot by Gecko, not still for servo though.
This commit is contained in:
parent
3563ecb770
commit
5a43c7e3cd
4 changed files with 56 additions and 31 deletions
|
@ -738,8 +738,8 @@ pub trait ThreadSafeLayoutNode : Clone + Copy + Sized + PartialEq {
|
|||
self.borrow_layout_data().unwrap()
|
||||
.style_data
|
||||
.precomputed
|
||||
.non_eagerly_cascaded_pseudo_elements
|
||||
.get(&PseudoElement::DetailsContent)
|
||||
.computed_values_for(&PseudoElement::DetailsContent,
|
||||
Some(&*self.style()))
|
||||
.map(|style| {
|
||||
let display = if element.get_attr(&ns!(), &atom!("open")).is_some() {
|
||||
style.get_box().display
|
||||
|
@ -768,6 +768,22 @@ pub trait ThreadSafeLayoutNode : Clone + Copy + Sized + PartialEq {
|
|||
/// Unlike the version on TNode, this handles pseudo-elements.
|
||||
#[inline]
|
||||
fn style(&self) -> Ref<Arc<ServoComputedValues>> {
|
||||
// Precompute anonymous-box pseudo-element style if not cached.
|
||||
match self.get_pseudo_element_type() {
|
||||
PseudoElementType::DetailsContent(_) => {
|
||||
if self.borrow_layout_data().unwrap()
|
||||
.style_data.per_pseudo.get(&PseudoElement::DetailsContent).is_none() {
|
||||
let mut data = self.mutate_layout_data().unwrap();
|
||||
let new_style = data.style_data
|
||||
.precomputed
|
||||
.computed_values_for(&PseudoElement::DetailsContent,
|
||||
data.style_data.style.as_ref());
|
||||
data.style_data.per_pseudo.insert(PseudoElement::DetailsContent, new_style.unwrap());
|
||||
}
|
||||
}
|
||||
_ => {},
|
||||
};
|
||||
|
||||
Ref::map(self.borrow_layout_data().unwrap(), |data| {
|
||||
let style = match self.get_pseudo_element_type() {
|
||||
PseudoElementType::Before(_)
|
||||
|
@ -777,10 +793,7 @@ pub trait ThreadSafeLayoutNode : Clone + Copy + Sized + PartialEq {
|
|||
PseudoElementType::DetailsSummary(_)
|
||||
=> data.style_data.per_pseudo.get(&PseudoElement::DetailsSummary),
|
||||
PseudoElementType::DetailsContent(_)
|
||||
=> data.style_data
|
||||
.precomputed
|
||||
.non_eagerly_cascaded_pseudo_elements
|
||||
.get(&PseudoElement::DetailsContent),
|
||||
=> data.style_data.per_pseudo.get(&PseudoElement::DetailsContent),
|
||||
PseudoElementType::Normal
|
||||
=> data.style_data.style.as_ref(),
|
||||
};
|
||||
|
@ -791,7 +804,9 @@ 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())
|
||||
data.style_data.per_pseudo
|
||||
.get(&PseudoElement::Selection)
|
||||
.unwrap_or(data.style_data.style.as_ref().unwrap())
|
||||
})
|
||||
}
|
||||
|
||||
|
@ -814,7 +829,6 @@ pub trait ThreadSafeLayoutNode : Clone + Copy + Sized + PartialEq {
|
|||
PseudoElementType::DetailsContent(_) => {
|
||||
data.style_data.per_pseudo.remove(&PseudoElement::DetailsContent);
|
||||
}
|
||||
|
||||
PseudoElementType::Normal => {
|
||||
data.style_data.style = None;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue