diff options
author | Andreas Kling <awesomekling@gmail.com> | 2019-10-03 15:55:18 +0200 |
---|---|---|
committer | Andreas Kling <awesomekling@gmail.com> | 2019-10-03 15:55:18 +0200 |
commit | 4a88caf8e723db0a6f28f4129ebfb2470687f234 (patch) | |
tree | 965843fe076b34216aa5337ee84f69f86f648958 | |
parent | 279e1dbfc5920103048fd4021c54906707251c21 (diff) | |
download | serenity-4a88caf8e723db0a6f28f4129ebfb2470687f234.zip |
LibHTML: Don't add whitespace line box fragments at start of line
Collapse whitespace at the start of a line so we don't end up with
" foo bar" :^)
-rw-r--r-- | Libraries/LibHTML/Layout/LayoutText.cpp | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/Libraries/LibHTML/Layout/LayoutText.cpp b/Libraries/LibHTML/Layout/LayoutText.cpp index a4739380b9..8850df4891 100644 --- a/Libraries/LibHTML/Layout/LayoutText.cpp +++ b/Libraries/LibHTML/Layout/LayoutText.cpp @@ -198,13 +198,16 @@ void LayoutText::split_into_lines(LayoutBlock& container) for_each_word([&](const Utf8View& view, int start, int length) { words.append({ Utf8View(view), start, length }); + }); for (int i = 0; i < words.size(); ++i) { auto& word = words[i]; int word_width; - if (isspace(*word.view.begin())) + bool is_whitespace = isspace(*word.view.begin()); + + if (is_whitespace) word_width = space_width; else word_width = m_font->width(word.view); @@ -214,7 +217,15 @@ void LayoutText::split_into_lines(LayoutBlock& container) available_width = container.rect().width(); } + if (is_whitespace && line_boxes.last().fragments().is_empty()) + continue; + line_boxes.last().add_fragment(*this, word.start, word.length, word_width, line_height); available_width -= word_width; + + if (available_width < 0) { + line_boxes.append(LineBox()); + available_width = container.rect().width(); + } } } |