Skip to content

Commit

Permalink
Pick the first or last baseline as appropriate
Browse files Browse the repository at this point in the history
The old logic was always picking the last baseline, but this should only
happen for inline-blocks.

Since replaced elements and flex containers aren't currently setting
their baselines, this is only an improvement for inline-tables.
  • Loading branch information
Loirooriol committed Mar 15, 2024
1 parent ef44080 commit 06f631f
Showing 1 changed file with 17 additions and 4 deletions.
21 changes: 17 additions & 4 deletions components/layout_2020/flow/inline.rs
Expand Up @@ -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,
Expand Down Expand Up @@ -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());

Expand All @@ -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`.
/// <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,
Expand Down

0 comments on commit 06f631f

Please sign in to comment.