diff options
Diffstat (limited to 'components/layout_2020/formatting_contexts.rs')
-rw-r--r-- | components/layout_2020/formatting_contexts.rs | 29 |
1 files changed, 15 insertions, 14 deletions
diff --git a/components/layout_2020/formatting_contexts.rs b/components/layout_2020/formatting_contexts.rs index d7477182437..eb90d62c926 100644 --- a/components/layout_2020/formatting_contexts.rs +++ b/components/layout_2020/formatting_contexts.rs @@ -29,6 +29,8 @@ pub(crate) struct IndependentFormattingContext { pub(crate) struct IndependentLayout { pub fragments: Vec<Fragment>, + + /// https://drafts.csswg.org/css2/visudet.html#root-height pub content_block_size: Length, } @@ -57,31 +59,30 @@ impl IndependentFormattingContext { contents: Contents<impl NodeExt<'dom>>, content_sizes: ContentSizesRequest, ) -> Self { - use self::IndependentFormattingContextContents as Contents; - let (contents, content_sizes) = match contents.try_into() { + match contents.try_into() { Ok(non_replaced) => match display_inside { DisplayInside::Flow | DisplayInside::FlowRoot => { - let (bfc, box_content_sizes) = BlockFormattingContext::construct( + let (bfc, content_sizes) = BlockFormattingContext::construct( context, &style, non_replaced, content_sizes, ); - (Contents::Flow(bfc), box_content_sizes) + Self { + style, + content_sizes, + contents: IndependentFormattingContextContents::Flow(bfc), + } }, }, Err(replaced) => { - // The `content_sizes` field is not used by layout code: - ( - Contents::Replaced(replaced), - BoxContentSizes::NoneWereRequested, - ) + let content_sizes = content_sizes.compute(|| replaced.inline_content_sizes(&style)); + Self { + style, + content_sizes, + contents: IndependentFormattingContextContents::Replaced(replaced), + } }, - }; - Self { - style, - contents, - content_sizes, } } |