| Index: Source/core/rendering/RenderTableRow.cpp
|
| diff --git a/Source/core/rendering/RenderTableRow.cpp b/Source/core/rendering/RenderTableRow.cpp
|
| index 8a41cc73839af44d50e0c00ffa785e0a497123b2..7e4557f8d9a450e358a647500a0f574a671c7b94 100644
|
| --- a/Source/core/rendering/RenderTableRow.cpp
|
| +++ b/Source/core/rendering/RenderTableRow.cpp
|
| @@ -1,10 +1,10 @@
|
| -/**
|
| +/*
|
| * Copyright (C) 1997 Martin Jones (mjones@kde.org)
|
| * (C) 1997 Torben Weis (weis@kde.org)
|
| * (C) 1998 Waldo Bastian (bastian@kde.org)
|
| * (C) 1999 Lars Knoll (knoll@kde.org)
|
| * (C) 1999 Antti Koivisto (koivisto@kde.org)
|
| - * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Apple Inc. All rights reserved.
|
| + * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2013 Apple Inc. All rights reserved.
|
| *
|
| * This library is free software; you can redistribute it and/or
|
| * modify it under the terms of the GNU Library General Public
|
| @@ -111,7 +111,7 @@ void RenderTableRow::addChild(RenderObject* child, RenderObject* beforeChild)
|
| if (!child->isTableCell()) {
|
| RenderObject* last = beforeChild;
|
| if (!last)
|
| - last = lastChild();
|
| + last = lastCell();
|
| if (last && last->isAnonymous() && last->isTableCell() && !last->isBeforeOrAfterContent()) {
|
| RenderTableCell* lastCell = toRenderTableCell(last);
|
| if (beforeChild == lastCell)
|
| @@ -152,7 +152,7 @@ void RenderTableRow::addChild(RenderObject* child, RenderObject* beforeChild)
|
| ASSERT(!beforeChild || beforeChild->isTableCell());
|
| RenderBox::addChild(cell, beforeChild);
|
|
|
| - if (beforeChild || nextSibling())
|
| + if (beforeChild || nextRow())
|
| section()->setNeedsCellRecalc();
|
| }
|
|
|
| @@ -163,16 +163,13 @@ void RenderTableRow::layout()
|
| // Table rows do not add translation.
|
| LayoutStateMaintainer statePusher(*this, LayoutSize());
|
|
|
| - for (RenderObject* child = firstChild(); child; child = child->nextSibling()) {
|
| - if (child->isTableCell()) {
|
| - SubtreeLayoutScope layouter(*child);
|
| - RenderTableCell* cell = toRenderTableCell(child);
|
| - if (!cell->needsLayout())
|
| - cell->markForPaginationRelayoutIfNeeded(layouter);
|
| - if (cell->needsLayout()) {
|
| - cell->computeAndSetBlockDirectionMargins(table());
|
| - cell->layout();
|
| - }
|
| + for (RenderTableCell* cell = firstCell(); cell; cell = cell->nextCell()) {
|
| + SubtreeLayoutScope layouter(*cell);
|
| + if (!cell->needsLayout())
|
| + cell->markForPaginationRelayoutIfNeeded(layouter);
|
| + if (cell->needsLayout()) {
|
| + cell->computeAndSetBlockDirectionMargins(table());
|
| + cell->layout();
|
| }
|
| }
|
|
|
| @@ -185,14 +182,12 @@ void RenderTableRow::layout()
|
| // 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() && checkForRepaint()) {
|
| - for (RenderObject* child = firstChild(); child; child = child->nextSibling()) {
|
| - if (child->isTableCell()) {
|
| - if (RuntimeEnabledFeatures::repaintAfterLayoutEnabled()) {
|
| - // FIXME: Is this needed with repaint After Layout?
|
| - child->setShouldDoFullRepaintAfterLayout(true);
|
| - } else {
|
| - child->repaint();
|
| - }
|
| + for (RenderTableCell* cell = firstCell(); cell; cell = cell->nextCell()) {
|
| + if (RuntimeEnabledFeatures::repaintAfterLayoutEnabled()) {
|
| + // FIXME: Is this needed with repaint After Layout?
|
| + cell->setShouldDoFullRepaintAfterLayout(true);
|
| + } else {
|
| + cell->repaint();
|
| }
|
| }
|
| }
|
| @@ -206,14 +201,14 @@ bool RenderTableRow::nodeAtPoint(const HitTestRequest& request, HitTestResult& r
|
| {
|
| // Table rows cannot ever be hit tested. Effectively they do not exist.
|
| // Just forward to our children always.
|
| - for (RenderObject* child = lastChild(); child; child = child->previousSibling()) {
|
| + for (RenderTableCell* cell = lastCell(); cell; cell = cell->previousCell()) {
|
| // FIXME: We have to skip over inline flows, since they can show up inside table rows
|
| // at the moment (a demoted inline <form> for example). If we ever implement a
|
| // table-specific hit-test method (which we should do for performance reasons anyway),
|
| // then we can remove this check.
|
| - if (child->isTableCell() && !toRenderBox(child)->hasSelfPaintingLayer()) {
|
| - LayoutPoint cellPoint = flipForWritingModeForChild(toRenderTableCell(child), accumulatedOffset);
|
| - if (child->nodeAtPoint(request, result, locationInContainer, cellPoint, action)) {
|
| + if (!cell->hasSelfPaintingLayer()) {
|
| + LayoutPoint cellPoint = flipForWritingModeForChild(cell, accumulatedOffset);
|
| + if (cell->nodeAtPoint(request, result, locationInContainer, cellPoint, action)) {
|
| updateHitTestResult(result, locationInContainer.point() - toLayoutSize(cellPoint));
|
| return true;
|
| }
|
| @@ -237,16 +232,12 @@ void RenderTableRow::paint(PaintInfo& paintInfo, const LayoutPoint& paintOffset)
|
| ANNOTATE_GRAPHICS_CONTEXT(paintInfo, this);
|
|
|
| paintOutlineForRowIfNeeded(paintInfo, paintOffset);
|
| - for (RenderObject* child = firstChild(); child; child = child->nextSibling()) {
|
| - if (child->isTableCell()) {
|
| - // Paint the row background behind the cell.
|
| - if (paintInfo.phase == PaintPhaseBlockBackground || paintInfo.phase == PaintPhaseChildBlockBackground) {
|
| - RenderTableCell* cell = toRenderTableCell(child);
|
| - cell->paintBackgroundsBehindCell(paintInfo, paintOffset, this);
|
| - }
|
| - if (!toRenderBox(child)->hasSelfPaintingLayer())
|
| - child->paint(paintInfo, paintOffset);
|
| - }
|
| + for (RenderTableCell* cell = firstCell(); cell; cell = cell->nextCell()) {
|
| + // Paint the row background behind the cell.
|
| + if (paintInfo.phase == PaintPhaseBlockBackground || paintInfo.phase == PaintPhaseChildBlockBackground)
|
| + cell->paintBackgroundsBehindCell(paintInfo, paintOffset, this);
|
| + if (!cell->hasSelfPaintingLayer())
|
| + cell->paint(paintInfo, paintOffset);
|
| }
|
| }
|
|
|
|
|