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 e7dfbd5d600d8bd73e9b0dd773b26d280807bc38..c4f6b7c238e4db8f107a59ada1b4bee073d169c6 100644 |
| --- a/third_party/WebKit/Source/core/layout/LayoutTable.cpp |
| +++ b/third_party/WebKit/Source/core/layout/LayoutTable.cpp |
| @@ -69,6 +69,7 @@ LayoutTable::LayoutTable(Element* element) |
| border_end_(0) { |
| DCHECK(!ChildrenInline()); |
| effective_column_positions_.Fill(0, 1); |
| + position_of_repeating_footer_group_on_page_.Fill(LayoutUnit(), 1); |
|
mstensho (USE GERRIT)
2017/05/08 13:55:59
Seems unnecessary if we're not paginating.
rhogan
2017/05/09 19:57:15
I'm not sure I can zap this and rebuild it each ti
mstensho (USE GERRIT)
2017/05/10 10:59:03
How about moving initialization to LayoutTableSect
|
| } |
| LayoutTable::~LayoutTable() {} |
| @@ -653,6 +654,16 @@ 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. |
|
mstensho (USE GERRIT)
2017/05/08 13:55:58
I must say that I'm still a bit concerned about th
rhogan
2017/05/09 19:57:15
Great. :)
mstensho (USE GERRIT)
2017/05/10 10:59:03
But, while I think it's safe, could you please rem
|
| + if (LayoutTableSection* section = Footer()) { |
| + if (section->GetPaginationBreakability() != kAllowAnyBreaks) { |
| + section->LayoutIfNeeded(); |
| + int section_logical_height = section->CalcRowLogicalHeight(); |
| + section->SetLogicalHeight(LayoutUnit(section_logical_height)); |
| + } |
| + } |
| + |
| // Lay out table header group. |
| if (LayoutTableSection* section = Header()) { |
| LayoutSection(*section, layouter, section_logical_left, |
| @@ -661,13 +672,10 @@ void LayoutTable::UpdateLayout() { |
| // If the repeating header group allows at least one row of content, |
| // then store the offset for other sections to offset their rows |
| // against. |
| - LayoutUnit section_logical_height = section->LogicalHeight(); |
| - if (section_logical_height < |
| - section->PageLogicalHeightForOffset(section->LogicalTop()) && |
| - section->GetPaginationBreakability() != kAllowAnyBreaks) { |
| + if (section->IsRepeatingHeaderGroup()) { |
| // Don't include any strut in the header group - we only want the |
| // height from its content. |
| - LayoutUnit offset_for_table_headers = section_logical_height; |
| + LayoutUnit offset_for_table_headers = section->LogicalHeight(); |
| if (LayoutTableRow* row = section->FirstRow()) |
| offset_for_table_headers -= row->PaginationStrut(); |
| SetRowOffsetFromRepeatingHeader(offset_for_table_headers); |
| @@ -869,7 +877,7 @@ void LayoutTable::PaintObject(const PaintInfo& paint_info, |
| TablePainter(*this).PaintObject(paint_info, paint_offset); |
| } |
| -void LayoutTable::SubtractCaptionRect(LayoutRect& rect) const { |
| +void LayoutTable::SubtractCaptionRect(LayoutRect& rect, bool after_only) const { |
| for (unsigned i = 0; i < captions_.size(); i++) { |
| LayoutUnit caption_logical_height = captions_[i]->LogicalHeight() + |
| captions_[i]->MarginBefore() + |
| @@ -877,6 +885,8 @@ void LayoutTable::SubtractCaptionRect(LayoutRect& rect) const { |
| bool caption_is_before = |
| (captions_[i]->Style()->CaptionSide() != ECaptionSide::kBottom) ^ |
| Style()->IsFlippedBlocksWritingMode(); |
| + if (caption_is_before && after_only) |
| + continue; |
| if (Style()->IsHorizontalWritingMode()) { |
| rect.SetHeight(rect.Height() - caption_logical_height); |
| if (caption_is_before) |