| 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 e348496498c32d2cae0c4eeea0f1d30f0d812b3b..8065aa7dc27dece2724469983c99d2b062265a87 100644
|
| --- a/third_party/WebKit/Source/core/paint/TableSectionPainter.cpp
|
| +++ b/third_party/WebKit/Source/core/paint/TableSectionPainter.cpp
|
| @@ -8,6 +8,8 @@
|
| #include "core/layout/LayoutTableCol.h"
|
| #include "core/layout/LayoutTableRow.h"
|
| #include "core/paint/BoxClipper.h"
|
| +#include "core/paint/BoxPainter.h"
|
| +#include "core/paint/LayoutObjectDrawingRecorder.h"
|
| #include "core/paint/ObjectPainter.h"
|
| #include "core/paint/PaintInfo.h"
|
| #include "core/paint/TableCellPainter.h"
|
| @@ -125,12 +127,14 @@ void TableSectionPainter::paintObject(const PaintInfo& paintInfo, const LayoutPo
|
| PaintInfo paintInfoForDescendants = paintInfo.forDescendants();
|
|
|
| if (shouldPaintSelfBlockBackground(paintInfo.phase)) {
|
| + paintBoxShadow(paintInfo, paintOffset, Normal);
|
| for (unsigned r = dirtiedRows.start(); r < dirtiedRows.end(); r++) {
|
| for (unsigned c = dirtiedColumns.start(); c < dirtiedColumns.end(); c++) {
|
| if (const LayoutTableCell* cell = primaryCellToPaint(r, c, dirtiedRows, dirtiedColumns))
|
| paintBackgroundsBehindCell(*cell, paintInfoForDescendants, paintOffset);
|
| }
|
| }
|
| + paintBoxShadow(paintInfo, paintOffset, Inset);
|
| }
|
|
|
| if (paintInfo.phase == PaintPhaseSelfBlockBackgroundOnly)
|
| @@ -140,14 +144,18 @@ void TableSectionPainter::paintObject(const PaintInfo& paintInfo, const LayoutPo
|
| for (unsigned r = dirtiedRows.start(); r < dirtiedRows.end(); r++) {
|
| const LayoutTableRow* row = m_layoutTableSection.rowLayoutObjectAt(r);
|
| // If a row has a layer, we'll paint row background in TableRowPainter.
|
| - if (!row || row->hasSelfPaintingLayer() || !row->hasBackground())
|
| + if (!row || row->hasSelfPaintingLayer())
|
| continue;
|
|
|
| TableRowPainter rowPainter(*row);
|
| - for (unsigned c = dirtiedColumns.start(); c < dirtiedColumns.end(); c++) {
|
| - if (const LayoutTableCell* cell = primaryCellToPaint(r, c, dirtiedRows, dirtiedColumns))
|
| - rowPainter.paintBackgroundBehindCell(*cell, paintInfoForDescendants, paintOffset);
|
| + rowPainter.paintBoxShadow(paintInfoForDescendants, paintOffset, Normal);
|
| + if (row->hasBackground()) {
|
| + for (unsigned c = dirtiedColumns.start(); c < dirtiedColumns.end(); c++) {
|
| + if (const LayoutTableCell* cell = primaryCellToPaint(r, c, dirtiedRows, dirtiedColumns))
|
| + rowPainter.paintBackgroundBehindCell(*cell, paintInfoForDescendants, paintOffset);
|
| + }
|
| }
|
| + rowPainter.paintBoxShadow(paintInfoForDescendants, paintOffset, Inset);
|
| }
|
| }
|
|
|
| @@ -237,4 +245,19 @@ void TableSectionPainter::paintCell(const LayoutTableCell& cell, const PaintInfo
|
| }
|
| }
|
|
|
| +void TableSectionPainter::paintBoxShadow(const PaintInfo& paintInfo, const LayoutPoint& paintOffset, ShadowStyle shadowStyle)
|
| +{
|
| + DCHECK(shouldPaintSelfBlockBackground(paintInfo.phase));
|
| + if (!m_layoutTableSection.styleRef().boxShadow())
|
| + return;
|
| +
|
| + DisplayItem::Type type = shadowStyle == Normal ? DisplayItem::TableSectionBoxShadowNormal : DisplayItem::TableSectionBoxShadowInset;
|
| + if (LayoutObjectDrawingRecorder::useCachedDrawingIfPossible(paintInfo.context, m_layoutTableSection, type))
|
| + return;
|
| +
|
| + LayoutRect bounds = BoxPainter(m_layoutTableSection).boundsForDrawingRecorder(paintOffset);
|
| + LayoutObjectDrawingRecorder recorder(paintInfo.context, m_layoutTableSection, type, bounds);
|
| + BoxPainter::paintBoxShadow(paintInfo, LayoutRect(paintOffset, m_layoutTableSection.size()), m_layoutTableSection.styleRef(), shadowStyle);
|
| +}
|
| +
|
| } // namespace blink
|
|
|