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> {
|
fn index_of_first_glyph_run_containing(&self, index: ByteIndex) -> Option<usize> {
|
||||||
let self_ptr = self as *const TextRun;
|
let self_ptr = self as *const TextRun;
|
||||||
INDEX_OF_FIRST_GLYPH_RUN_CACHE.with(|index_of_first_glyph_run_cache| {
|
INDEX_OF_FIRST_GLYPH_RUN_CACHE.with(|index_of_first_glyph_run_cache| {
|
||||||
|
|
|
@ -1471,6 +1471,17 @@ impl Fragment {
|
||||||
result
|
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
|
/// TODO: What exactly does this function return? Why is it Au(0) for
|
||||||
/// `SpecificFragmentInfo::Generic`?
|
/// `SpecificFragmentInfo::Generic`?
|
||||||
|
|
|
@ -444,7 +444,7 @@ impl LineBreaker {
|
||||||
// Initially, pretend a splittable fragment has zero inline-size. We will move it later if
|
// Initially, pretend a splittable fragment has zero inline-size. We will move it later if
|
||||||
// it has nonzero inline-size and that causes problems.
|
// it has nonzero inline-size and that causes problems.
|
||||||
let placement_inline_size = if first_fragment.can_split() {
|
let placement_inline_size = if first_fragment.can_split() {
|
||||||
Au(0)
|
first_fragment.minimum_splittable_inline_size()
|
||||||
} else {
|
} else {
|
||||||
first_fragment.margin_box_inline_size() + self.indentation_for_pending_fragment()
|
first_fragment.margin_box_inline_size() + self.indentation_for_pending_fragment()
|
||||||
};
|
};
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue