OLD | NEW |
---|---|
1 /* | 1 /* |
2 * Copyright (C) 1997 Martin Jones (mjones@kde.org) | 2 * Copyright (C) 1997 Martin Jones (mjones@kde.org) |
3 * (C) 1997 Torben Weis (weis@kde.org) | 3 * (C) 1997 Torben Weis (weis@kde.org) |
4 * (C) 1998 Waldo Bastian (bastian@kde.org) | 4 * (C) 1998 Waldo Bastian (bastian@kde.org) |
5 * (C) 1999 Lars Knoll (knoll@kde.org) | 5 * (C) 1999 Lars Knoll (knoll@kde.org) |
6 * (C) 1999 Antti Koivisto (koivisto@kde.org) | 6 * (C) 1999 Antti Koivisto (koivisto@kde.org) |
7 * Copyright (C) 2003, 2004, 2005, 2006, 2008, 2009, 2010 Apple Inc. All rights reserved. | 7 * Copyright (C) 2003, 2004, 2005, 2006, 2008, 2009, 2010 Apple Inc. All rights reserved. |
8 * Copyright (C) 2006 Alexey Proskuryakov (ap@nypop.com) | 8 * Copyright (C) 2006 Alexey Proskuryakov (ap@nypop.com) |
9 * | 9 * |
10 * This library is free software; you can redistribute it and/or | 10 * This library is free software; you can redistribute it and/or |
(...skipping 1469 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1480 | 1480 |
1481 void RenderTableSection::imageChanged(WrappedImagePtr, const IntRect*) | 1481 void RenderTableSection::imageChanged(WrappedImagePtr, const IntRect*) |
1482 { | 1482 { |
1483 // FIXME: Examine cells and repaint only the rect the image paints in. | 1483 // FIXME: Examine cells and repaint only the rect the image paints in. |
1484 repaint(); | 1484 repaint(); |
1485 } | 1485 } |
1486 | 1486 |
1487 void RenderTableSection::recalcCells() | 1487 void RenderTableSection::recalcCells() |
1488 { | 1488 { |
1489 ASSERT(m_needsCellRecalc); | 1489 ASSERT(m_needsCellRecalc); |
1490 // We reset the flag here to ensure that |addCell| works. This is safe to do as | 1490 // We reset the flag here to ensure that addCell() works. This is safe to do because we clear the grid |
1491 // fillRowsWithDefaultStartingAtPosition makes sure we match the table's col umns | 1491 // and update its dimensions to be consistent with the table's column repres entation before we rebuild |
1492 // representation. | 1492 // the grid using addCell(). |
1493 m_needsCellRecalc = false; | 1493 m_needsCellRecalc = false; |
1494 | 1494 |
1495 m_cCol = 0; | 1495 m_cCol = 0; |
1496 m_cRow = 0; | 1496 m_cRow = 0; |
1497 m_grid.clear(); | 1497 m_grid.clear(); |
1498 | 1498 |
1499 for (RenderObject* row = firstChild(); row; row = row->nextSibling()) { | 1499 for (RenderObject* row = firstChild(); row; row = row->nextSibling()) { |
1500 if (row->isTableRow()) { | 1500 if (row->isTableRow()) { |
1501 unsigned insertionRow = m_cRow; | 1501 unsigned insertionRow = m_cRow; |
1502 m_cRow++; | 1502 m_cRow++; |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1534 if (!cell->isTableCell()) | 1534 if (!cell->isTableCell()) |
1535 continue; | 1535 continue; |
1536 | 1536 |
1537 updateLogicalHeightForCell(m_grid[rowIndex], toRenderTableCell(cell)); | 1537 updateLogicalHeightForCell(m_grid[rowIndex], toRenderTableCell(cell)); |
1538 } | 1538 } |
1539 } | 1539 } |
1540 | 1540 |
1541 void RenderTableSection::setNeedsCellRecalc() | 1541 void RenderTableSection::setNeedsCellRecalc() |
1542 { | 1542 { |
1543 m_needsCellRecalc = true; | 1543 m_needsCellRecalc = true; |
1544 | |
1545 // Clear the grid now to ensure that we don't hold onto any stale pointers ( e.g. a cell renderer that is being removed). | |
1546 m_grid.clear(); | |
Julien - ping for review
2014/03/29 01:04:21
As stated in codereview.chromium.org/208263012 (ba
| |
1547 | |
1544 if (RenderTable* t = table()) | 1548 if (RenderTable* t = table()) |
1545 t->setNeedsSectionRecalc(); | 1549 t->setNeedsSectionRecalc(); |
1546 } | 1550 } |
1547 | 1551 |
1548 unsigned RenderTableSection::numColumns() const | 1552 unsigned RenderTableSection::numColumns() const |
1549 { | 1553 { |
1554 ASSERT(!m_needsCellRecalc); | |
1550 unsigned result = 0; | 1555 unsigned result = 0; |
1551 | 1556 |
1552 for (unsigned r = 0; r < m_grid.size(); ++r) { | 1557 for (unsigned r = 0; r < m_grid.size(); ++r) { |
1553 for (unsigned c = result; c < table()->numEffCols(); ++c) { | 1558 for (unsigned c = result; c < table()->numEffCols(); ++c) { |
1554 const CellStruct& cell = cellAt(r, c); | 1559 const CellStruct& cell = cellAt(r, c); |
1555 if (cell.hasCells() || cell.inColSpan) | 1560 if (cell.hasCells() || cell.inColSpan) |
1556 result = c; | 1561 result = c; |
1557 } | 1562 } |
1558 } | 1563 } |
1559 | 1564 |
(...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1730 else | 1735 else |
1731 cellLocation.setX(table()->columnPositions()[effectiveColumn] + horizont alBorderSpacing); | 1736 cellLocation.setX(table()->columnPositions()[effectiveColumn] + horizont alBorderSpacing); |
1732 | 1737 |
1733 cell->setLogicalLocation(cellLocation); | 1738 cell->setLogicalLocation(cellLocation); |
1734 | 1739 |
1735 if (!RuntimeEnabledFeatures::repaintAfterLayoutEnabled()) | 1740 if (!RuntimeEnabledFeatures::repaintAfterLayoutEnabled()) |
1736 view()->addLayoutDelta(oldCellLocation - cell->location()); | 1741 view()->addLayoutDelta(oldCellLocation - cell->location()); |
1737 } | 1742 } |
1738 | 1743 |
1739 } // namespace WebCore | 1744 } // namespace WebCore |
OLD | NEW |