mirror of
https://github.com/servo/servo.git
synced 2025-08-05 21:50:18 +01:00
layout: Factor out the code to ensure a node data is initialized.
This commit is contained in:
parent
2c321015e9
commit
477c3c8c5b
1 changed files with 16 additions and 11 deletions
|
@ -615,6 +615,20 @@ pub fn process_node_scroll_area_request< N: LayoutNode>(requested_node: N, layou
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Ensures that a node's data, and all its parents' is initialized. This is
|
||||||
|
/// needed to resolve style lazily.
|
||||||
|
fn ensure_node_data_initialized<N: LayoutNode>(node: &N) {
|
||||||
|
let mut cur = Some(node.clone());
|
||||||
|
while let Some(current) = cur {
|
||||||
|
if current.borrow_data().is_some() {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
current.initialize_data();
|
||||||
|
cur = current.parent_node();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// Return the resolved value of property for a given (pseudo)element.
|
/// Return the resolved value of property for a given (pseudo)element.
|
||||||
/// https://drafts.csswg.org/cssom/#resolved-value
|
/// https://drafts.csswg.org/cssom/#resolved-value
|
||||||
pub fn process_resolved_style_request<'a, N, C>(requested_node: N,
|
pub fn process_resolved_style_request<'a, N, C>(requested_node: N,
|
||||||
|
@ -630,17 +644,8 @@ pub fn process_resolved_style_request<'a, N, C>(requested_node: N,
|
||||||
// This node might have display: none, or it's style might be not up to
|
// This node might have display: none, or it's style might be not up to
|
||||||
// date, so we might need to do style recalc.
|
// date, so we might need to do style recalc.
|
||||||
//
|
//
|
||||||
// XXX: Is a bit shame we have to do this instead of in style :/
|
// FIXME(emilio): Is a bit shame we have to do this instead of in style.
|
||||||
let mut cur = Some(requested_node);
|
ensure_node_data_initialized(&requested_node);
|
||||||
while let Some(current) = cur {
|
|
||||||
if current.borrow_data().is_some() {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
current.initialize_data();
|
|
||||||
cur = current.parent_node();
|
|
||||||
}
|
|
||||||
|
|
||||||
ensure_node_styled(requested_node, style_context);
|
ensure_node_styled(requested_node, style_context);
|
||||||
|
|
||||||
let layout_node = requested_node.to_threadsafe();
|
let layout_node = requested_node.to_threadsafe();
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue