diff --git a/components/layout_2020/flow/inline.rs b/components/layout_2020/flow/inline.rs index 843838ad33a77..c6cb614e68237 100644 --- a/components/layout_2020/flow/inline.rs +++ b/components/layout_2020/flow/inline.rs @@ -101,7 +101,9 @@ use crate::cell::ArcRefCell; use crate::context::LayoutContext; use crate::flow::float::{FloatBox, SequentialLayoutState}; use crate::flow::FlowLayout; -use crate::formatting_contexts::{Baselines, IndependentFormattingContext}; +use crate::formatting_contexts::{ + Baselines, IndependentFormattingContext, NonReplacedFormattingContextContents, +}; use crate::fragment_tree::{ BaseFragmentInfo, BoxFragment, CollapsedBlockMargins, CollapsedMargin, Fragment, FragmentFlags, PositioningFragment, @@ -2112,9 +2114,8 @@ impl IndependentFormattingContext { } let size = &pbm_sums.sum().into() + &fragment.content_rect.size; - let baseline_offset = fragment - .baselines - .last + let baseline_offset = self + .pick_baseline(&fragment.baselines) .map(|baseline| pbm_sums.block_start + baseline) .unwrap_or(size.block.into()); @@ -2137,6 +2138,18 @@ impl IndependentFormattingContext { ifc.have_deferred_soft_wrap_opportunity = true; } + /// Picks either the first or the last baseline, depending on `baseline-source`. + /// + fn pick_baseline(&self, baselines: &Baselines) -> Option { + // TODO: Currently this only supports the initial `baseline-source: auto`. + if let Self::NonReplaced(non_replaced) = self { + if let NonReplacedFormattingContextContents::Flow(_) = non_replaced.contents { + return baselines.last; + } + } + baselines.first + } + fn get_block_sizes_and_baseline_offset( &self, ifc: &InlineFormattingContextState,