aboutsummaryrefslogtreecommitdiffstats
path: root/components/layout_2020/formatting_contexts.rs
diff options
context:
space:
mode:
Diffstat (limited to 'components/layout_2020/formatting_contexts.rs')
-rw-r--r--components/layout_2020/formatting_contexts.rs29
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,
}
}