diff options
Diffstat (limited to 'components/layout/table_rowgroup.rs')
-rw-r--r-- | components/layout/table_rowgroup.rs | 139 |
1 files changed, 91 insertions, 48 deletions
diff --git a/components/layout/table_rowgroup.rs b/components/layout/table_rowgroup.rs index d11c38cc275..3d77aca9382 100644 --- a/components/layout/table_rowgroup.rs +++ b/components/layout/table_rowgroup.rs @@ -66,23 +66,32 @@ impl TableRowGroupFlow { } pub fn populate_collapsed_border_spacing<'a, I>( - &mut self, - collapsed_inline_direction_border_widths_for_table: &[Au], - collapsed_block_direction_border_widths_for_table: &mut Peekable<I>) - where I: Iterator<Item=&'a Au> { - self.collapsed_inline_direction_border_widths_for_table.clear(); + &mut self, + collapsed_inline_direction_border_widths_for_table: &[Au], + collapsed_block_direction_border_widths_for_table: &mut Peekable<I>, + ) where + I: Iterator<Item = &'a Au>, + { self.collapsed_inline_direction_border_widths_for_table - .extend(collapsed_inline_direction_border_widths_for_table.into_iter().map(|x| *x)); + .clear(); + self.collapsed_inline_direction_border_widths_for_table + .extend( + collapsed_inline_direction_border_widths_for_table + .into_iter() + .map(|x| *x), + ); for _ in 0..self.block_flow.base.children.len() { if let Some(collapsed_block_direction_border_width_for_table) = - collapsed_block_direction_border_widths_for_table.next() { + collapsed_block_direction_border_widths_for_table.next() + { self.collapsed_block_direction_border_widths_for_table .push(*collapsed_block_direction_border_width_for_table) } } if let Some(collapsed_block_direction_border_width_for_table) = - collapsed_block_direction_border_widths_for_table.peek() { + collapsed_block_direction_border_widths_for_table.peek() + { self.collapsed_block_direction_border_widths_for_table .push(**collapsed_block_direction_border_width_for_table) } @@ -111,8 +120,10 @@ impl Flow for TableRowGroupFlow { } fn bubble_inline_sizes(&mut self) { - let _scope = layout_debug_scope!("table_rowgroup::bubble_inline_sizes {:x}", - self.block_flow.base.debug_id()); + let _scope = layout_debug_scope!( + "table_rowgroup::bubble_inline_sizes {:x}", + self.block_flow.base.debug_id() + ); // Proper calculation of intrinsic sizes in table layout requires access to the entire // table, which we don't have yet. Defer to our parent. } @@ -120,9 +131,14 @@ impl Flow for TableRowGroupFlow { /// Recursively (top-down) determines the actual inline-size of child contexts and fragments. /// When called on this context, the context has had its inline-size set by the parent context. fn assign_inline_sizes(&mut self, layout_context: &LayoutContext) { - let _scope = layout_debug_scope!("table_rowgroup::assign_inline_sizes {:x}", - self.block_flow.base.debug_id()); - debug!("assign_inline_sizes({}): assigning inline_size for flow", "table_rowgroup"); + let _scope = layout_debug_scope!( + "table_rowgroup::assign_inline_sizes {:x}", + self.block_flow.base.debug_id() + ); + debug!( + "assign_inline_sizes({}): assigning inline_size for flow", + "table_rowgroup" + ); let shared_context = layout_context.shared_context(); // The position was set to the containing block by the flow's parent. @@ -130,50 +146,66 @@ impl Flow for TableRowGroupFlow { let (inline_start_content_edge, inline_end_content_edge) = (Au(0), Au(0)); let content_inline_size = containing_block_inline_size; - let border_collapse = self.block_flow.fragment.style.get_inherited_table().border_collapse; + let border_collapse = self + .block_flow + .fragment + .style + .get_inherited_table() + .border_collapse; let inline_size_computer = InternalTable; - inline_size_computer.compute_used_inline_size(&mut self.block_flow, - shared_context, - containing_block_inline_size); + inline_size_computer.compute_used_inline_size( + &mut self.block_flow, + shared_context, + containing_block_inline_size, + ); let collapsed_inline_direction_border_widths_for_table = &self.collapsed_inline_direction_border_widths_for_table; - let mut collapsed_block_direction_border_widths_for_table = - self.collapsed_block_direction_border_widths_for_table.iter().peekable(); - self.block_flow.propagate_assigned_inline_size_to_children(shared_context, - inline_start_content_edge, - inline_end_content_edge, - content_inline_size, - |child_flow, - _child_index, - _content_inline_size, - _writing_mode, - _inline_start_margin_edge, - _inline_end_margin_edge| { - if border_collapse == border_collapse::T::Collapse { - let child_table_row = child_flow.as_mut_table_row(); - child_table_row.populate_collapsed_border_spacing( - collapsed_inline_direction_border_widths_for_table, - &mut collapsed_block_direction_border_widths_for_table); - } - }); + let mut collapsed_block_direction_border_widths_for_table = self + .collapsed_block_direction_border_widths_for_table + .iter() + .peekable(); + self.block_flow.propagate_assigned_inline_size_to_children( + shared_context, + inline_start_content_edge, + inline_end_content_edge, + content_inline_size, + |child_flow, + _child_index, + _content_inline_size, + _writing_mode, + _inline_start_margin_edge, + _inline_end_margin_edge| { + if border_collapse == border_collapse::T::Collapse { + let child_table_row = child_flow.as_mut_table_row(); + child_table_row.populate_collapsed_border_spacing( + collapsed_inline_direction_border_widths_for_table, + &mut collapsed_block_direction_border_widths_for_table, + ); + } + }, + ); } fn assign_block_size(&mut self, lc: &LayoutContext) { debug!("assign_block_size: assigning block_size for table_rowgroup"); - self.block_flow.assign_block_size_for_table_like_flow(self.spacing.vertical(), lc); + self.block_flow + .assign_block_size_for_table_like_flow(self.spacing.vertical(), lc); } fn compute_stacking_relative_position(&mut self, layout_context: &LayoutContext) { - self.block_flow.compute_stacking_relative_position(layout_context) + self.block_flow + .compute_stacking_relative_position(layout_context) } fn update_late_computed_inline_position_if_necessary(&mut self, inline_position: Au) { - self.block_flow.update_late_computed_inline_position_if_necessary(inline_position) + self.block_flow + .update_late_computed_inline_position_if_necessary(inline_position) } fn update_late_computed_block_position_if_necessary(&mut self, block_position: Au) { - self.block_flow.update_late_computed_block_position_if_necessary(block_position) + self.block_flow + .update_late_computed_block_position_if_necessary(block_position) } fn build_display_list(&mut self, _: &mut DisplayListBuildState) { @@ -181,12 +213,17 @@ impl Flow for TableRowGroupFlow { // we skip setting the damage in TableCellStyleInfo::build_display_list() // because we only have immutable access - self.block_flow.fragment.restyle_damage.remove(ServoRestyleDamage::REPAINT); + self.block_flow + .fragment + .restyle_damage + .remove(ServoRestyleDamage::REPAINT); } fn collect_stacking_contexts(&mut self, state: &mut StackingContextCollectionState) { - self.block_flow.collect_stacking_contexts_for_block(state, - StackingContextCollectionFlags::POSITION_NEVER_CREATES_CONTAINING_BLOCK); + self.block_flow.collect_stacking_contexts_for_block( + state, + StackingContextCollectionFlags::POSITION_NEVER_CREATES_CONTAINING_BLOCK, + ); } fn repair_style(&mut self, new_style: &::ServoArc<ComputedValues>) { @@ -209,11 +246,17 @@ impl Flow for TableRowGroupFlow { self.block_flow.generated_containing_block_size(flow) } - fn iterate_through_fragment_border_boxes(&self, - iterator: &mut FragmentBorderBoxIterator, - level: i32, - stacking_context_position: &Point2D<Au>) { - self.block_flow.iterate_through_fragment_border_boxes(iterator, level, stacking_context_position) + fn iterate_through_fragment_border_boxes( + &self, + iterator: &mut FragmentBorderBoxIterator, + level: i32, + stacking_context_position: &Point2D<Au>, + ) { + self.block_flow.iterate_through_fragment_border_boxes( + iterator, + level, + stacking_context_position, + ) } fn mutate_fragments(&mut self, mutator: &mut FnMut(&mut Fragment)) { |