aboutsummaryrefslogtreecommitdiffstats
path: root/components/layout_2020/flow/mod.rs
diff options
context:
space:
mode:
Diffstat (limited to 'components/layout_2020/flow/mod.rs')
-rw-r--r--components/layout_2020/flow/mod.rs47
1 files changed, 47 insertions, 0 deletions
diff --git a/components/layout_2020/flow/mod.rs b/components/layout_2020/flow/mod.rs
index b8c0d7e500d..c256c6c9a23 100644
--- a/components/layout_2020/flow/mod.rs
+++ b/components/layout_2020/flow/mod.rs
@@ -18,11 +18,13 @@ use crate::fragments::{
use crate::geom::flow_relative::{Rect, Sides, Vec2};
use crate::positioned::{AbsolutelyPositionedBox, PositioningContext};
use crate::replaced::ReplacedContent;
+use crate::sizing::{self, ContentSizes};
use crate::style_ext::{ComputedValuesExt, PaddingBorderMargin};
use crate::ContainingBlock;
use rayon::iter::{IndexedParallelIterator, IntoParallelRefIterator, ParallelIterator};
use rayon_croissant::ParallelIteratorExt;
use servo_arc::Arc;
+use style::logical_geometry::WritingMode;
use style::properties::ComputedValues;
use style::values::computed::{Length, LengthOrAuto};
use style::Zero;
@@ -132,6 +134,29 @@ impl BlockContainer {
),
}
}
+
+ pub(super) fn inline_content_sizes(
+ &self,
+ layout_context: &LayoutContext,
+ containing_block_writing_mode: WritingMode,
+ ) -> ContentSizes {
+ match &self {
+ Self::BlockLevelBoxes(boxes) => {
+ let mut content_sizes = ContentSizes::zero();
+ for box_ in boxes {
+ content_sizes.max_assign(
+ &box_
+ .borrow_mut()
+ .inline_content_sizes(layout_context, containing_block_writing_mode),
+ );
+ }
+ content_sizes
+ },
+ Self::InlineFormattingContext(context) => {
+ context.inline_content_sizes(layout_context, containing_block_writing_mode)
+ },
+ }
+ }
}
fn layout_block_level_children(
@@ -350,6 +375,28 @@ impl BlockLevelBox {
},
}
}
+
+ fn inline_content_sizes(
+ &mut self,
+ layout_context: &LayoutContext,
+ containing_block_writing_mode: WritingMode,
+ ) -> ContentSizes {
+ match self {
+ Self::SameFormattingContextBlock {
+ style, contents, ..
+ } => sizing::outer_inline(style, containing_block_writing_mode, || {
+ contents.inline_content_sizes(layout_context, style.writing_mode)
+ }),
+ Self::Independent(independent) => {
+ independent.outer_inline(layout_context, containing_block_writing_mode)
+ },
+ BlockLevelBox::OutOfFlowAbsolutelyPositionedBox(_) => ContentSizes::zero(),
+ BlockLevelBox::OutOfFlowFloatBox(_box_) => {
+ // TODO: Actually implement that.
+ ContentSizes::zero()
+ },
+ }
+ }
}
enum NonReplacedContents<'a> {