| Index: Source/WebCore/rendering/FixedTableLayout.cpp
|
| ===================================================================
|
| --- Source/WebCore/rendering/FixedTableLayout.cpp (revision 119426)
|
| +++ Source/WebCore/rendering/FixedTableLayout.cpp (working copy)
|
| @@ -143,40 +143,39 @@
|
|
|
| // Iterate over the first row in case some are unspecified.
|
| RenderTableSection* section = m_table->topNonEmptySection();
|
| - if (section) {
|
| - unsigned cCol = 0;
|
| - RenderObject* firstRow = section->firstChild();
|
| - RenderObject* child = firstRow->firstChild();
|
| - while (child) {
|
| - if (child->isTableCell()) {
|
| - RenderTableCell* cell = toRenderTableCell(child);
|
| - if (cell->preferredLogicalWidthsDirty())
|
| - cell->computePreferredLogicalWidths();
|
| + if (!section)
|
| + return usedWidth;
|
|
|
| - Length w = cell->styleOrColLogicalWidth();
|
| - unsigned span = cell->colSpan();
|
| - int effectiveColWidth = 0;
|
| - if (w.isFixed() && w.isPositive()) {
|
| - w.setValue(w.value() + cell->borderAndPaddingLogicalWidth());
|
| - effectiveColWidth = w.value();
|
| - }
|
| -
|
| - unsigned usedSpan = 0;
|
| - unsigned i = 0;
|
| - while (usedSpan < span && cCol + i < nEffCols) {
|
| - float eSpan = m_table->spanOfEffCol(cCol + i);
|
| - // Only set if no col element has already set it.
|
| - if (m_width[cCol + i].isAuto() && w.type() != Auto) {
|
| - m_width[cCol + i] = w;
|
| - m_width[cCol + i] *= eSpan / span;
|
| - usedWidth += effectiveColWidth * eSpan / span;
|
| - }
|
| - usedSpan += eSpan;
|
| - i++;
|
| - }
|
| - cCol += i;
|
| + unsigned currentColumn = 0;
|
| +
|
| + RenderObject* firstRow = section->firstChild();
|
| + for (RenderObject* child = firstRow->firstChild(); child; child = child->nextSibling()) {
|
| + if (!child->isTableCell())
|
| + continue;
|
| +
|
| + RenderTableCell* cell = toRenderTableCell(child);
|
| + if (cell->preferredLogicalWidthsDirty())
|
| + cell->computePreferredLogicalWidths();
|
| +
|
| + Length logicalWidth = cell->styleOrColLogicalWidth();
|
| + unsigned span = cell->colSpan();
|
| + int fixedBorderBoxLogicalWidth = 0;
|
| + if (logicalWidth.isFixed() && logicalWidth.isPositive()) {
|
| + fixedBorderBoxLogicalWidth = cell->computeBorderBoxLogicalWidth(logicalWidth.value());
|
| + logicalWidth.setValue(fixedBorderBoxLogicalWidth);
|
| + }
|
| +
|
| + unsigned usedSpan = 0;
|
| + while (usedSpan < span && currentColumn < nEffCols) {
|
| + float eSpan = m_table->spanOfEffCol(currentColumn);
|
| + // Only set if no col element has already set it.
|
| + if (m_width[currentColumn].isAuto() && logicalWidth.type() != Auto) {
|
| + m_width[currentColumn] = logicalWidth;
|
| + m_width[currentColumn] *= eSpan / span;
|
| + usedWidth += fixedBorderBoxLogicalWidth * eSpan / span;
|
| }
|
| - child = child->nextSibling();
|
| + usedSpan += eSpan;
|
| + ++currentColumn;
|
| }
|
| }
|
|
|
|
|