aboutsummaryrefslogtreecommitdiffstats
path: root/components/layout/table_rowgroup.rs
diff options
context:
space:
mode:
Diffstat (limited to 'components/layout/table_rowgroup.rs')
-rw-r--r--components/layout/table_rowgroup.rs139
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)) {