aboutsummaryrefslogtreecommitdiffstats
path: root/components/layout_2020/flow/inline.rs
diff options
context:
space:
mode:
Diffstat (limited to 'components/layout_2020/flow/inline.rs')
-rw-r--r--components/layout_2020/flow/inline.rs21
1 files changed, 17 insertions, 4 deletions
diff --git a/components/layout_2020/flow/inline.rs b/components/layout_2020/flow/inline.rs
index 7f31faf1e26..1ef642a4405 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,
@@ -2114,9 +2116,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());
@@ -2139,6 +2140,18 @@ impl IndependentFormattingContext {
ifc.have_deferred_soft_wrap_opportunity = true;
}
+ /// Picks either the first or the last baseline, depending on `baseline-source`.
+ /// <https://drafts.csswg.org/css-inline/#baseline-source>
+ fn pick_baseline(&self, baselines: &Baselines) -> Option<Au> {
+ // 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,