mirror of
https://github.com/servo/servo.git
synced 2025-08-03 04:30:10 +01:00
make ContainingBlock use Au for inline_size and block_size (#31370)
This commit is contained in:
parent
2fa76916d3
commit
74c07db56c
9 changed files with 83 additions and 86 deletions
|
@ -918,10 +918,10 @@ impl FloatBox {
|
|||
|
||||
let tentative_inline_size = box_size.inline.auto_is(|| {
|
||||
let available_size =
|
||||
containing_block.inline_size - pbm_sums.inline_sum().into();
|
||||
containing_block.inline_size - pbm_sums.inline_sum();
|
||||
non_replaced
|
||||
.inline_content_sizes(layout_context)
|
||||
.shrink_to_fit(available_size.into())
|
||||
.shrink_to_fit(available_size)
|
||||
.into()
|
||||
});
|
||||
let inline_size = tentative_inline_size
|
||||
|
@ -931,8 +931,8 @@ impl FloatBox {
|
|||
// https://drafts.csswg.org/css2/#block-root-margin
|
||||
// FIXME(pcwalton): Is a tree rank of zero correct here?
|
||||
let containing_block_for_children = ContainingBlock {
|
||||
inline_size,
|
||||
block_size: box_size.block,
|
||||
inline_size: inline_size.into(),
|
||||
block_size: box_size.block.map(|t| t.into()),
|
||||
style: &non_replaced.style,
|
||||
};
|
||||
let independent_layout = non_replaced.layout(
|
||||
|
|
|
@ -793,7 +793,7 @@ impl<'a, 'b> InlineFormattingContextState<'a, 'b> {
|
|||
block: block_start_position.into(),
|
||||
},
|
||||
size: LogicalVec2 {
|
||||
inline: self.containing_block.inline_size,
|
||||
inline: self.containing_block.inline_size.into(),
|
||||
block: effective_block_advance.resolve(),
|
||||
},
|
||||
};
|
||||
|
@ -868,7 +868,7 @@ impl<'a, 'b> InlineFormattingContextState<'a, 'b> {
|
|||
placement_among_floats.start_corner.inline,
|
||||
placement_among_floats.size.inline,
|
||||
),
|
||||
None => (Length::zero(), self.containing_block.inline_size),
|
||||
None => (Length::zero(), self.containing_block.inline_size.into()),
|
||||
};
|
||||
|
||||
// Properly handling text-indent requires that we do not align the text
|
||||
|
@ -945,7 +945,7 @@ impl<'a, 'b> InlineFormattingContextState<'a, 'b> {
|
|||
|
||||
let available_inline_size = match self.current_line.placement_among_floats.get() {
|
||||
Some(placement_among_floats) => placement_among_floats.size.inline,
|
||||
None => self.containing_block.inline_size,
|
||||
None => self.containing_block.inline_size.into(),
|
||||
} - line_inline_size_without_trailing_whitespace;
|
||||
|
||||
// If this float doesn't fit on the current line or a previous float didn't fit on
|
||||
|
@ -1034,7 +1034,7 @@ impl<'a, 'b> InlineFormattingContextState<'a, 'b> {
|
|||
.clone()
|
||||
} else {
|
||||
LogicalVec2 {
|
||||
inline: self.containing_block.inline_size,
|
||||
inline: self.containing_block.inline_size.into(),
|
||||
block: Length::new(f32::INFINITY),
|
||||
}
|
||||
};
|
||||
|
@ -1067,7 +1067,7 @@ impl<'a, 'b> InlineFormattingContextState<'a, 'b> {
|
|||
|
||||
// If the potential line is larger than the containing block we do not even need to consider
|
||||
// floats. We definitely have to do a linebreak.
|
||||
if potential_line_size.inline > self.containing_block.inline_size {
|
||||
if potential_line_size.inline > self.containing_block.inline_size.into() {
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -1443,7 +1443,7 @@ impl InlineFormattingContext {
|
|||
.style
|
||||
.get_inherited_text()
|
||||
.text_indent
|
||||
.to_used_value(containing_block.inline_size.into())
|
||||
.to_used_value(containing_block.inline_size)
|
||||
.into()
|
||||
} else {
|
||||
Length::zero()
|
||||
|
@ -1873,11 +1873,10 @@ impl IndependentFormattingContext {
|
|||
|
||||
// https://drafts.csswg.org/css2/visudet.html#inlineblock-width
|
||||
let tentative_inline_size = box_size.inline.auto_is(|| {
|
||||
let available_size =
|
||||
ifc.containing_block.inline_size - pbm_sums.inline_sum().into();
|
||||
let available_size = ifc.containing_block.inline_size - pbm_sums.inline_sum();
|
||||
non_replaced
|
||||
.inline_content_sizes(layout_context)
|
||||
.shrink_to_fit(available_size.into())
|
||||
.shrink_to_fit(available_size)
|
||||
.into()
|
||||
});
|
||||
|
||||
|
@ -1888,8 +1887,8 @@ impl IndependentFormattingContext {
|
|||
.clamp_between_extremums(min_box_size.inline, max_box_size.inline);
|
||||
|
||||
let containing_block_for_children = ContainingBlock {
|
||||
inline_size,
|
||||
block_size: box_size.block,
|
||||
inline_size: inline_size.into(),
|
||||
block_size: box_size.block.map(|t| t.into()),
|
||||
style: &non_replaced.style,
|
||||
};
|
||||
assert_eq!(
|
||||
|
|
|
@ -28,7 +28,7 @@ use crate::formatting_contexts::{
|
|||
use crate::fragment_tree::{
|
||||
BaseFragmentInfo, BoxFragment, CollapsedBlockMargins, CollapsedMargin, Fragment,
|
||||
};
|
||||
use crate::geom::{LogicalRect, LogicalSides, LogicalVec2};
|
||||
use crate::geom::{AuOrAuto, LogicalRect, LogicalSides, LogicalVec2};
|
||||
use crate::positioned::{AbsolutelyPositionedBox, PositioningContext, PositioningContextLength};
|
||||
use crate::replaced::ReplacedContent;
|
||||
use crate::sizing::{self, ContentSizes};
|
||||
|
@ -141,18 +141,17 @@ impl BlockLevelBox {
|
|||
.auto_is(|| {
|
||||
let margin_inline_start = pbm.margin.inline_start.auto_is(Length::zero);
|
||||
let margin_inline_end = pbm.margin.inline_end.auto_is(Length::zero);
|
||||
containing_block.inline_size -
|
||||
pbm.padding_border_sums.inline.into() -
|
||||
Length::from(containing_block.inline_size - pbm.padding_border_sums.inline) -
|
||||
margin_inline_start -
|
||||
margin_inline_end
|
||||
})
|
||||
.clamp_between_extremums(min_inline_size, max_inline_size);
|
||||
|
||||
// The block size is irrelevant here.
|
||||
let block_size = LengthOrAuto::Auto;
|
||||
let block_size = AuOrAuto::Auto;
|
||||
|
||||
let containing_block_for_children = ContainingBlock {
|
||||
inline_size,
|
||||
inline_size: inline_size.into(),
|
||||
block_size,
|
||||
style,
|
||||
};
|
||||
|
@ -213,9 +212,7 @@ impl BlockFormattingContext {
|
|||
containing_block: &ContainingBlock,
|
||||
) -> IndependentLayout {
|
||||
let mut sequential_layout_state = if self.contains_floats || !layout_context.use_rayon {
|
||||
Some(SequentialLayoutState::new(
|
||||
containing_block.inline_size.into(),
|
||||
))
|
||||
Some(SequentialLayoutState::new(containing_block.inline_size))
|
||||
} else {
|
||||
None
|
||||
};
|
||||
|
@ -706,7 +703,7 @@ fn layout_in_flow_non_replaced_block_level_same_formatting_context(
|
|||
block_start: sequential_layout_state.bfc_relative_block_position,
|
||||
block_start_margins_not_collapsed: sequential_layout_state.current_margin,
|
||||
inline_start,
|
||||
inline_end: inline_start + containing_block_for_children.inline_size.into(),
|
||||
inline_end: inline_start + containing_block_for_children.inline_size,
|
||||
};
|
||||
parent_containing_block_position_info = Some(
|
||||
sequential_layout_state.replace_containing_block_position_info(new_cb_offsets),
|
||||
|
@ -755,7 +752,9 @@ fn layout_in_flow_non_replaced_block_level_same_formatting_context(
|
|||
(computed_min_block_size.is_definitely_zero() || computed_min_block_size.is_auto());
|
||||
|
||||
let block_size = containing_block_for_children.block_size.auto_is(|| {
|
||||
content_block_size.clamp_between_extremums(min_box_size.block, max_box_size.block)
|
||||
content_block_size
|
||||
.clamp_between_extremums(min_box_size.block, max_box_size.block)
|
||||
.into()
|
||||
});
|
||||
|
||||
if let Some(ref mut sequential_layout_state) = sequential_layout_state {
|
||||
|
@ -774,9 +773,7 @@ fn layout_in_flow_non_replaced_block_level_same_formatting_context(
|
|||
// the block direction. In that case, the ceiling for floats is effectively raised
|
||||
// as long as no floats in the overflowing content lowered it.
|
||||
sequential_layout_state.advance_block_position(
|
||||
Au::from(block_size - content_block_size) +
|
||||
pbm.padding.block_end +
|
||||
pbm.border.block_end,
|
||||
block_size - content_block_size.into() + pbm.padding.block_end + pbm.border.block_end,
|
||||
);
|
||||
|
||||
if !end_margin_can_collapse_with_children {
|
||||
|
@ -793,8 +790,8 @@ fn layout_in_flow_non_replaced_block_level_same_formatting_context(
|
|||
inline: pbm.padding.inline_start + pbm.border.inline_start + margin.inline_start.into(),
|
||||
},
|
||||
size: LogicalVec2 {
|
||||
block: block_size.into(),
|
||||
inline: containing_block_for_children.inline_size.into(),
|
||||
block: block_size,
|
||||
inline: containing_block_for_children.inline_size,
|
||||
},
|
||||
};
|
||||
|
||||
|
@ -852,13 +849,10 @@ impl NonReplacedFormattingContext {
|
|||
);
|
||||
|
||||
let block_size = containing_block_for_children.block_size.auto_is(|| {
|
||||
layout
|
||||
.content_block_size
|
||||
.clamp_between_extremums(
|
||||
min_box_size.block.into(),
|
||||
max_box_size.block.map(|t| t.into()),
|
||||
)
|
||||
.into()
|
||||
layout.content_block_size.clamp_between_extremums(
|
||||
min_box_size.block.into(),
|
||||
max_box_size.block.map(|t| t.into()),
|
||||
)
|
||||
});
|
||||
|
||||
let content_rect = LogicalRect {
|
||||
|
@ -869,8 +863,8 @@ impl NonReplacedFormattingContext {
|
|||
margin.inline_start.into(),
|
||||
},
|
||||
size: LogicalVec2 {
|
||||
block: block_size.into(),
|
||||
inline: containing_block_for_children.inline_size.into(),
|
||||
block: block_size,
|
||||
inline: containing_block_for_children.inline_size,
|
||||
},
|
||||
};
|
||||
|
||||
|
@ -937,8 +931,8 @@ impl NonReplacedFormattingContext {
|
|||
layout_context,
|
||||
positioning_context,
|
||||
&ContainingBlock {
|
||||
inline_size,
|
||||
block_size,
|
||||
inline_size: inline_size.into(),
|
||||
block_size: block_size.map(|t| t.into()),
|
||||
style: &self.style,
|
||||
},
|
||||
);
|
||||
|
@ -1007,8 +1001,8 @@ impl NonReplacedFormattingContext {
|
|||
layout_context,
|
||||
positioning_context,
|
||||
&ContainingBlock {
|
||||
inline_size: proposed_inline_size,
|
||||
block_size,
|
||||
inline_size: proposed_inline_size.into(),
|
||||
block_size: block_size.map(|t| t.into()),
|
||||
style: &self.style,
|
||||
},
|
||||
);
|
||||
|
@ -1241,8 +1235,7 @@ fn solve_containing_block_padding_border_and_margin_for_in_flow_box<'a>(
|
|||
.auto_is(|| {
|
||||
let margin_inline_start = pbm.margin.inline_start.auto_is(Length::zero);
|
||||
let margin_inline_end = pbm.margin.inline_end.auto_is(Length::zero);
|
||||
containing_block.inline_size -
|
||||
pbm.padding_border_sums.inline.into() -
|
||||
Length::from(containing_block.inline_size - pbm.padding_border_sums.inline) -
|
||||
margin_inline_start -
|
||||
margin_inline_end
|
||||
})
|
||||
|
@ -1266,8 +1259,8 @@ fn solve_containing_block_padding_border_and_margin_for_in_flow_box<'a>(
|
|||
}
|
||||
|
||||
let containing_block_for_children = ContainingBlock {
|
||||
inline_size,
|
||||
block_size,
|
||||
inline_size: inline_size.into(),
|
||||
block_size: block_size.map(|t| t.into()),
|
||||
style,
|
||||
};
|
||||
// https://drafts.csswg.org/css-writing-modes/#orthogonal-flows
|
||||
|
@ -1337,7 +1330,8 @@ fn solve_inline_margins_avoiding_floats(
|
|||
(LengthOrAuto::Auto, _) => inline_adjustment + free_space,
|
||||
_ => inline_adjustment,
|
||||
};
|
||||
let margin_inline_end = containing_block.inline_size - inline_size - margin_inline_start;
|
||||
let margin_inline_end =
|
||||
Length::from(containing_block.inline_size) - inline_size - margin_inline_start;
|
||||
(margin_inline_start, margin_inline_end)
|
||||
}
|
||||
|
||||
|
@ -1353,7 +1347,7 @@ fn solve_inline_margins_for_in_flow_block_level(
|
|||
inline_size: Length,
|
||||
) -> (Length, Length) {
|
||||
let free_space =
|
||||
containing_block.inline_size - pbm.padding_border_sums.inline.into() - inline_size;
|
||||
Length::from(containing_block.inline_size - pbm.padding_border_sums.inline) - inline_size;
|
||||
let margin_inline_start = match (pbm.margin.inline_start, pbm.margin.inline_end) {
|
||||
(LengthOrAuto::Auto, LengthOrAuto::Auto) => Length::zero().max(free_space / 2.),
|
||||
(LengthOrAuto::Auto, LengthOrAuto::LengthPercentage(end)) => {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue