mirror of
https://github.com/servo/servo.git
synced 2025-08-04 13:10:20 +01:00
Pick the first or last baseline as appropriate (#31705)
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.
This commit is contained in:
parent
a53632c0e5
commit
e77dc36842
4 changed files with 61 additions and 4 deletions
|
@ -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,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue