| Index: Source/core/rendering/RenderTableSection.cpp
|
| diff --git a/Source/core/rendering/RenderTableSection.cpp b/Source/core/rendering/RenderTableSection.cpp
|
| index f1983f60442b97de4e318913bdadcee70a486cf4..9c0cf08d9b6bf851be925d3a368ea7e0bb52865a 100644
|
| --- a/Source/core/rendering/RenderTableSection.cpp
|
| +++ b/Source/core/rendering/RenderTableSection.cpp
|
| @@ -943,9 +943,6 @@ void RenderTableSection::layoutRows()
|
|
|
| // Set the width of our section now. The rows will also be this width.
|
| setLogicalWidth(table()->contentLogicalWidth());
|
| - m_overflow.clear();
|
| - m_overflowingCells.clear();
|
| - m_forceSlowPaintPathWithOverflowingCell = false;
|
|
|
| int vspacing = table()->vBorderSpacing();
|
| unsigned nEffCols = table()->numEffCols();
|
| @@ -960,8 +957,6 @@ void RenderTableSection::layoutRows()
|
| rowRenderer->setLogicalWidth(logicalWidth());
|
| rowRenderer->setLogicalHeight(m_rowPos[r + 1] - m_rowPos[r] - vspacing);
|
| rowRenderer->updateLayerTransformAfterLayout();
|
| - rowRenderer->clearAllOverflows();
|
| - rowRenderer->addVisualEffectOverflow();
|
| }
|
|
|
| int rowHeightIncreaseForPagination = 0;
|
| @@ -1053,9 +1048,6 @@ void RenderTableSection::layoutRows()
|
| cell->computeOverflow(oldLogicalHeight, false);
|
| }
|
|
|
| - if (rowRenderer)
|
| - rowRenderer->addOverflowFromCell(cell);
|
| -
|
| LayoutSize childOffset(cell->location() - oldCellRect.location());
|
| if (childOffset.width() || childOffset.height()) {
|
| // If the child moved, we have to issue paint invalidations to it as well as any floating/positioned
|
| @@ -1077,6 +1069,9 @@ void RenderTableSection::layoutRows()
|
| }
|
| }
|
| }
|
| +
|
| + if (rowRenderer)
|
| + rowRenderer->recomputeOverflow();
|
| }
|
|
|
| ASSERT(!needsLayout());
|
| @@ -1098,6 +1093,10 @@ void RenderTableSection::computeOverflowFromCells(unsigned totalRows, unsigned n
|
| unsigned totalCellsCount = nEffCols * totalRows;
|
| unsigned maxAllowedOverflowingCellsCount = totalCellsCount < gMinTableSizeToUseFastPaintPathWithOverflowingCell ? 0 : gMaxAllowedOverflowingCellRatioForFastPaintPath * totalCellsCount;
|
|
|
| + m_overflow.clear();
|
| + m_overflowingCells.clear();
|
| + m_forceSlowPaintPathWithOverflowingCell = false;
|
| +
|
| #if ENABLE(ASSERT)
|
| bool hasOverflowingCell = false;
|
| #endif
|
| @@ -1129,6 +1128,41 @@ void RenderTableSection::computeOverflowFromCells(unsigned totalRows, unsigned n
|
| ASSERT(hasOverflowingCell == this->hasOverflowingCell());
|
| }
|
|
|
| +bool RenderTableSection::recalcChildOverflowAfterStyleChange()
|
| +{
|
| + ASSERT(childNeedsOverflowRecalcAfterStyleChange());
|
| + clearChildNeedsOverflowRecalcAfterStyleChange();
|
| +
|
| + unsigned totalRows = m_grid.size();
|
| + unsigned numEffCols = table()->numEffCols();
|
| + bool childrenOverflowChanged = false;
|
| +
|
| + for (unsigned r = 0; r < totalRows; r++) {
|
| + RenderTableRow* rowRenderer = rowRendererAt(r);
|
| + if (!rowRenderer || !rowRenderer->childNeedsOverflowRecalcAfterStyleChange())
|
| + continue;
|
| +
|
| + rowRenderer->clearChildNeedsOverflowRecalcAfterStyleChange();
|
| +
|
| + bool rowChildrenOverflowChanged = false;
|
| + for (unsigned c = 0; c < numEffCols; c++) {
|
| + CellStruct& cs = cellAt(r, c);
|
| + RenderTableCell* cell = cs.primaryCell();
|
| + if (!cell || cs.inColSpan || !cell->needsOverflowRecalcAfterStyleChange())
|
| + continue;
|
| + rowChildrenOverflowChanged |= cell->recalcOverflowAfterStyleChange();
|
| + }
|
| + if (rowChildrenOverflowChanged)
|
| + rowRenderer->recomputeOverflow();
|
| + childrenOverflowChanged |= rowChildrenOverflowChanged;
|
| + }
|
| +
|
| + if (childrenOverflowChanged)
|
| + computeOverflowFromCells(totalRows, numEffCols);
|
| +
|
| + return childrenOverflowChanged;
|
| +}
|
| +
|
| int RenderTableSection::calcBlockDirectionOuterBorder(BlockBorderSide side) const
|
| {
|
| unsigned totalCols = table()->numEffCols();
|
|
|