Chromium Code Reviews| Index: third_party/WebKit/Source/core/layout/LayoutTable.cpp |
| diff --git a/third_party/WebKit/Source/core/layout/LayoutTable.cpp b/third_party/WebKit/Source/core/layout/LayoutTable.cpp |
| index 408bd532c4fb75cb1234730a04e3049e5787535e..c8534125f5df107ac270755c59be4ad24643998c 100644 |
| --- a/third_party/WebKit/Source/core/layout/LayoutTable.cpp |
| +++ b/third_party/WebKit/Source/core/layout/LayoutTable.cpp |
| @@ -647,10 +647,33 @@ void LayoutTable::UpdateLayout() { |
| : kTableHeightNotChanging; |
| old_available_logical_height_ = current_available_logical_height; |
| + // Lay out table footer to get its raw height. This will help us decide |
| + // if we can repeat it in each page/column. |
| + if (LayoutTableSection* section = Footer()) { |
| + if (section->GetPaginationBreakability() != kAllowAnyBreaks) { |
| + section->LayoutIfNeeded(); |
| + int section_logical_height = section->CalcRowLogicalHeight(); |
| + section->SetLogicalHeight(LayoutUnit(section_logical_height)); |
| + } |
| + section->DetermineIfFooterGroupShouldRepeat(); |
| + if (section->IsRepeatingFooterGroup()) { |
| + LayoutUnit offset_for_table_footers = |
| + state.HeightOffsetForTableFooters(); |
| + offset_for_table_footers += section->LogicalHeight(); |
| + state.SetHeightOffsetForTableFooters(offset_for_table_footers); |
|
mstensho (USE GERRIT)
2017/06/16 08:43:06
What if we delay setting this until right before l
rhogan
2017/06/20 18:46:05
Yup, reorganized this.
|
| + SetRowOffsetFromRepeatingFooter(offset_for_table_footers); |
| + } |
| + } |
| + |
| // Lay out table header group. |
| if (LayoutTableSection* section = Header()) { |
| + // Reset the offset temporarily so that we can ignore it when paginating |
| + // the content of the footer itself. |
| + LayoutUnit offset_for_table_footers = state.HeightOffsetForTableFooters(); |
| + state.SetHeightOffsetForTableFooters(LayoutUnit()); |
| LayoutSection(*section, layouter, section_logical_left, |
| table_height_changing); |
| + state.SetHeightOffsetForTableFooters(offset_for_table_footers); |
| if (state.IsPaginated() && IsPageLogicalHeightKnown()) { |
| // If the repeating header group allows at least one row of content, |
| // then store the offset for other sections to offset their rows |
| @@ -687,10 +710,19 @@ void LayoutTable::UpdateLayout() { |
| // Lay out table footer. |
| if (LayoutTableSection* section = Footer()) { |
| + // Reset the offset temporarily so that we can ignore it when paginating |
| + // the content of the footer itself. |
| + LayoutUnit offset_for_table_footers = state.HeightOffsetForTableFooters(); |
| + state.SetHeightOffsetForTableFooters(LayoutUnit()); |
|
mstensho (USE GERRIT)
2017/06/16 08:43:06
No need to temporarily reset this, if you just mov
rhogan
2017/06/20 18:46:05
ditto.
|
| LayoutSection(*section, layouter, section_logical_left, |
| table_height_changing); |
| + state.SetHeightOffsetForTableFooters(offset_for_table_footers); |
| } |
| + // We no longer need to account for repeating table headers. |
| + state.SetHeightOffsetForTableHeaders(LayoutUnit()); |
|
mstensho (USE GERRIT)
2017/06/16 08:43:06
I don't think I understand why we need to reset th
rhogan
2017/06/20 18:46:05
We don't want layout of the footer sections or cap
|
| + state.SetHeightOffsetForTableFooters(LayoutUnit()); |
| + |
| SetLogicalHeight(table_box_logical_top + border_and_padding_before); |
| LayoutUnit computed_logical_height = LogicalHeightFromStyle(); |