mirror of
https://github.com/servo/servo.git
synced 2025-08-03 04:30:10 +01:00
layout: Initial implementation of flex-direction: column
and column-reverse
(#33031)
This change removes restrictions on using the column layout mode of flexbox and adds an initial implementation of sizing for that flex direction. There's a lot of missing pieces still, but in some cases this does render column flexbox. In particular, there are now two code paths for preferred widths (intrinsic size) calcuation: one in the main axis (row) and one in the cross axis (column) corresponding to the flex direciton with horizontal writing modes. In addition, `FlexItemBox::inline_content_sizes` is removed in favor of making `sizing::outer_inline` / `IndependentFormattingContext::outer_inline_content_sizes` generic enough to handle using a different value for auto minimum sizes, which flexbox needs. Signed-off-by: Martin Robinson <mrobinson@igalia.com> Co-authored-by: Oriol Brufau <obrufau@igalia.com>
This commit is contained in:
parent
c059bab6f4
commit
7633bdccd2
124 changed files with 541 additions and 605 deletions
|
@ -366,7 +366,7 @@ fn calculate_inline_content_size_for_block_level_boxes(
|
|||
BlockLevelBox::OutOfFlowFloatBox(ref mut float_box) => {
|
||||
let size = float_box
|
||||
.contents
|
||||
.outer_inline_content_sizes(layout_context, writing_mode)
|
||||
.outer_inline_content_sizes(layout_context, writing_mode, Au::zero)
|
||||
.max(ContentSizes::zero());
|
||||
let style_box = &float_box.contents.style().get_box();
|
||||
Some((size, style_box.float, style_box.clear))
|
||||
|
@ -374,9 +374,12 @@ fn calculate_inline_content_size_for_block_level_boxes(
|
|||
BlockLevelBox::SameFormattingContextBlock {
|
||||
style, contents, ..
|
||||
} => {
|
||||
let size = sizing::outer_inline(style, writing_mode, || {
|
||||
contents.inline_content_sizes(layout_context, style.writing_mode)
|
||||
})
|
||||
let size = sizing::outer_inline(
|
||||
style,
|
||||
writing_mode,
|
||||
|| contents.inline_content_sizes(layout_context, style.writing_mode),
|
||||
Au::zero,
|
||||
)
|
||||
.max(ContentSizes::zero());
|
||||
// A block in the same BFC can overlap floats, it's not moved next to them,
|
||||
// so we shouldn't add its size to the size of the floats.
|
||||
|
@ -385,7 +388,7 @@ fn calculate_inline_content_size_for_block_level_boxes(
|
|||
},
|
||||
BlockLevelBox::Independent(ref mut independent) => {
|
||||
let size = independent
|
||||
.outer_inline_content_sizes(layout_context, writing_mode)
|
||||
.outer_inline_content_sizes(layout_context, writing_mode, Au::zero)
|
||||
.max(ContentSizes::zero());
|
||||
Some((size, Float::None, independent.style().get_box().clear))
|
||||
},
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue