Bladeren bron

LibWeb: Don't attempt to layout the inside of childless boxes

Some boxes cannot have children (most commonly replaced elements),
and so there is nothing meaningful inside them to layout.

We now use the can_have_children() flag to quickly skip over such boxes
instead of creating a formatting context and other pointless busywork.
Andreas Kling 3 jaren geleden
bovenliggende
commit
dfeb4550d5
1 gewijzigde bestanden met toevoegingen van 3 en 0 verwijderingen
  1. 3 0
      Userland/Libraries/LibWeb/Layout/FormattingContext.cpp

+ 3 - 0
Userland/Libraries/LibWeb/Layout/FormattingContext.cpp

@@ -76,6 +76,9 @@ bool FormattingContext::creates_block_formatting_context(const Box& box)
 
 
 void FormattingContext::layout_inside(Box& child_box, LayoutMode layout_mode)
 void FormattingContext::layout_inside(Box& child_box, LayoutMode layout_mode)
 {
 {
+    if (!child_box.can_have_children())
+        return;
+
     if (is<SVGSVGBox>(child_box)) {
     if (is<SVGSVGBox>(child_box)) {
         SVGFormattingContext context(child_box, this);
         SVGFormattingContext context(child_box, this);
         context.run(child_box, layout_mode);
         context.run(child_box, layout_mode);