瀏覽代碼

LibWeb: Layout inside of flex items at the end of FFC layout

Instead of doing internal child layout incrementally as we go, save it
for the end of flex layout. The code will become simpler if we can focus
on simply computing the dimensions of each flex item while we're doing
the main FFC algorithm.
Andreas Kling 3 年之前
父節點
當前提交
88302b0dca
共有 1 個文件被更改,包括 12 次插入0 次删除
  1. 12 0
      Userland/Libraries/LibWeb/Layout/FlexFormattingContext.cpp

+ 12 - 0
Userland/Libraries/LibWeb/Layout/FlexFormattingContext.cpp

@@ -148,6 +148,18 @@ void FlexFormattingContext::run(Box const& run_box, LayoutMode)
 
     // 16. Align all flex lines (per align-content)
     align_all_flex_lines();
+
+    // AD-HOC: Layout the inside of all flex items.
+    for (auto& flex_item : m_flex_items) {
+        auto independent_formatting_context = layout_inside(flex_item.box, LayoutMode::Default);
+        independent_formatting_context->parent_context_did_dimension_child_root_box();
+    }
+
+    // FIXME: We run the "align all flex lines" step *again* here, in order to override any sizes
+    //        assigned to the flex item by the "layout inside" step above. This is definitely not
+    //        part of the spec, and simply covering up the fact that our inside layout currently
+    //        mutates the height of BFC roots.
+    align_all_flex_lines();
 }
 
 void FlexFormattingContext::populate_specified_margins(FlexItem& item, CSS::FlexDirection flex_direction) const