aboutsummaryrefslogtreecommitdiffstats
path: root/components/layout/text.rs
diff options
context:
space:
mode:
authorbors-servo <metajack+bors@gmail.com>2015-04-24 15:17:07 -0500
committerbors-servo <metajack+bors@gmail.com>2015-04-24 15:17:07 -0500
commit211ee668fae7f619ac7e09abd776a6f45fc40052 (patch)
tree5bd785603002608195497921477a8fa44d8e4ee5 /components/layout/text.rs
parent3d6d102fd13cce7b81fa6df0ca83449a225f9241 (diff)
parent8741d9e8c4bf57ee8d474c6f78266d75d917bb37 (diff)
downloadservo-211ee668fae7f619ac7e09abd776a6f45fc40052.tar.gz
servo-211ee668fae7f619ac7e09abd776a6f45fc40052.zip
Auto merge of #5816 - pcwalton:more-jumpiness, r=mbrubeck
Fixes the "jumpiness" seen on the Google home page, Wikipedia, and many other places. r? @mbrubeck <!-- Reviewable:start --> [<img src="https://reviewable.io/review_button.png" height=40 alt="Review on Reviewable"/>](https://reviewable.io/reviews/servo/servo/5816) <!-- Reviewable:end -->
Diffstat (limited to 'components/layout/text.rs')
-rw-r--r--components/layout/text.rs17
1 files changed, 13 insertions, 4 deletions
diff --git a/components/layout/text.rs b/components/layout/text.rs
index bf0168f9a1c..4bfbcb66ca8 100644
--- a/components/layout/text.rs
+++ b/components/layout/text.rs
@@ -26,7 +26,7 @@ use style::properties::style_structs::Font as FontStyle;
use util::geometry::Au;
use util::linked_list::split_off_head;
use util::logical_geometry::{LogicalSize, WritingMode};
-use util::range::Range;
+use util::range::{Range, RangeIndex};
use util::smallvec::{SmallVec, SmallVec1};
/// A stack-allocated object for scanning an inline flow into `TextRun`-containing `TextFragment`s.
@@ -193,16 +193,25 @@ impl TextRunScanner {
debug!("TextRunScanner: pushing {} fragment(s)", self.clump.len());
for (logical_offset, old_fragment) in
mem::replace(&mut self.clump, LinkedList::new()).into_iter().enumerate() {
- let range = *new_ranges.get(logical_offset);
+ let mut range = *new_ranges.get(logical_offset);
if range.is_empty() {
debug!("Elided an `SpecificFragmentInfo::UnscannedText` because it was \
zero-length after compression");
continue
}
+ let requires_line_break_afterward_if_wrapping_on_newlines =
+ run.text.char_at_reverse(range.end().get() as usize) == '\n';
+ if requires_line_break_afterward_if_wrapping_on_newlines {
+ range.extend_by(CharIndex(-1))
+ }
+
let text_size = old_fragment.border_box.size;
- let mut new_text_fragment_info =
- box ScannedTextFragmentInfo::new(run.clone(), range, text_size);
+ let mut new_text_fragment_info = box ScannedTextFragmentInfo::new(
+ run.clone(),
+ range,
+ text_size,
+ requires_line_break_afterward_if_wrapping_on_newlines);
let new_metrics = new_text_fragment_info.run.metrics_for_range(&range);
let bounding_box_size = bounding_box_for_run_metrics(&new_metrics,
old_fragment.style.writing_mode);