mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 18: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
|
@ -1,5 +1,6 @@
|
|||
#include <LibHTML/DOM/ElementFactory.h>
|
||||
#include <LibHTML/DOM/HTMLAnchorElement.h>
|
||||
#include <LibHTML/DOM/HTMLBRElement.h>
|
||||
#include <LibHTML/DOM/HTMLBlinkElement.h>
|
||||
#include <LibHTML/DOM/HTMLBodyElement.h>
|
||||
#include <LibHTML/DOM/HTMLFontElement.h>
|
||||
|
@ -37,6 +38,8 @@ NonnullRefPtr<Element> create_element(Document& document, const String& tag_name
|
|||
return adopt(*new HTMLImageElement(document, lowercase_tag_name));
|
||||
if (lowercase_tag_name == "blink")
|
||||
return adopt(*new HTMLBlinkElement(document, lowercase_tag_name));
|
||||
if (lowercase_tag_name == "br")
|
||||
return adopt(*new HTMLBRElement(document, lowercase_tag_name));
|
||||
if (lowercase_tag_name == "h1"
|
||||
|| lowercase_tag_name == "h2"
|
||||
|| lowercase_tag_name == "h3"
|
||||
|
|
16
Libraries/LibHTML/DOM/HTMLBRElement.cpp
Normal file
16
Libraries/LibHTML/DOM/HTMLBRElement.cpp
Normal file
|
@ -0,0 +1,16 @@
|
|||
#include <LibHTML/DOM/HTMLBRElement.h>
|
||||
#include <LibHTML/Layout/LayoutBreak.h>
|
||||
|
||||
HTMLBRElement::HTMLBRElement(Document& document, const String& tag_name)
|
||||
: HTMLElement(document, tag_name)
|
||||
{
|
||||
}
|
||||
|
||||
HTMLBRElement::~HTMLBRElement()
|
||||
{
|
||||
}
|
||||
|
||||
RefPtr<LayoutNode> HTMLBRElement::create_layout_node(const StyleResolver&, const StyleProperties*) const
|
||||
{
|
||||
return adopt(*new LayoutBreak(*this));
|
||||
}
|
17
Libraries/LibHTML/DOM/HTMLBRElement.h
Normal file
17
Libraries/LibHTML/DOM/HTMLBRElement.h
Normal file
|
@ -0,0 +1,17 @@
|
|||
#pragma once
|
||||
|
||||
#include <LibHTML/DOM/HTMLElement.h>
|
||||
|
||||
class HTMLBRElement final : public HTMLElement {
|
||||
public:
|
||||
HTMLBRElement(Document&, const String& tag_name);
|
||||
virtual ~HTMLBRElement() override;
|
||||
|
||||
virtual RefPtr<LayoutNode> create_layout_node(const StyleResolver&, const StyleProperties* parent_style) const override;
|
||||
};
|
||||
|
||||
template<>
|
||||
inline bool is<HTMLBRElement>(const Node& node)
|
||||
{
|
||||
return is<Element>(node) && to<Element>(node).tag_name().to_lowercase() == "br";
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue