From fc97f0b4640c0aa8ae7368a02ba5ce2b455261e7 Mon Sep 17 00:00:00 2001 From: Manish Goregaokar Date: Wed, 24 Jan 2018 14:31:07 +0530 Subject: [PATCH] do not preserve suppress flag on second half of split --- components/layout/fragment.rs | 13 ++++++++++--- components/layout/inline.rs | 4 ++-- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/components/layout/fragment.rs b/components/layout/fragment.rs index d11ed64a4bed..4de15fdbb32e 100644 --- a/components/layout/fragment.rs +++ b/components/layout/fragment.rs @@ -717,13 +717,15 @@ impl Fragment { } /// Transforms this fragment using the given `SplitInfo`, preserving all the other data. - pub fn transform_with_split_info(&self, split: &SplitInfo, text_run: Arc) - -> Fragment { + /// + /// If this is the first half of a split, `first` is true + pub fn transform_with_split_info(&self, split: &SplitInfo, text_run: Arc, + first: bool) -> Fragment { let size = LogicalSize::new(self.style.writing_mode, split.inline_size, self.border_box.size.block); // Preserve the insertion point if it is in this fragment's range or it is at line end. - let (flags, insertion_point) = match self.specific { + let (mut flags, insertion_point) = match self.specific { SpecificFragmentInfo::ScannedText(ref info) => { match info.insertion_point { Some(index) if split.range.contains(index) => (info.flags, info.insertion_point), @@ -734,6 +736,11 @@ impl Fragment { }, _ => (ScannedTextFlags::empty(), None) }; + + if !first { + flags.set(ScannedTextFlags::SUPPRESS_LINE_BREAK_BEFORE, false); + } + let info = Box::new(ScannedTextFragmentInfo::new( text_run, split.range, diff --git a/components/layout/inline.rs b/components/layout/inline.rs index c5be5b333903..2c9c37d204ef 100644 --- a/components/layout/inline.rs +++ b/components/layout/inline.rs @@ -670,10 +670,10 @@ impl LineBreaker { }; inline_start_fragment = split_result.inline_start.as_ref().map(|x| { - fragment.transform_with_split_info(x, split_result.text_run.clone()) + fragment.transform_with_split_info(x, split_result.text_run.clone(), true) }); inline_end_fragment = split_result.inline_end.as_ref().map(|x| { - fragment.transform_with_split_info(x, split_result.text_run.clone()) + fragment.transform_with_split_info(x, split_result.text_run.clone(), false) }); // Push the first fragment onto the line we're working on and start off the next line with