Chromium Code Reviews| 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 402 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 413 if (cellIsFullyIncludedInOtherCell(cell1, cell2)) | 413 if (cellIsFullyIncludedInOtherCell(cell1, cell2)) |
| 414 return true; | 414 return true; |
| 415 // Sorting lower row index first because first we need to apply the extra he ight of spanning cell which | 415 // Sorting lower row index first because first we need to apply the extra he ight of spanning cell which |
| 416 // comes first in the table so lower rows's position would increment in sequ ence. | 416 // comes first in the table so lower rows's position would increment in sequ ence. |
| 417 if (cellIsFullyIncludedInOtherCell(cell2, cell1)) | 417 if (cellIsFullyIncludedInOtherCell(cell2, cell1)) |
| 418 return (cell1->rowIndex() < cell2->rowIndex()); | 418 return (cell1->rowIndex() < cell2->rowIndex()); |
| 419 | 419 |
| 420 return false; | 420 return false; |
| 421 } | 421 } |
| 422 | 422 |
| 423 bool RenderTableSection::isHeightNeededForRowHavingOnlySpanningCells(unsigned ro w) | |
| 424 { | |
| 425 unsigned totalCols = m_grid[row].row.size(); | |
| 426 | |
| 427 if (!totalCols) | |
| 428 return false; | |
| 429 | |
| 430 for (unsigned col = 0; col < totalCols; col++) { | |
| 431 const CellStruct& rowSpanCell = cellAt(row, col); | |
| 432 | |
| 433 if (rowSpanCell.cells.size()) { | |
| 434 RenderTableCell* cell = rowSpanCell.cells[0]; | |
| 435 const unsigned rowIndex = cell->rowIndex(); | |
| 436 const unsigned rowSpan = cell->rowSpan(); | |
| 437 unsigned totalRowSpanCellHeight = 0; | |
| 438 | |
| 439 for (unsigned row = 0; row < rowSpan; row++) { | |
| 440 unsigned actualRow = row + rowIndex; | |
| 441 totalRowSpanCellHeight += m_rowPos[actualRow + 1] - m_rowPos[act ualRow]; | |
| 442 } | |
| 443 totalRowSpanCellHeight -= borderSpacingForRow(rowIndex + rowSpan - 1 ); | |
| 444 | |
| 445 if (totalRowSpanCellHeight < cell->logicalHeightForRowSizing()) | |
| 446 return true; | |
| 447 } | |
| 448 } | |
| 449 | |
| 450 return false; | |
| 451 } | |
|
Julien - ping for review
2013/09/20 18:34:53
This really looks like it should be folded into ro
| |
| 452 | |
| 423 unsigned RenderTableSection::calcRowHeightHavingOnlySpanningCells(unsigned row) | 453 unsigned RenderTableSection::calcRowHeightHavingOnlySpanningCells(unsigned row) |
| 424 { | 454 { |
| 425 ASSERT(rowHasOnlySpanningCells(row)); | 455 ASSERT(rowHasOnlySpanningCells(row)); |
| 426 | 456 |
| 427 unsigned totalCols = m_grid[row].row.size(); | 457 unsigned totalCols = m_grid[row].row.size(); |
| 428 | 458 |
| 429 if (!totalCols) | 459 if (!totalCols) |
| 430 return 0; | 460 return 0; |
| 431 | 461 |
| 432 unsigned rowHeight = 0; | 462 unsigned rowHeight = 0; |
| (...skipping 12 matching lines...) Expand all Loading... | |
| 445 ASSERT(spanningRowsHeight.rowHeight.size()); | 475 ASSERT(spanningRowsHeight.rowHeight.size()); |
| 446 | 476 |
| 447 int accumulatedPositionIncrease = 0; | 477 int accumulatedPositionIncrease = 0; |
| 448 const unsigned rowSpan = cell->rowSpan(); | 478 const unsigned rowSpan = cell->rowSpan(); |
| 449 const unsigned rowIndex = cell->rowIndex(); | 479 const unsigned rowIndex = cell->rowIndex(); |
| 450 | 480 |
| 451 ASSERT(rowSpan == spanningRowsHeight.rowHeight.size()); | 481 ASSERT(rowSpan == spanningRowsHeight.rowHeight.size()); |
| 452 | 482 |
| 453 for (unsigned row = 0; row < spanningRowsHeight.rowHeight.size(); row++) { | 483 for (unsigned row = 0; row < spanningRowsHeight.rowHeight.size(); row++) { |
| 454 unsigned actualRow = row + rowIndex; | 484 unsigned actualRow = row + rowIndex; |
| 455 if (!spanningRowsHeight.rowHeight[row] && rowHasOnlySpanningCells(actual Row)) { | 485 if (!spanningRowsHeight.rowHeight[row] && rowHasOnlySpanningCells(actual Row) && isHeightNeededForRowHavingOnlySpanningCells(actualRow)) { |
|
Julien - ping for review
2013/09/20 18:34:53
Is the !spanningRowsHeight.rowHeight[row] still ne
suchit.agrawal
2013/09/20 22:12:00
Yes !spanningRowsHeight.rowHeight[row] is needed b
| |
| 456 spanningRowsHeight.rowHeight[row] = calcRowHeightHavingOnlySpanningC ells(actualRow); | 486 spanningRowsHeight.rowHeight[row] = calcRowHeightHavingOnlySpanningC ells(actualRow); |
| 457 accumulatedPositionIncrease += spanningRowsHeight.rowHeight[row]; | 487 accumulatedPositionIncrease += spanningRowsHeight.rowHeight[row]; |
| 458 } | 488 } |
| 459 m_rowPos[actualRow + 1] += accumulatedPositionIncrease; | 489 m_rowPos[actualRow + 1] += accumulatedPositionIncrease; |
| 460 } | 490 } |
| 461 | 491 |
| 462 spanningRowsHeight.totalRowsHeight += accumulatedPositionIncrease; | 492 spanningRowsHeight.totalRowsHeight += accumulatedPositionIncrease; |
| 463 } | 493 } |
| 464 | 494 |
| 465 // Distribute rowSpan cell height in rows those comes in rowSpan cell based on t he ratio of row's height if | 495 // Distribute rowSpan cell height in rows those comes in rowSpan cell based on t he ratio of row's height if |
| (...skipping 1313 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1779 if (!style()->isLeftToRightDirection()) | 1809 if (!style()->isLeftToRightDirection()) |
| 1780 cellLocation.setX(table()->columnPositions()[table()->numEffCols()] - ta ble()->columnPositions()[table()->colToEffCol(cell->col() + cell->colSpan())] + horizontalBorderSpacing); | 1810 cellLocation.setX(table()->columnPositions()[table()->numEffCols()] - ta ble()->columnPositions()[table()->colToEffCol(cell->col() + cell->colSpan())] + horizontalBorderSpacing); |
| 1781 else | 1811 else |
| 1782 cellLocation.setX(table()->columnPositions()[effectiveColumn] + horizont alBorderSpacing); | 1812 cellLocation.setX(table()->columnPositions()[effectiveColumn] + horizont alBorderSpacing); |
| 1783 | 1813 |
| 1784 cell->setLogicalLocation(cellLocation); | 1814 cell->setLogicalLocation(cellLocation); |
| 1785 view()->addLayoutDelta(oldCellLocation - cell->location()); | 1815 view()->addLayoutDelta(oldCellLocation - cell->location()); |
| 1786 } | 1816 } |
| 1787 | 1817 |
| 1788 } // namespace WebCore | 1818 } // namespace WebCore |
| OLD | NEW |