mirror of
https://github.com/RGBCube/serenity
synced 2025-05-16 14:54:59 +00:00
LibWeb: Correctly determine whether a block has only inline children
There's more to life than inline-vs-block, so we have to take all the non-block non-inline display types into account when computing whether a block should say children_are_inline() == true.
This commit is contained in:
parent
5818ef2c80
commit
e5ec05bd3a
1 changed files with 5 additions and 9 deletions
|
@ -48,7 +48,7 @@ static RefPtr<LayoutNode> create_layout_tree(Node& node, const StyleProperties*
|
||||||
|
|
||||||
NonnullRefPtrVector<LayoutNode> layout_children;
|
NonnullRefPtrVector<LayoutNode> layout_children;
|
||||||
bool have_inline_children = false;
|
bool have_inline_children = false;
|
||||||
bool have_block_children = false;
|
bool have_noninline_children = false;
|
||||||
|
|
||||||
to<ParentNode>(node).for_each_child([&](Node& child) {
|
to<ParentNode>(node).for_each_child([&](Node& child) {
|
||||||
auto layout_child = create_layout_tree(child, &layout_node->style());
|
auto layout_child = create_layout_tree(child, &layout_node->style());
|
||||||
|
@ -56,13 +56,13 @@ static RefPtr<LayoutNode> create_layout_tree(Node& node, const StyleProperties*
|
||||||
return;
|
return;
|
||||||
if (layout_child->is_inline())
|
if (layout_child->is_inline())
|
||||||
have_inline_children = true;
|
have_inline_children = true;
|
||||||
if (layout_child->is_block())
|
else
|
||||||
have_block_children = true;
|
have_noninline_children = true;
|
||||||
layout_children.append(layout_child.release_nonnull());
|
layout_children.append(layout_child.release_nonnull());
|
||||||
});
|
});
|
||||||
|
|
||||||
for (auto& layout_child : layout_children) {
|
for (auto& layout_child : layout_children) {
|
||||||
if (have_block_children && have_inline_children && layout_child.is_inline()) {
|
if (have_noninline_children && have_inline_children && layout_child.is_inline()) {
|
||||||
if (is<LayoutText>(layout_child) && to<LayoutText>(layout_child).text_for_style(*parent_style) == " ")
|
if (is<LayoutText>(layout_child) && to<LayoutText>(layout_child).text_for_style(*parent_style) == " ")
|
||||||
continue;
|
continue;
|
||||||
layout_node->inline_wrapper().append_child(layout_child);
|
layout_node->inline_wrapper().append_child(layout_child);
|
||||||
|
@ -71,13 +71,9 @@ static RefPtr<LayoutNode> create_layout_tree(Node& node, const StyleProperties*
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (have_inline_children && !have_block_children)
|
if (have_inline_children && !have_noninline_children)
|
||||||
layout_node->set_children_are_inline(true);
|
layout_node->set_children_are_inline(true);
|
||||||
|
|
||||||
// FIXME: This is really hackish. Some layout nodes don't care about inline children.
|
|
||||||
if (is<LayoutTable>(layout_node))
|
|
||||||
layout_node->set_children_are_inline(false);
|
|
||||||
|
|
||||||
return layout_node;
|
return layout_node;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue