Sfoglia il codice sorgente

LibWeb: Consider row computed height in total row min height of table

Fixes the issue that currently we do not consider table rows height
while calculating min row height even if it is definite value.
Aliaksandr Kalenik 2 anni fa
parent
commit
9b4cd0dab7

+ 6 - 0
Tests/LibWeb/Layout/expected/table/row-px-height.txt

@@ -0,0 +1,6 @@
+Viewport <#document> at (0,0) content-size 800x600 children: not-inline
+  BlockContainer <html> at (0,0) content-size 800x116 children: not-inline
+    TableWrapper <(anonymous)> at (8,8) content-size 102x100 children: not-inline
+      TableBox <body> at (8,8) content-size 102x100 children: not-inline
+        TableRowBox <div.row> at (8,8) content-size 102x100 children: not-inline
+          TableCellBox <div.cell> at (9,9) content-size 100x0 children: not-inline

+ 17 - 0
Tests/LibWeb/Layout/input/table/row-px-height.html

@@ -0,0 +1,17 @@
+<style>
+body {
+    display: table;
+}
+
+.row {
+    display: table-row;
+    height: 100px;
+}
+
+.cell {
+    display: table-cell;
+    border: 1px solid black;
+    width: 100px;
+}
+</style>
+<div class="row"><div class="cell"></div></div>

+ 10 - 0
Userland/Libraries/LibWeb/Layout/TableFormattingContext.cpp

@@ -425,6 +425,16 @@ void TableFormattingContext::calculate_row_heights(LayoutMode layout_mode)
         row.used_height = max(row.used_height, cell_state.border_box_height());
         row.used_height = max(row.used_height, cell_state.border_box_height());
         row.baseline = max(row.baseline, cell.baseline);
         row.baseline = max(row.baseline, cell.baseline);
     }
     }
+
+    for (auto& row : m_rows) {
+        auto row_computed_height = row.box->computed_values().height();
+        if (row_computed_height.is_length()) {
+            auto height_of_containing_block = m_state.get(*row.box->containing_block()).content_height();
+            auto height_of_containing_block_as_length = CSS::Length::make_px(height_of_containing_block);
+            auto row_used_height = row_computed_height.resolved(row.box, height_of_containing_block_as_length).to_px(row.box);
+            row.used_height = max(row.used_height, row_used_height);
+        }
+    }
 }
 }
 
 
 void TableFormattingContext::position_row_boxes(CSSPixels& total_content_height)
 void TableFormattingContext::position_row_boxes(CSSPixels& total_content_height)