Index: Source/core/rendering/RenderTableSection.cpp |
diff --git a/Source/core/rendering/RenderTableSection.cpp b/Source/core/rendering/RenderTableSection.cpp |
index a9d026ae2c83c043f92aba7ae1240e7d0968b347..d0a084548b88747e373da801b6e489cc70f29e3e 100644 |
--- a/Source/core/rendering/RenderTableSection.cpp |
+++ b/Source/core/rendering/RenderTableSection.cpp |
@@ -4,7 +4,7 @@ |
* (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, 2008, 2009, 2010 Apple Inc. All rights reserved. |
+ * Copyright (C) 2003, 2004, 2005, 2006, 2008, 2009, 2010, 2013 Apple Inc. All rights reserved. |
* Copyright (C) 2006 Alexey Proskuryakov (ap@nypop.com) |
* |
* This library is free software; you can redistribute it and/or |
@@ -124,7 +124,7 @@ void RenderTableSection::addChild(RenderObject* child, RenderObject* beforeChild |
if (!child->isTableRow()) { |
RenderObject* last = beforeChild; |
if (!last) |
- last = lastChild(); |
+ last = lastRow(); |
if (last && last->isAnonymous() && !last->isBeforeOrAfterContent()) { |
if (beforeChild == last) |
beforeChild = last->slowFirstChild(); |
@@ -1084,7 +1084,7 @@ int RenderTableSection::calcBlockDirectionOuterBorder(BlockBorderSide side) cons |
if (sb.style() > BHIDDEN) |
borderWidth = sb.width(); |
- const BorderValue& rb = side == BorderBefore ? firstChild()->style()->borderBefore() : lastChild()->style()->borderAfter(); |
+ const BorderValue& rb = side == BorderBefore ? firstRow()->style()->borderBefore() : lastRow()->style()->borderAfter(); |
if (rb.style() == BHIDDEN) |
return -1; |
if (rb.style() > BHIDDEN && rb.width() > borderWidth) |
@@ -1497,26 +1497,18 @@ void RenderTableSection::recalcCells() |
m_cRow = 0; |
m_grid.clear(); |
- for (RenderObject* row = firstChild(); row; row = row->nextSibling()) { |
- if (row->isTableRow()) { |
- unsigned insertionRow = m_cRow; |
- m_cRow++; |
- m_cCol = 0; |
- ensureRows(m_cRow); |
+ for (RenderTableRow* row = firstRow(); row; row = row->nextRow()) { |
+ unsigned insertionRow = m_cRow; |
+ ++m_cRow; |
+ m_cCol = 0; |
+ ensureRows(m_cRow); |
- RenderTableRow* tableRow = toRenderTableRow(row); |
- m_grid[insertionRow].rowRenderer = tableRow; |
- tableRow->setRowIndex(insertionRow); |
- setRowLogicalHeightToRowStyleLogicalHeight(m_grid[insertionRow]); |
- |
- for (RenderObject* cell = tableRow->firstChild(); cell; cell = cell->nextSibling()) { |
- if (!cell->isTableCell()) |
- continue; |
+ m_grid[insertionRow].rowRenderer = row; |
+ row->setRowIndex(insertionRow); |
+ setRowLogicalHeightToRowStyleLogicalHeight(m_grid[insertionRow]); |
- RenderTableCell* tableCell = toRenderTableCell(cell); |
- addCell(tableCell, tableRow); |
- } |
- } |
+ for (RenderTableCell* cell = row->firstCell(); cell; cell = cell->nextCell()) |
+ addCell(cell, row); |
} |
m_grid.shrinkToFit(); |
@@ -1531,12 +1523,8 @@ void RenderTableSection::rowLogicalHeightChanged(unsigned rowIndex) |
setRowLogicalHeightToRowStyleLogicalHeight(m_grid[rowIndex]); |
- for (RenderObject* cell = m_grid[rowIndex].rowRenderer->firstChild(); cell; cell = cell->nextSibling()) { |
- if (!cell->isTableCell()) |
- continue; |
- |
- updateLogicalHeightForCell(m_grid[rowIndex], toRenderTableCell(cell)); |
- } |
+ for (RenderTableCell* cell = m_grid[rowIndex].rowRenderer->firstCell(); cell; cell = cell->nextCell()) |
+ updateLogicalHeightForCell(m_grid[rowIndex], cell); |
} |
void RenderTableSection::setNeedsCellRecalc() |
@@ -1622,7 +1610,7 @@ void RenderTableSection::splitColumn(unsigned pos, unsigned first) |
bool RenderTableSection::nodeAtPoint(const HitTestRequest& request, HitTestResult& result, const HitTestLocation& locationInContainer, const LayoutPoint& accumulatedOffset, HitTestAction action) |
{ |
// If we have no children then we have nothing to do. |
- if (!firstChild()) |
+ if (!firstRow()) |
return false; |
// Table sections cannot ever be hit tested. Effectively they do not exist. |
@@ -1633,14 +1621,14 @@ bool RenderTableSection::nodeAtPoint(const HitTestRequest& request, HitTestResul |
return false; |
if (hasOverflowingCell()) { |
- for (RenderObject* child = lastChild(); child; child = child->previousSibling()) { |
+ for (RenderTableRow* row = lastRow(); row; row = row->previousRow()) { |
// 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->isBox() && !toRenderBox(child)->hasSelfPaintingLayer()) { |
- LayoutPoint childPoint = flipForWritingModeForChild(toRenderBox(child), adjustedLocation); |
- if (child->nodeAtPoint(request, result, locationInContainer, childPoint, action)) { |
+ if (!row->hasSelfPaintingLayer()) { |
+ LayoutPoint childPoint = flipForWritingModeForChild(row, adjustedLocation); |
+ if (row->nodeAtPoint(request, result, locationInContainer, childPoint, action)) { |
updateHitTestResult(result, toLayoutPoint(locationInContainer.point() - childPoint)); |
return true; |
} |