1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 20:57:35 +00:00

LibWeb: Don't append collapsible whitespace to start of new line

After performing a required line break, and the next text chunk is
all collapsible whitespace, simply discard the whitespace.
This commit is contained in:
Andreas Kling 2022-03-26 18:50:43 +01:00
parent de53eb825a
commit d32630e17b
2 changed files with 10 additions and 3 deletions

View file

@ -257,7 +257,10 @@ void InlineFormattingContext::generate_line_boxes(LayoutMode layout_mode)
case InlineLevelIterator::Item::Type::Text: {
auto& text_node = verify_cast<Layout::TextNode>(*item.node);
line_builder.break_if_needed(layout_mode, item.border_box_width(), item.should_force_break);
if (line_builder.break_if_needed(layout_mode, item.border_box_width(), item.should_force_break)) {
if (item.is_collapsible_whitespace)
break;
}
line_builder.append_text_chunk(
text_node,
item.offset_in_node,

View file

@ -22,10 +22,14 @@ public:
void append_box(Box const&, float leading_size, float trailing_size, float leading_margin, float trailing_margin);
void append_text_chunk(TextNode const&, size_t offset_in_node, size_t length_in_node, float leading_size, float trailing_size, float leading_margin, float trailing_margin, float content_width, float content_height);
void break_if_needed(LayoutMode layout_mode, float next_item_width, bool should_force_break)
// Returns whether a line break occurred.
bool break_if_needed(LayoutMode layout_mode, float next_item_width, bool should_force_break)
{
if (should_break(layout_mode, next_item_width, should_force_break))
if (should_break(layout_mode, next_item_width, should_force_break)) {
break_line();
return true;
}
return false;
}
float available_width_for_current_line() const { return m_available_width_for_current_line; }