mirror of
https://github.com/SerenityOS/serenity.git
synced 2025-01-24 10:22:05 -05:00
LibWeb: Add a table row to the layout tree for buttons
We were relying on the table fixup algorithm to insert the missing table row, which fails to do so when we only have an image in the button. While that might be a problem with the table fixup algorithm, we should build a correct layout tree explicitly anyway. Fixes crashes on GitHub.
This commit is contained in:
parent
4f563e346d
commit
6175fcdaeb
3 changed files with 40 additions and 1 deletions
|
@ -0,0 +1,28 @@
|
|||
Viewport <#document> at (0,0) content-size 800x600 children: not-inline
|
||||
BlockContainer <html> at (0,0) content-size 800x600 [BFC] children: not-inline
|
||||
BlockContainer <body> at (8,8) content-size 784x419.203125 children: inline
|
||||
line 0 width: 430, height: 419.203125, bottom: 419.203125, baseline: 422
|
||||
frag 0 from BlockContainer start: 0, length: 0, rect: [13,10 420x415.203125]
|
||||
BlockContainer <button> at (13,10) content-size 420x415.203125 inline-block [BFC] children: inline
|
||||
line 0 width: 420, height: 415.203125, bottom: 415.203125, baseline: 420
|
||||
frag 0 from TableWrapper start: 0, length: 0, rect: [13,10 420x420]
|
||||
TableWrapper <(anonymous)> at (13,10) content-size 420x420 [BFC] children: not-inline
|
||||
BlockContainer <(anonymous)> at (13,10) content-size 420x420 table-box [TFC] children: not-inline
|
||||
Box <(anonymous)> at (13,10) content-size 420x420 table-row children: not-inline
|
||||
BlockContainer <(anonymous)> at (13,10) content-size 420x420 table-cell [BFC] children: inline
|
||||
line 0 width: 420, height: 420, bottom: 420, baseline: 420
|
||||
frag 0 from ImageBox start: 0, length: 0, rect: [13,10 420x420]
|
||||
TextNode <#text>
|
||||
ImageBox <img> at (13,10) content-size 420x420 children: not-inline
|
||||
TextNode <#text>
|
||||
TextNode <#text>
|
||||
|
||||
ViewportPaintable (Viewport<#document>) [0,0 800x600]
|
||||
PaintableWithLines (BlockContainer<HTML>) [0,0 800x600]
|
||||
PaintableWithLines (BlockContainer<BODY>) [8,8 784x419.203125]
|
||||
PaintableWithLines (BlockContainer<BUTTON>) [8,8 430x419.203125] overflow: [9,9 428x421]
|
||||
PaintableWithLines (TableWrapper(anonymous)) [13,10 420x420]
|
||||
PaintableWithLines (BlockContainer(anonymous)) [13,10 420x420]
|
||||
PaintableBox (Box(anonymous)) [13,10 420x420]
|
||||
PaintableWithLines (BlockContainer(anonymous)) [13,10 420x420]
|
||||
ImagePaintable (ImageBox<IMG>) [13,10 420x420]
|
|
@ -0,0 +1,5 @@
|
|||
<button>
|
||||
<img
|
||||
src="data:image/jpeg;base64,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">
|
||||
<!-- gigi -->
|
||||
</button>
|
|
@ -389,12 +389,17 @@ ErrorOr<void> TreeBuilder::create_layout_tree(DOM::Node& dom_node, TreeBuilder::
|
|||
static_cast<CSS::MutableComputedValues&>(cell_computed_values).set_display(CSS::Display { CSS::Display::Internal::TableCell });
|
||||
static_cast<CSS::MutableComputedValues&>(cell_computed_values).set_vertical_align(CSS::VerticalAlign::Middle);
|
||||
|
||||
auto row_computed_values = parent.computed_values().clone_inherited_values();
|
||||
static_cast<CSS::MutableComputedValues&>(row_computed_values).set_display(CSS::Display { CSS::Display::Internal::TableRow });
|
||||
|
||||
auto table_wrapper = parent.heap().template allocate_without_realm<BlockContainer>(parent.document(), nullptr, move(table_computed_values));
|
||||
auto cell_wrapper = parent.heap().template allocate_without_realm<BlockContainer>(parent.document(), nullptr, move(cell_computed_values));
|
||||
auto row_wrapper = parent.heap().template allocate_without_realm<Box>(parent.document(), nullptr, move(row_computed_values));
|
||||
|
||||
cell_wrapper->set_line_height(parent.line_height());
|
||||
cell_wrapper->set_font(parent.font());
|
||||
cell_wrapper->set_children_are_inline(parent.children_are_inline());
|
||||
row_wrapper->set_children_are_inline(false);
|
||||
|
||||
Vector<JS::Handle<Node>> sequence;
|
||||
for (auto child = parent.first_child(); child; child = child->next_sibling()) {
|
||||
|
@ -406,7 +411,8 @@ ErrorOr<void> TreeBuilder::create_layout_tree(DOM::Node& dom_node, TreeBuilder::
|
|||
cell_wrapper->append_child(*node);
|
||||
}
|
||||
|
||||
table_wrapper->append_child(*cell_wrapper);
|
||||
row_wrapper->append_child(*cell_wrapper);
|
||||
table_wrapper->append_child(*row_wrapper);
|
||||
parent.append_child(*table_wrapper);
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue