mirror of
https://github.com/servo/servo.git
synced 2025-08-03 20:50:07 +01:00
layout: Don't pretend inline fragment sizes are zero when placing them
between floats.
This commit is contained in:
parent
94306cd183
commit
8823f87276
3 changed files with 20 additions and 2 deletions
|
@ -272,7 +272,14 @@ impl<'a> TextRun {
|
|||
})
|
||||
}
|
||||
|
||||
/// Returns the index of the first glyph run containing the given byte index.
|
||||
pub fn minimum_splittable_inline_size(&self, range: &Range<ByteIndex>) -> Au {
|
||||
match self.natural_word_slices_in_range(range).next() {
|
||||
None => Au(0),
|
||||
Some(slice) => self.advance_for_range(&slice.range),
|
||||
}
|
||||
}
|
||||
|
||||
/// Returns the index of the first glyph run containing the given character index.
|
||||
fn index_of_first_glyph_run_containing(&self, index: ByteIndex) -> Option<usize> {
|
||||
let self_ptr = self as *const TextRun;
|
||||
INDEX_OF_FIRST_GLYPH_RUN_CACHE.with(|index_of_first_glyph_run_cache| {
|
||||
|
|
|
@ -1471,6 +1471,17 @@ impl Fragment {
|
|||
result
|
||||
}
|
||||
|
||||
/// Returns the narrowest inline-size that the first splittable part of this fragment could
|
||||
/// possibly be split to. (In most cases, this returns the inline-size of the first word in
|
||||
/// this fragment.)
|
||||
pub fn minimum_splittable_inline_size(&self) -> Au {
|
||||
match self.specific {
|
||||
SpecificFragmentInfo::ScannedText(ref text) => {
|
||||
text.run.minimum_splittable_inline_size(&text.range)
|
||||
}
|
||||
_ => Au(0),
|
||||
}
|
||||
}
|
||||
|
||||
/// TODO: What exactly does this function return? Why is it Au(0) for
|
||||
/// `SpecificFragmentInfo::Generic`?
|
||||
|
|
|
@ -444,7 +444,7 @@ impl LineBreaker {
|
|||
// Initially, pretend a splittable fragment has zero inline-size. We will move it later if
|
||||
// it has nonzero inline-size and that causes problems.
|
||||
let placement_inline_size = if first_fragment.can_split() {
|
||||
Au(0)
|
||||
first_fragment.minimum_splittable_inline_size()
|
||||
} else {
|
||||
first_fragment.margin_box_inline_size() + self.indentation_for_pending_fragment()
|
||||
};
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue