diff --git a/Userland/Libraries/LibWeb/Layout/LineBuilder.cpp b/Userland/Libraries/LibWeb/Layout/LineBuilder.cpp index ce156711ac3..1b9eed559d7 100644 --- a/Userland/Libraries/LibWeb/Layout/LineBuilder.cpp +++ b/Userland/Libraries/LibWeb/Layout/LineBuilder.cpp @@ -46,12 +46,16 @@ void LineBuilder::append_text_chunk(TextNode& text_node, size_t offset_in_node, m_max_height_on_current_line = max(m_max_height_on_current_line, height); } -void LineBuilder::break_if_needed(LayoutMode layout_mode, float next_item_width, bool should_force_break) +bool LineBuilder::should_break(LayoutMode layout_mode, float next_item_width, bool should_force_break) { - if (layout_mode == LayoutMode::AllPossibleLineBreaks - || should_force_break - || (m_context.containing_block().line_boxes().last().width() + next_item_width) > m_available_width_for_current_line) - break_line(); + if (layout_mode == LayoutMode::AllPossibleLineBreaks) + return true; + if (should_force_break) + return true; + if (layout_mode == LayoutMode::OnlyRequiredLineBreaks) + return false; + auto current_line_width = m_context.containing_block().line_boxes().last().width(); + return (current_line_width + next_item_width) > m_available_width_for_current_line; } void LineBuilder::update_last_line() diff --git a/Userland/Libraries/LibWeb/Layout/LineBuilder.h b/Userland/Libraries/LibWeb/Layout/LineBuilder.h index f32dfa5aa54..0fd2c5d1809 100644 --- a/Userland/Libraries/LibWeb/Layout/LineBuilder.h +++ b/Userland/Libraries/LibWeb/Layout/LineBuilder.h @@ -23,13 +23,19 @@ public: void append_box(Box&); void append_text_chunk(TextNode&, size_t offset_in_node, size_t length_in_node, float width, float height); - void break_if_needed(LayoutMode, float next_item_width, bool should_force_break); + void 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)) + break_line(); + } float available_width_for_current_line() const { return m_available_width_for_current_line; } void update_last_line(); private: + bool should_break(LayoutMode, float next_item_width, bool should_force_break); + InlineFormattingContext& m_context; float m_available_width_for_current_line { 0 }; float m_current_y { 0 };