Index: third_party/WebKit/Source/core/paint/TablePainter.cpp |
diff --git a/third_party/WebKit/Source/core/paint/TablePainter.cpp b/third_party/WebKit/Source/core/paint/TablePainter.cpp |
index ae3463d30ff73130e733b061eaf791e4de173ec9..b5a560f3ffa7e29072e44805569efc52be4e9710 100644 |
--- a/third_party/WebKit/Source/core/paint/TablePainter.cpp |
+++ b/third_party/WebKit/Source/core/paint/TablePainter.cpp |
@@ -20,48 +20,45 @@ namespace blink { |
void TablePainter::paintObject(const PaintInfo& paintInfo, const LayoutPoint& paintOffset) |
{ |
PaintPhase paintPhase = paintInfo.phase; |
- if ((paintPhase == PaintPhaseSelfBlockBackground || paintPhase == PaintPhaseBlockBackground) && m_layoutTable.hasBoxDecorationBackground() && m_layoutTable.style()->visibility() == VISIBLE) |
- paintBoxDecorationBackground(paintInfo, paintOffset); |
+ |
+ if (shouldPaintSelfBlockBackground(paintPhase)) { |
+ if (m_layoutTable.hasBoxDecorationBackground() && m_layoutTable.style()->visibility() == VISIBLE) |
+ paintBoxDecorationBackground(paintInfo, paintOffset); |
+ if (paintPhase == PaintPhaseSelfBlockBackgroundOnly) |
+ return; |
+ } |
if (paintPhase == PaintPhaseMask) { |
paintMask(paintInfo, paintOffset); |
return; |
} |
- // We're done. We don't bother painting any children. |
- if (paintPhase == PaintPhaseSelfBlockBackground) |
- return; |
- |
- // We don't paint our own background, but we do let the kids paint their backgrounds. |
- if (paintPhase == PaintPhaseDescendantBlockBackgrounds) |
- paintPhase = PaintPhaseBlockBackground; |
+ if (paintPhase != PaintPhaseSelfOutlineOnly) { |
+ PaintInfo paintInfoForDescendants = paintInfo.forDescendants(); |
+ paintInfoForDescendants.updatePaintingRootForChildren(&m_layoutTable); |
- PaintInfo info(paintInfo); |
- info.phase = paintPhase; |
- info.updatePaintingRootForChildren(&m_layoutTable); |
- |
- for (LayoutObject* child = m_layoutTable.firstChild(); child; child = child->nextSibling()) { |
- if (child->isBox() && !toLayoutBox(child)->hasSelfPaintingLayer() && (child->isTableSection() || child->isTableCaption())) { |
- LayoutPoint childPoint = m_layoutTable.flipForWritingModeForChild(toLayoutBox(child), paintOffset); |
- child->paint(info, childPoint); |
+ for (LayoutObject* child = m_layoutTable.firstChild(); child; child = child->nextSibling()) { |
+ if (child->isBox() && !toLayoutBox(child)->hasSelfPaintingLayer() && (child->isTableSection() || child->isTableCaption())) { |
+ LayoutPoint childPoint = m_layoutTable.flipForWritingModeForChild(toLayoutBox(child), paintOffset); |
+ child->paint(paintInfoForDescendants, childPoint); |
+ } |
} |
- } |
- if (m_layoutTable.collapseBorders() && paintPhase == PaintPhaseBlockBackground && m_layoutTable.style()->visibility() == VISIBLE) { |
- // Using our cached sorted styles, we then do individual passes, |
- // painting each style of border from lowest precedence to highest precedence. |
- LayoutTable::CollapsedBorderValues collapsedBorders = m_layoutTable.collapsedBorders(); |
- size_t count = collapsedBorders.size(); |
- for (size_t i = 0; i < count; ++i) { |
- for (LayoutTableSection* section = m_layoutTable.bottomSection(); section; section = m_layoutTable.sectionAbove(section)) { |
- LayoutPoint childPoint = m_layoutTable.flipForWritingModeForChild(section, paintOffset); |
- TableSectionPainter(*section).paintCollapsedBorders(info, childPoint, collapsedBorders[i]); |
+ if (m_layoutTable.collapseBorders() && shouldPaintDescendantBlockBackgrounds(paintPhase) && m_layoutTable.style()->visibility() == VISIBLE) { |
+ // Using our cached sorted styles, we then do individual passes, |
+ // painting each style of border from lowest precedence to highest precedence. |
+ LayoutTable::CollapsedBorderValues collapsedBorders = m_layoutTable.collapsedBorders(); |
+ size_t count = collapsedBorders.size(); |
+ for (size_t i = 0; i < count; ++i) { |
+ for (LayoutTableSection* section = m_layoutTable.bottomSection(); section; section = m_layoutTable.sectionAbove(section)) { |
+ LayoutPoint childPoint = m_layoutTable.flipForWritingModeForChild(section, paintOffset); |
+ TableSectionPainter(*section).paintCollapsedBorders(paintInfoForDescendants, childPoint, collapsedBorders[i]); |
+ } |
} |
} |
} |
- // Paint outline. |
- if ((paintPhase == PaintPhaseOutline || paintPhase == PaintPhaseSelfOutline) && m_layoutTable.style()->hasOutline() && m_layoutTable.style()->visibility() == VISIBLE) |
+ if (shouldPaintSelfOutline(paintPhase)) |
ObjectPainter(m_layoutTable).paintOutline(paintInfo, paintOffset); |
} |