LibWeb: Fix off-by-one when computing available space between floats

Whoops, this explains why things were not lining up correctly. :^)
This commit is contained in:
Andreas Kling 2020-12-05 22:49:13 +01:00
parent 2e5e4be212
commit 2f38d94c70
Notes: sideshowbarker 2024-07-19 01:02:54 +09:00
3 changed files with 6 additions and 6 deletions

View file

@ -113,7 +113,7 @@ void BlockBox::split_into_lines(InlineFormattingContext& context, LayoutMode lay
auto& container = context.context_box();
auto* line_box = &container.ensure_last_line_box();
float available_width = context.available_width_at_line(container.line_boxes().size());
float available_width = context.available_width_at_line(container.line_boxes().size() - 1);
if (layout_mode != LayoutMode::OnlyRequiredLineBreaks && line_box->width() > 0 && line_box->width() + width() > available_width) {
line_box = &container.add_line_box();

View file

@ -129,7 +129,7 @@ void ReplacedBox::split_into_lines(InlineFormattingContext& context, LayoutMode)
auto height = calculate_height();
auto* line_box = &containing_block.ensure_last_line_box();
if (line_box->width() > 0 && line_box->width() + width > context.available_width_at_line(containing_block.line_boxes().size()))
if (line_box->width() > 0 && line_box->width() + width > context.available_width_at_line(containing_block.line_boxes().size() - 1))
line_box = &containing_block.add_line_box();
line_box->add_fragment(*this, 0, 0, width, height);
}

View file

@ -198,7 +198,7 @@ void TextNode::split_into_lines_by_rules(InlineFormattingContext& context, Layou
auto& line_boxes = containing_block.line_boxes();
containing_block.ensure_last_line_box();
float available_width = context.available_width_at_line(line_boxes.size()) - line_boxes.last().width();
float available_width = context.available_width_at_line(line_boxes.size() - 1) - line_boxes.last().width();
// Collapse whitespace into single spaces
if (do_collapse) {
@ -264,7 +264,7 @@ void TextNode::split_into_lines_by_rules(InlineFormattingContext& context, Layou
if (line_boxes.last().width() > 0 && chunk_width > available_width) {
containing_block.add_line_box();
available_width = context.available_width_at_line(line_boxes.size());
available_width = context.available_width_at_line(line_boxes.size() - 1);
}
if (need_collapse & line_boxes.last().fragments().is_empty())
continue;
@ -278,14 +278,14 @@ void TextNode::split_into_lines_by_rules(InlineFormattingContext& context, Layou
if (do_wrap_lines) {
if (available_width < 0) {
containing_block.add_line_box();
available_width = context.available_width_at_line(line_boxes.size());
available_width = context.available_width_at_line(line_boxes.size() - 1);
}
}
if (do_wrap_breaks) {
if (chunk.is_break) {
containing_block.add_line_box();
available_width = context.available_width_at_line(line_boxes.size());
available_width = context.available_width_at_line(line_boxes.size() - 1);
}
}
}