layout: use Au in BoxFragment (#31794)

* use au in BoxFragement

* review fix
This commit is contained in:
atbrakhi 2024-03-22 10:00:39 +05:30 committed by GitHub
parent 0b863de846
commit 95e69fe4ff
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
13 changed files with 98 additions and 100 deletions

View file

@ -25,7 +25,7 @@ use crate::dom::NodeExt;
use crate::dom_traversal::{Contents, NodeAndStyleInfo};
use crate::formatting_contexts::IndependentFormattingContext;
use crate::fragment_tree::{BoxFragment, CollapsedBlockMargins, CollapsedMargin, FloatFragment};
use crate::geom::{LogicalRect, LogicalSides, LogicalVec2};
use crate::geom::{LogicalRect, LogicalVec2};
use crate::positioned::PositioningContext;
use crate::style_ext::{ComputedValuesExt, DisplayInside, PaddingBorderMargin};
use crate::ContainingBlock;
@ -989,9 +989,9 @@ impl FloatBox {
style.clone(),
children,
content_rect,
pbm.padding.into(),
pbm.border.into(),
margin.into(),
pbm.padding,
pbm.border,
margin,
// Clearance is handled internally by the float placement logic, so there's no need
// to store it explicitly in the fragment.
None, // clearance
@ -1215,9 +1215,8 @@ impl SequentialLayoutState {
let pbm_sums = &(&box_fragment.padding + &box_fragment.border) + &box_fragment.margin;
let content_rect: LogicalRect<Au> = box_fragment.content_rect.clone().into();
let pbm_sums_all: LogicalSides<Au> = pbm_sums.map(|length| (*length).into());
let margin_box_start_corner = self.floats.add_float(&PlacementInfo {
size: &content_rect.size + &pbm_sums_all.sum(),
size: &content_rect.size + &pbm_sums.sum(),
side: FloatSide::from_style(&box_fragment.style).expect("Float box wasn't floated!"),
clear: box_fragment.style.get_box().clear,
});
@ -1225,7 +1224,7 @@ impl SequentialLayoutState {
// This is the position of the float in the float-containing block formatting context. We add the
// existing start corner here because we may have already gotten some relative positioning offset.
let new_position_in_bfc =
&(&margin_box_start_corner + &pbm_sums_all.start_offset()) + &content_rect.start_corner;
&(&margin_box_start_corner + &pbm_sums.start_offset()) + &content_rect.start_corner;
// This is the position of the float relative to the containing block start.
let new_position_in_containing_block = LogicalVec2 {

View file

@ -1036,7 +1036,7 @@ impl<'a, 'b> InlineFormattingContextState<'a, 'b> {
let margin_box = float_item
.fragment
.border_rect()
.inflate(&float_item.fragment.margin);
.inflate(&float_item.fragment.margin.map(|t| (*t).into()));
let inline_size = margin_box.size.inline.max(Length::zero());
let available_inline_size = match self.current_line.placement_among_floats.get() {
@ -2006,9 +2006,9 @@ impl IndependentFormattingContext {
replaced.style.clone(),
fragments,
content_rect.into(),
pbm.padding.into(),
pbm.border.into(),
margin.into(),
pbm.padding,
pbm.border,
margin,
None, /* clearance */
CollapsedBlockMargins::zero(),
)
@ -2095,9 +2095,9 @@ impl IndependentFormattingContext {
non_replaced.style.clone(),
independent_layout.fragments,
content_rect.into(),
pbm.padding.into(),
pbm.border.into(),
margin.into(),
pbm.padding,
pbm.border,
margin,
None,
CollapsedBlockMargins::zero(),
)

View file

@ -378,9 +378,9 @@ impl InlineBoxLineItem {
self.style.clone(),
fragments,
content_rect,
padding.into(),
border.into(),
margin.into(),
padding,
border,
margin,
None, /* clearance */
CollapsedBlockMargins::zero(),
);

View file

@ -814,10 +814,10 @@ fn layout_in_flow_non_replaced_block_level_same_formatting_context(
style.clone(),
flow_layout.fragments,
content_rect.into(),
pbm.padding.into(),
pbm.border.into(),
margin,
clearance.map(|t| t.into()),
pbm.padding,
pbm.border,
margin.into(),
clearance,
block_margins_collapsed_with_children,
)
.with_baselines(flow_layout.baselines)
@ -900,9 +900,9 @@ impl NonReplacedFormattingContext {
self.style.clone(),
layout.fragments,
content_rect.into(),
pbm.padding.into(),
pbm.border.into(),
margin,
pbm.padding,
pbm.border,
margin.into(),
None, /* clearance */
block_margins_collapsed_with_children,
)
@ -1091,10 +1091,9 @@ impl NonReplacedFormattingContext {
// prevent margin collapse.
clearance = if clear_position.is_some() || placement_rect.start_corner.block > ceiling {
Some(
(placement_rect.start_corner.block -
placement_rect.start_corner.block -
sequential_layout_state
.position_with_zero_clearance(&collapsed_margin_block_start))
.into(),
.position_with_zero_clearance(&collapsed_margin_block_start),
)
} else {
None
@ -1130,7 +1129,8 @@ impl NonReplacedFormattingContext {
sequential_layout_state.collapse_margins();
sequential_layout_state.advance_block_position(
pbm.padding_border_sums.block +
(content_size.block + clearance.unwrap_or_else(Length::zero)).into(),
Au::from(content_size.block) +
clearance.unwrap_or_else(Au::zero),
);
sequential_layout_state.adjoin_assign(&CollapsedMargin::new(margin.block_end));
@ -1138,7 +1138,7 @@ impl NonReplacedFormattingContext {
start_corner: LogicalVec2 {
block: pbm.padding.block_start +
pbm.border.block_start +
clearance.unwrap_or_else(Length::zero).into(),
clearance.unwrap_or_else(Au::zero),
inline: pbm.padding.inline_start +
pbm.border.inline_start +
effective_margin_inline_start,
@ -1152,9 +1152,9 @@ impl NonReplacedFormattingContext {
self.style.clone(),
layout.fragments,
content_rect.into(),
pbm.padding.into(),
pbm.border.into(),
margin,
pbm.padding,
pbm.border,
margin.into(),
clearance,
block_margins_collapsed_with_children,
)
@ -1218,7 +1218,7 @@ fn layout_in_flow_replaced_block_level(
// Margins can never collapse into replaced elements.
sequential_layout_state.collapse_margins();
sequential_layout_state
.advance_block_position(size.block + clearance.unwrap_or_else(Length::zero).into());
.advance_block_position(size.block + clearance.unwrap_or_else(Au::zero));
sequential_layout_state.adjoin_assign(&CollapsedMargin::new(margin_block_end.into()));
} else {
clearance = None;
@ -1242,7 +1242,7 @@ fn layout_in_flow_replaced_block_level(
let start_corner = LogicalVec2 {
block: pbm.padding.block_start +
pbm.border.block_start +
clearance.unwrap_or_else(Length::zero).into(),
clearance.unwrap_or_else(Au::zero),
inline: pbm.padding.inline_start + pbm.border.inline_start + effective_margin_inline_start,
};
@ -1257,9 +1257,9 @@ fn layout_in_flow_replaced_block_level(
style.clone(),
fragments,
content_rect.into(),
pbm.padding.into(),
pbm.border.into(),
margin,
pbm.padding,
pbm.border,
margin.into(),
clearance,
block_margins_collapsed_with_children,
)
@ -1492,7 +1492,7 @@ fn solve_clearance_and_inline_margins_avoiding_floats(
pbm: &PaddingBorderMargin,
size: LogicalVec2<Length>,
style: &Arc<ComputedValues>,
) -> (Option<Length>, (Au, Au), Au) {
) -> (Option<Au>, (Au, Au), Au) {
let (clearance, placement_rect) = sequential_layout_state
.calculate_clearance_and_inline_adjustment(
style.get_box().clear,
@ -1507,11 +1507,7 @@ fn solve_clearance_and_inline_margins_avoiding_floats(
size.inline,
placement_rect.into(),
);
(
clearance.map(|t| t.into()),
inline_margins,
effective_margin_inline_start,
)
(clearance, inline_margins, effective_margin_inline_start)
}
/// State that we maintain when placing blocks.
@ -1590,7 +1586,7 @@ impl PlacementState {
let fragment_block_margins = &fragment.block_margins_collapsed_with_children;
let mut fragment_block_size = fragment.padding.block_sum() +
fragment.border.block_sum() +
fragment.content_rect.size.block;
fragment.content_rect.size.block.into();
// We use `last_in_flow_margin_collapses_with_parent_end_margin` to implement
// this quote from https://drafts.csswg.org/css2/#collapsing-margins
// > If the top and bottom margins of an element with clearance are adjoining,
@ -1632,12 +1628,12 @@ impl PlacementState {
if fragment_block_margins.collapsed_through {
// `fragment_block_size` is typically zero when collapsing through,
// but we still need to consider it in case there is clearance.
self.current_block_direction_position += fragment_block_size;
self.current_block_direction_position += fragment_block_size.into();
self.current_margin
.adjoin_assign(&fragment_block_margins.end);
} else {
self.current_block_direction_position +=
self.current_margin.solve() + fragment_block_size;
self.current_margin.solve() + fragment_block_size.into();
self.current_margin = fragment_block_margins.end;
}
},