summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Kling <awesomekling@gmail.com>2019-10-03 15:55:18 +0200
committerAndreas Kling <awesomekling@gmail.com>2019-10-03 15:55:18 +0200
commit4a88caf8e723db0a6f28f4129ebfb2470687f234 (patch)
tree965843fe076b34216aa5337ee84f69f86f648958
parent279e1dbfc5920103048fd4021c54906707251c21 (diff)
downloadserenity-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.cpp13
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();
+ }
}
}