mirror of
https://github.com/RGBCube/serenity
synced 2025-07-26 01:47:34 +00:00
LibHTML: Implement the <br> element for line breaking
The <br> element will produce a special LayoutBreak node in the layout tree, which forces a break in the line layout whenever encountered. This patch also makes LayoutBlock use the current line-height as the minimum effective height for each line box. This ensures that having multiple <br> elements in a row doesn't create 0-height line boxes.
This commit is contained in:
parent
bf79b198f6
commit
6242459c0f
9 changed files with 89 additions and 1 deletions
|
@ -54,10 +54,12 @@ void LayoutBlock::layout_inline_children()
|
|||
child.split_into_lines(*this);
|
||||
});
|
||||
|
||||
int min_line_height = style().line_height();
|
||||
|
||||
int content_height = 0;
|
||||
|
||||
for (auto& line_box : m_line_boxes) {
|
||||
int max_height = 0;
|
||||
int max_height = min_line_height;
|
||||
for (auto& fragment : line_box.fragments()) {
|
||||
max_height = max(max_height, fragment.rect().height());
|
||||
}
|
||||
|
|
17
Libraries/LibHTML/Layout/LayoutBreak.cpp
Normal file
17
Libraries/LibHTML/Layout/LayoutBreak.cpp
Normal file
|
@ -0,0 +1,17 @@
|
|||
#include <LibHTML/Layout/LayoutBlock.h>
|
||||
#include <LibHTML/Layout/LayoutBreak.h>
|
||||
|
||||
LayoutBreak::LayoutBreak(const HTMLBRElement& element)
|
||||
: LayoutNode(&element)
|
||||
{
|
||||
set_inline(true);
|
||||
}
|
||||
|
||||
LayoutBreak::~LayoutBreak()
|
||||
{
|
||||
}
|
||||
|
||||
void LayoutBreak::split_into_lines(LayoutBlock& block)
|
||||
{
|
||||
block.line_boxes().append(LineBox());
|
||||
}
|
16
Libraries/LibHTML/Layout/LayoutBreak.h
Normal file
16
Libraries/LibHTML/Layout/LayoutBreak.h
Normal file
|
@ -0,0 +1,16 @@
|
|||
#pragma once
|
||||
|
||||
#include <LibHTML/DOM/HTMLBRElement.h>
|
||||
#include <LibHTML/Layout/LayoutNode.h>
|
||||
|
||||
class LayoutBreak final : public LayoutNode {
|
||||
public:
|
||||
explicit LayoutBreak(const HTMLBRElement&);
|
||||
virtual ~LayoutBreak() override;
|
||||
|
||||
const HTMLBRElement& node() const { return to<HTMLBRElement>(*LayoutNode::node()); }
|
||||
|
||||
private:
|
||||
virtual const char* class_name() const override { return "LayoutBreak"; }
|
||||
virtual void split_into_lines(LayoutBlock&) override;
|
||||
};
|
Loading…
Add table
Add a link
Reference in a new issue