| 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 b0ee0ab2edad35d1193fc353d0930a8e2dbde044..5ce413aa595144c78daf873394eb91b2d6451122 100644
|
| --- a/third_party/WebKit/Source/core/paint/TableSectionPainter.cpp
|
| +++ b/third_party/WebKit/Source/core/paint/TableSectionPainter.cpp
|
| @@ -26,11 +26,6 @@ void TableSectionPainter::paint(const PaintInfo& paintInfo, const LayoutPoint& p
|
| if (m_layoutTableSection.needsLayout())
|
| return;
|
|
|
| - // Table sections don't paint self background. The cells paint table section's background
|
| - // behind them when needed during PaintPhaseBlockBackground or PaintPhaseDescendantBlockBackgroundOnly.
|
| - if (paintInfo.phase == PaintPhaseSelfBlockBackgroundOnly)
|
| - return;
|
| -
|
| unsigned totalRows = m_layoutTableSection.numRows();
|
| unsigned totalCols = m_layoutTableSection.table()->columns().size();
|
|
|
| @@ -40,7 +35,9 @@ void TableSectionPainter::paint(const PaintInfo& paintInfo, const LayoutPoint& p
|
| LayoutPoint adjustedPaintOffset = paintOffset + m_layoutTableSection.location();
|
|
|
| if (paintInfo.phase != PaintPhaseSelfOutlineOnly) {
|
| - BoxClipper boxClipper(m_layoutTableSection, paintInfo, adjustedPaintOffset, ForceContentsClip);
|
| + Optional<BoxClipper> boxClipper;
|
| + if (paintInfo.phase != PaintPhaseSelfBlockBackgroundOnly)
|
| + boxClipper.emplace(m_layoutTableSection, paintInfo, adjustedPaintOffset, ForceContentsClip);
|
| paintObject(paintInfo, adjustedPaintOffset);
|
| }
|
|
|
| @@ -125,7 +122,7 @@ void TableSectionPainter::paintObject(const PaintInfo& paintInfo, const LayoutPo
|
| const LayoutTableCell* cell = current.primaryCell();
|
| if (!cell || (r > dirtiedRows.start() && m_layoutTableSection.primaryCellAt(r - 1, c) == cell) || (c > dirtiedColumns.start() && m_layoutTableSection.primaryCellAt(r, c - 1) == cell))
|
| continue;
|
| - paintCell(*cell, paintInfoForCells, paintOffset);
|
| + paintCell(*cell, paintInfo.phase, paintInfoForCells, paintOffset);
|
| }
|
| }
|
| } else {
|
| @@ -172,18 +169,19 @@ void TableSectionPainter::paintObject(const PaintInfo& paintInfo, const LayoutPo
|
| std::sort(cells.begin(), cells.end(), compareCellPositionsWithOverflowingCells);
|
|
|
| for (unsigned i = 0; i < cells.size(); ++i)
|
| - paintCell(*cells[i], paintInfoForCells, paintOffset);
|
| + paintCell(*cells[i], paintInfo.phase, paintInfoForCells, paintOffset);
|
| }
|
| }
|
|
|
| -void TableSectionPainter::paintCell(const LayoutTableCell& cell, const PaintInfo& paintInfo, const LayoutPoint& paintOffset)
|
| +void TableSectionPainter::paintCell(const LayoutTableCell& cell, PaintPhase originalPaintPhase, const PaintInfo& paintInfoForCells, const LayoutPoint& paintOffset)
|
| {
|
| LayoutPoint cellPoint = m_layoutTableSection.flipForWritingModeForChild(&cell, paintOffset);
|
| - PaintPhase paintPhase = paintInfo.phase;
|
| const LayoutTableRow* row = toLayoutTableRow(cell.parent());
|
|
|
| - if (shouldPaintSelfBlockBackground(paintPhase)
|
| - && BlockPainter(cell).intersectsPaintRect(paintInfo, paintOffset + cell.location())) {
|
| + if (!BlockPainter(cell).intersectsPaintRect(paintInfoForCells, paintOffset + cell.location()))
|
| + return;
|
| +
|
| + if (shouldPaintSelfBlockBackground(originalPaintPhase)) {
|
| // We need to handle painting a stack of backgrounds. This stack (from bottom to top) consists of
|
| // the column group, column, row group, row, and then the cell.
|
|
|
| @@ -198,21 +196,24 @@ void TableSectionPainter::paintCell(const LayoutTableCell& cell, const PaintInfo
|
| // Note that we deliberately ignore whether or not the cell has a layer, since these backgrounds paint "behind" the
|
| // cell.
|
| if (columnGroup && columnGroup->hasBackground())
|
| - tableCellPainter.paintBackgroundsBehindCell(paintInfo, cellPoint, columnGroup, DisplayItem::TableCellBackgroundFromColumnGroup);
|
| + tableCellPainter.paintBackgroundsBehindCell(paintInfoForCells, cellPoint, columnGroup, DisplayItem::TableCellBackgroundFromColumnGroup);
|
| if (column && column->hasBackground())
|
| - tableCellPainter.paintBackgroundsBehindCell(paintInfo, cellPoint, column, DisplayItem::TableCellBackgroundFromColumn);
|
| + tableCellPainter.paintBackgroundsBehindCell(paintInfoForCells, cellPoint, column, DisplayItem::TableCellBackgroundFromColumn);
|
|
|
| // Paint the row group next.
|
| if (m_layoutTableSection.hasBackground())
|
| - tableCellPainter.paintBackgroundsBehindCell(paintInfo, cellPoint, &m_layoutTableSection, DisplayItem::TableCellBackgroundFromSection);
|
| + tableCellPainter.paintBackgroundsBehindCell(paintInfoForCells, cellPoint, &m_layoutTableSection, DisplayItem::TableCellBackgroundFromSection);
|
| + }
|
|
|
| + if (shouldPaintDescendantBlockBackgrounds(originalPaintPhase)) {
|
| // Paint the row next, but only if it doesn't have a layer. If a row has a layer, it will be responsible for
|
| // painting the row background for the cell.
|
| if (row->hasBackground() && !row->hasSelfPaintingLayer())
|
| - tableCellPainter.paintBackgroundsBehindCell(paintInfo, cellPoint, row, DisplayItem::TableCellBackgroundFromRow);
|
| + TableCellPainter(cell).paintBackgroundsBehindCell(paintInfoForCells, cellPoint, row, DisplayItem::TableCellBackgroundFromRow);
|
| }
|
| - if ((!cell.hasSelfPaintingLayer() && !row->hasSelfPaintingLayer()))
|
| - cell.paint(paintInfo, cellPoint);
|
| +
|
| + if (originalPaintPhase != PaintPhaseSelfBlockBackgroundOnly && !cell.hasSelfPaintingLayer() && !row->hasSelfPaintingLayer())
|
| + cell.paint(paintInfoForCells, cellPoint);
|
| }
|
|
|
| } // namespace blink
|
|
|