瀏覽代碼

LibWeb: First cut of extremely naive table row layout

This first version simply auto-sizes all table cells and then places
them on a horizontal line.
Andreas Kling 5 年之前
父節點
當前提交
196a3986d6
共有 2 個文件被更改,包括 12 次插入2 次删除
  1. 11 2
      Libraries/LibWeb/Layout/LayoutTableRow.cpp
  2. 1 0
      Libraries/LibWeb/Layout/LayoutTableRowGroup.cpp

+ 11 - 2
Libraries/LibWeb/Layout/LayoutTableRow.cpp

@@ -39,9 +39,18 @@ LayoutTableRow::~LayoutTableRow()
 {
 {
 }
 }
 
 
-void LayoutTableRow::layout(LayoutMode layout_mode)
+void LayoutTableRow::layout(LayoutMode)
 {
 {
-    LayoutBox::layout(layout_mode);
+    float tallest_cell_height = 0;
+    float content_width = 0;
+    for_each_child_of_type<LayoutTableCell>([&](auto& cell) {
+        cell.layout(LayoutMode::OnlyRequiredLineBreaks);
+        cell.set_offset(effective_offset().translated(content_width, 0));
+        content_width += cell.width();
+        tallest_cell_height = max(tallest_cell_height, cell.height());
+    });
+    set_width(content_width);
+    set_height(tallest_cell_height);
 }
 }
 
 
 LayoutTableCell* LayoutTableRow::first_cell()
 LayoutTableCell* LayoutTableRow::first_cell()

+ 1 - 0
Libraries/LibWeb/Layout/LayoutTableRowGroup.cpp

@@ -49,6 +49,7 @@ void LayoutTableRowGroup::layout(LayoutMode layout_mode)
     float content_height = 0;
     float content_height = 0;
 
 
     for_each_child_of_type<LayoutTableRow>([&](auto& row) {
     for_each_child_of_type<LayoutTableRow>([&](auto& row) {
+        row.set_offset(0, content_height);
         row.layout(layout_mode);
         row.layout(layout_mode);
         content_height += row.height();
         content_height += row.height();
     });
     });