void RenderTableRow::layout() { ASSERT(needsLayout()); // Table rows do not add translation. LayoutStateMaintainer statePusher(view(), this, LayoutSize(), style()->isFlippedBlocksWritingMode()); bool paginated = view()->layoutState()->isPaginated(); for (RenderObject* child = firstChild(); child; child = child->nextSibling()) { if (child->isTableCell()) { RenderTableCell* cell = toRenderTableCell(child); if (!cell->needsLayout() && paginated && view()->layoutState()->pageLogicalHeight() && view()->layoutState()->pageLogicalOffset(cell->logicalTop()) != cell->pageLogicalOffset()) cell->setChildNeedsLayout(true, MarkOnlyThis); if (child->needsLayout()) { cell->computeBlockDirectionMargins(table()); cell->layout(); } } } // We only ever need to repaint if our cells didn't, which menas that they didn't need // layout, so we know that our bounds didn't change. This code is just making up for // the fact that we did not repaint in setStyle() because we had a layout hint. // We cannot call repaint() because our clippedOverflowRectForRepaint() is taken from the // parent table, and being mid-layout, that is invalid. Instead, we repaint our cells. if (selfNeedsLayout() && checkForRepaintDuringLayout()) { for (RenderObject* child = firstChild(); child; child = child->nextSibling()) { if (child->isTableCell()) child->repaint(); } } statePusher.pop(); // RenderTableSection::layoutRows will set our logical height and width later, so it calls updateLayerTransform(). setNeedsLayout(false); }
void RenderTableRow::layout() { ASSERT(needsLayout()); // Table rows do not add translation. LayoutStateMaintainer statePusher(view(), this, IntSize()); bool paginated = view()->layoutState()->isPaginated(); for (RenderObject* child = firstChild(); child; child = child->nextSibling()) { if (child->isTableCell()) { RenderTableCell* cell = toRenderTableCell(child); #if ENABLE(VIEWPORT_REFLOW) if (view()->shouldReflow()) // Might have children that need to reflow child->setNeedsLayout(true, false); #endif if (child->needsLayout()) { cell->computeBlockDirectionMargins(table()); cell->layout(); } } } // We only ever need to repaint if our cells didn't, which menas that they didn't need // layout, so we know that our bounds didn't change. This code is just making up for // the fact that we did not repaint in setStyle() because we had a layout hint. // We cannot call repaint() because our clippedOverflowRectForRepaint() is taken from the // parent table, and being mid-layout, that is invalid. Instead, we repaint our cells. if (selfNeedsLayout() && checkForRepaintDuringLayout()) { for (RenderObject* child = firstChild(); child; child = child->nextSibling()) { if (child->isTableCell()) child->repaint(); } } statePusher.pop(); setNeedsLayout(false); }