mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-04-21 12:05:15 +00:00
LibHTML: Fix broken line splitting behavior in LayoutReplaced
Replaced elements will now properly create line breaks when they use up the available horizontal space. This fixes an issue with <img>'s lining up instead of breaking.
This commit is contained in:
parent
282456dc37
commit
44979ad7a5
Notes:
sideshowbarker
2024-07-19 11:42:09 +09:00
Author: https://github.com/awesomekling Commit: https://github.com/SerenityOS/serenity/commit/44979ad7a50
4 changed files with 23 additions and 3 deletions
|
@ -244,3 +244,16 @@ NonnullRefPtr<StyleProperties> LayoutBlock::style_for_anonymous_block() const
|
|||
|
||||
return new_style;
|
||||
}
|
||||
|
||||
LineBox& LayoutBlock::ensure_last_line_box()
|
||||
{
|
||||
if (m_line_boxes.is_empty())
|
||||
m_line_boxes.append(LineBox());
|
||||
return m_line_boxes.last();
|
||||
}
|
||||
|
||||
LineBox& LayoutBlock::add_line_box()
|
||||
{
|
||||
m_line_boxes.append(LineBox());
|
||||
return m_line_boxes.last();
|
||||
}
|
||||
|
|
|
@ -22,6 +22,9 @@ public:
|
|||
Vector<LineBox>& line_boxes() { return m_line_boxes; }
|
||||
const Vector<LineBox>& line_boxes() const { return m_line_boxes; }
|
||||
|
||||
LineBox& ensure_last_line_box();
|
||||
LineBox& add_line_box();
|
||||
|
||||
virtual HitTestResult hit_test(const Point&) const override;
|
||||
|
||||
private:
|
||||
|
|
|
@ -28,6 +28,9 @@ public:
|
|||
Rect& rect() { return m_rect; }
|
||||
void set_rect(const Rect& rect) { m_rect = rect; }
|
||||
|
||||
int width() const { return rect().width(); }
|
||||
int height() const { return rect().height(); }
|
||||
|
||||
BoxModelMetrics& box_model() { return m_box_metrics; }
|
||||
const BoxModelMetrics& box_model() const { return m_box_metrics; }
|
||||
|
||||
|
|
|
@ -17,7 +17,8 @@ void LayoutReplaced::split_into_lines(LayoutBlock& container)
|
|||
{
|
||||
layout();
|
||||
|
||||
if (container.line_boxes().is_empty())
|
||||
container.line_boxes().append(LineBox());
|
||||
container.line_boxes().last().add_fragment(*this, 0, 0, rect().width(), rect().height());
|
||||
auto* line_box = &container.ensure_last_line_box();
|
||||
if (line_box->width() + width() > container.width())
|
||||
line_box = &container.add_line_box();
|
||||
line_box->add_fragment(*this, 0, 0, width(), height());
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue