| Index: third_party/WebKit/Source/core/paint/TableSectionPainter.cpp
|
| diff --git a/third_party/WebKit/Source/core/paint/TableSectionPainter.cpp b/third_party/WebKit/Source/core/paint/TableSectionPainter.cpp
|
| index f66cc741d5c26522ae8ff130d27ed3a1c890c050..e76e47c9d8da8f6247bddfef4edf20941113533e 100644
|
| --- a/third_party/WebKit/Source/core/paint/TableSectionPainter.cpp
|
| +++ b/third_party/WebKit/Source/core/paint/TableSectionPainter.cpp
|
| @@ -37,9 +37,9 @@ void TableSectionPainter::PaintRepeatingHeaderGroup(
|
| header_group_offset += row->PaginationStrut();
|
| LayoutUnit offset_to_next_page =
|
| page_height - IntMod(header_group_offset, page_height);
|
| - // Move paginationOffset to the top of the next page.
|
| + // Move pagination_offset to the top of the next page.
|
| pagination_offset.Move(LayoutUnit(), offset_to_next_page);
|
| - // Now move paginationOffset to the top of the page the cull rect starts on.
|
| + // Now move pagination_offset to the top of the page the cull rect starts on.
|
| if (paint_info.GetCullRect().rect_.Y() > pagination_offset.Y()) {
|
| pagination_offset.Move(LayoutUnit(),
|
| page_height * ((paint_info.GetCullRect().rect_.Y() -
|
| @@ -69,15 +69,56 @@ void TableSectionPainter::PaintRepeatingHeaderGroup(
|
| }
|
| }
|
|
|
| +void TableSectionPainter::PaintRepeatingFooterGroup(
|
| + const PaintInfo& paint_info,
|
| + const LayoutPoint& paint_offset,
|
| + const CollapsedBorderValue& current_border_value,
|
| + ItemToPaint item_to_paint) {
|
| + if (!layout_table_section_.IsRepeatingFooterGroup())
|
| + return;
|
| + LayoutTable* table = layout_table_section_.Table();
|
| + LayoutRect sections_rect(LayoutPoint(), table->Size());
|
| + // Keep the top captions as we need top_offset to be
|
| + // the offset from the top of table.
|
| + table->SubtractCaptionRect(sections_rect, LayoutTable::BottomCaptionsOnly);
|
| + LayoutUnit total_height_of_rows =
|
| + sections_rect.Height() - table->OuterBorderBottom();
|
| + // The footer section may be at the top of a page.
|
| + total_height_of_rows -= (layout_table_section_.LogicalHeight() -
|
| + layout_table_section_.FirstRow()->PaginationStrut());
|
| + LayoutPoint top_offset = paint_offset;
|
| + top_offset.Move(LayoutUnit(), -total_height_of_rows);
|
| + IntRect cull_rect = paint_info.GetCullRect().rect_;
|
| + cull_rect.Move(0, -total_height_of_rows.ToInt());
|
| + for (unsigned page = 0; page < table->PagesWithRepeatingFooters(); page++) {
|
| + LayoutPoint pagination_offset = top_offset;
|
| + LayoutUnit footer_position =
|
| + table->GetPositionOfRepeatingFooterGroupOnPage(page);
|
| + if (!footer_position)
|
| + continue;
|
| + pagination_offset.Move(LayoutUnit(), footer_position);
|
| + if (item_to_paint == kPaintCollapsedBorders) {
|
| + PaintCollapsedSectionBorders(paint_info, pagination_offset,
|
| + current_border_value);
|
| + } else {
|
| + PaintSection(paint_info, pagination_offset);
|
| + }
|
| + }
|
| +}
|
| +
|
| void TableSectionPainter::Paint(const PaintInfo& paint_info,
|
| const LayoutPoint& paint_offset) {
|
| ObjectPainter(layout_table_section_)
|
| .CheckPaintOffset(paint_info, paint_offset);
|
| PaintSection(paint_info, paint_offset);
|
| LayoutTable* table = layout_table_section_.Table();
|
| - if (table->Header() == layout_table_section_)
|
| + if (table->Header() == layout_table_section_) {
|
| PaintRepeatingHeaderGroup(paint_info, paint_offset, CollapsedBorderValue(),
|
| kPaintSection);
|
| + } else if (table->Footer() == layout_table_section_) {
|
| + PaintRepeatingFooterGroup(paint_info, paint_offset, CollapsedBorderValue(),
|
| + kPaintSection);
|
| + }
|
| }
|
|
|
| void TableSectionPainter::PaintSection(const PaintInfo& paint_info,
|
| @@ -132,9 +173,13 @@ void TableSectionPainter::PaintCollapsedBorders(
|
| const CollapsedBorderValue& current_border_value) {
|
| PaintCollapsedSectionBorders(paint_info, paint_offset, current_border_value);
|
| LayoutTable* table = layout_table_section_.Table();
|
| - if (table->Header() == layout_table_section_)
|
| + if (table->Header() == layout_table_section_) {
|
| PaintRepeatingHeaderGroup(paint_info, paint_offset, current_border_value,
|
| kPaintCollapsedBorders);
|
| + } else if (table->Footer() == layout_table_section_) {
|
| + PaintRepeatingFooterGroup(paint_info, paint_offset, current_border_value,
|
| + kPaintCollapsedBorders);
|
| + }
|
| }
|
|
|
| void TableSectionPainter::PaintCollapsedSectionBorders(
|
|
|