mirror of
https://github.com/servo/servo.git
synced 2025-07-22 23:03:42 +01:00
Force reflow in the sequential fallback of block format context
When reflowing a block format context during the inorder traversal, propagate restyle damage manually to its children since they were already reflowed.
This commit is contained in:
parent
56435db820
commit
68f74d5cbe
6 changed files with 25 additions and 14 deletions
|
@ -14,8 +14,9 @@ use flow::{PostorderFlowTraversal, PreorderFlowTraversal};
|
|||
use flow::IS_ABSOLUTELY_POSITIONED;
|
||||
use fragment::FragmentBorderBoxIterator;
|
||||
use generated_content::ResolveGeneratedContent;
|
||||
use incremental::RelayoutMode;
|
||||
use servo_config::opts;
|
||||
use style::servo::restyle_damage::{REFLOW, STORE_OVERFLOW};
|
||||
use style::servo::restyle_damage::{REFLOW, REFLOW_OUT_OF_FLOW, STORE_OVERFLOW};
|
||||
use traversal::{AssignBSizes, AssignISizes, BubbleISizes, BuildDisplayList};
|
||||
|
||||
pub use style::sequential::traverse_dom;
|
||||
|
@ -38,16 +39,24 @@ pub fn resolve_generated_content(root: &mut Flow, layout_context: &LayoutContext
|
|||
}
|
||||
|
||||
pub fn traverse_flow_tree_preorder(root: &mut Flow,
|
||||
layout_context: &LayoutContext) {
|
||||
layout_context: &LayoutContext,
|
||||
relayout_mode: RelayoutMode) {
|
||||
fn doit(flow: &mut Flow,
|
||||
assign_inline_sizes: AssignISizes,
|
||||
assign_block_sizes: AssignBSizes) {
|
||||
assign_block_sizes: AssignBSizes,
|
||||
relayout_mode: RelayoutMode) {
|
||||
// Force reflow children during this traversal. This is needed when we failed
|
||||
// the float speculation of a block formatting context and need to fix it.
|
||||
if relayout_mode == RelayoutMode::Force {
|
||||
flow::mut_base(flow).restyle_damage.insert(REFLOW_OUT_OF_FLOW | REFLOW);
|
||||
}
|
||||
|
||||
if assign_inline_sizes.should_process(flow) {
|
||||
assign_inline_sizes.process(flow);
|
||||
}
|
||||
|
||||
for kid in flow::child_iter_mut(flow) {
|
||||
doit(kid, assign_inline_sizes, assign_block_sizes);
|
||||
doit(kid, assign_inline_sizes, assign_block_sizes, relayout_mode);
|
||||
}
|
||||
|
||||
if assign_block_sizes.should_process(flow) {
|
||||
|
@ -66,7 +75,7 @@ pub fn traverse_flow_tree_preorder(root: &mut Flow,
|
|||
let assign_inline_sizes = AssignISizes { layout_context: &layout_context };
|
||||
let assign_block_sizes = AssignBSizes { layout_context: &layout_context };
|
||||
|
||||
doit(root, assign_inline_sizes, assign_block_sizes);
|
||||
doit(root, assign_inline_sizes, assign_block_sizes, relayout_mode);
|
||||
}
|
||||
|
||||
pub fn build_display_list_for_subtree<'a>(flow_root: &mut Flow,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue