mirror of
https://github.com/servo/servo.git
synced 2025-08-05 13:40:08 +01:00
Unconditionally layout rows when laying out tables
If the reflow flag is set on a row it will be on the table anyway
This commit is contained in:
parent
98e53db289
commit
cec37a492a
2 changed files with 5 additions and 16 deletions
|
@ -840,26 +840,18 @@ impl TableLikeFlow for BlockFlow {
|
||||||
// [expensive: iterates over cells]
|
// [expensive: iterates over cells]
|
||||||
// At this point, `current_block_offset` is at the content edge of our box. Now iterate
|
// At this point, `current_block_offset` is at the content edge of our box. Now iterate
|
||||||
// over children.
|
// over children.
|
||||||
let mut effects_rows = 0;
|
|
||||||
let mut i = 0;
|
let mut i = 0;
|
||||||
for kid in self.base.child_iter_mut() {
|
for kid in self.base.child_iter_mut() {
|
||||||
if kid.is_table_row() {
|
if kid.is_table_row() {
|
||||||
has_rows = true;
|
has_rows = true;
|
||||||
let row = kid.as_mut_table_row();
|
let row = kid.as_mut_table_row();
|
||||||
if row.mut_base().restyle_damage.contains(ServoRestyleDamage::REFLOW) ||
|
row.assign_block_size_to_self_and_children(&sizes, i);
|
||||||
effects_rows != 0 {
|
row.mut_base().restyle_damage
|
||||||
row.assign_block_size_to_self_and_children(&sizes, i, &mut effects_rows);
|
.remove(ServoRestyleDamage::REFLOW_OUT_OF_FLOW |
|
||||||
row.mut_base().restyle_damage
|
ServoRestyleDamage::REFLOW);
|
||||||
.remove(ServoRestyleDamage::REFLOW_OUT_OF_FLOW |
|
|
||||||
ServoRestyleDamage::REFLOW);
|
|
||||||
}
|
|
||||||
current_block_offset = current_block_offset +
|
current_block_offset = current_block_offset +
|
||||||
border_spacing_for_row(&self.fragment, row,
|
border_spacing_for_row(&self.fragment, row,
|
||||||
block_direction_spacing);
|
block_direction_spacing);
|
||||||
// may happen for empty rows
|
|
||||||
if effects_rows != 0 {
|
|
||||||
effects_rows -= 1;
|
|
||||||
}
|
|
||||||
i += 1;
|
i += 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -115,8 +115,6 @@ impl TableRowFlow {
|
||||||
incoming_rowspan_data: &mut Vec<Au>,
|
incoming_rowspan_data: &mut Vec<Au>,
|
||||||
border_info: &[(Au, Au)], // (_, cumulative_border_size)
|
border_info: &[(Au, Au)], // (_, cumulative_border_size)
|
||||||
row_index: usize) -> (Au, Au) {
|
row_index: usize) -> (Au, Au) {
|
||||||
// XXXManishearth skip this when the REFLOW flag is unset if it is not affected by other
|
|
||||||
// rows
|
|
||||||
fn include_sizes_from_previous_rows(col: &mut usize,
|
fn include_sizes_from_previous_rows(col: &mut usize,
|
||||||
incoming_rowspan: &[u32],
|
incoming_rowspan: &[u32],
|
||||||
incoming_rowspan_data: &mut Vec<Au>,
|
incoming_rowspan_data: &mut Vec<Au>,
|
||||||
|
@ -208,13 +206,12 @@ impl TableRowFlow {
|
||||||
(block_size, largest_leftover_incoming_size)
|
(block_size, largest_leftover_incoming_size)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn assign_block_size_to_self_and_children(&mut self, sizes: &[(Au, Au)], index: usize, effects_rows: &mut u32) {
|
pub fn assign_block_size_to_self_and_children(&mut self, sizes: &[(Au, Au)], index: usize) {
|
||||||
// Assign the block-size of kid fragments, which is the same value as own block-size.
|
// Assign the block-size of kid fragments, which is the same value as own block-size.
|
||||||
let block_size = sizes[index].0;
|
let block_size = sizes[index].0;
|
||||||
for kid in self.block_flow.base.child_iter_mut() {
|
for kid in self.block_flow.base.child_iter_mut() {
|
||||||
let child_table_cell = kid.as_mut_table_cell();
|
let child_table_cell = kid.as_mut_table_cell();
|
||||||
let block_size = if child_table_cell.row_span > 1 {
|
let block_size = if child_table_cell.row_span > 1 {
|
||||||
*effects_rows = max(*effects_rows, child_table_cell.row_span);
|
|
||||||
let row_sizes = sizes[index..].iter()
|
let row_sizes = sizes[index..].iter()
|
||||||
.take(child_table_cell.row_span as usize)
|
.take(child_table_cell.row_span as usize)
|
||||||
.fold(Au(0), |accum, size| accum + size.0);
|
.fold(Au(0), |accum, size| accum + size.0);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue