Chromium Code Reviews| Index: third_party/WebKit/Source/core/layout/TableLayoutAlgorithmAuto.cpp |
| diff --git a/third_party/WebKit/Source/core/layout/TableLayoutAlgorithmAuto.cpp b/third_party/WebKit/Source/core/layout/TableLayoutAlgorithmAuto.cpp |
| index 89b484294354cc5ae20a261f28824c67bdab990e..a03ee32182b041f39e86b63d45338a2f32b843df 100644 |
| --- a/third_party/WebKit/Source/core/layout/TableLayoutAlgorithmAuto.cpp |
| +++ b/third_party/WebKit/Source/core/layout/TableLayoutAlgorithmAuto.cpp |
| @@ -46,9 +46,10 @@ void TableLayoutAlgorithmAuto::recalcColumn(unsigned effCol) { |
| for (LayoutObject* child = m_table->children()->firstChild(); child; |
| child = child->nextSibling()) { |
| if (child->isLayoutTableCol()) { |
| - // LayoutTableCols don't have the concept of preferred logical width, but we need to clear their dirty bits |
| - // so that if we call setPreferredWidthsDirty(true) on a col or one of its descendants, we'll mark it's |
| - // ancestors as dirty. |
| + // LayoutTableCols don't have the concept of preferred logical width, but |
| + // we need to clear their dirty bits so that if we call |
| + // setPreferredWidthsDirty(true) on a col or one of its descendants, we'll |
| + // mark it's ancestors as dirty. |
| toLayoutTableCol(child)->clearPreferredLogicalWidthsDirtyBits(); |
| } else if (child->isTableSection()) { |
| LayoutTableSection* section = toLayoutTableSection(child); |
| @@ -75,11 +76,13 @@ void TableLayoutAlgorithmAuto::recalcColumn(unsigned effCol) { |
| } |
| // All browsers implement a size limit on the cell's max width. |
| - // Our limit is based on KHTML's representation that used 16 bits widths. |
| + // Our limit is based on KHTML's representation that used 16 bits |
| + // widths. |
| // FIXME: Other browsers have a lower limit for the cell's max width. |
| const int cCellMaxWidth = 32760; |
| Length cellLogicalWidth = cell->styleOrColLogicalWidth(); |
| - // FIXME: calc() on tables should be handled consistently with other lengths. See bug: https://crbug.com/382725 |
| + // FIXME: calc() on tables should be handled consistently with other |
| + // lengths. See bug: https://crbug.com/382725 |
| if (cellLogicalWidth.isCalculated()) |
| cellLogicalWidth = Length(); // Make it Auto |
| if (cellLogicalWidth.value() > cCellMaxWidth) |
| @@ -122,12 +125,14 @@ void TableLayoutAlgorithmAuto::recalcColumn(unsigned effCol) { |
| break; |
| } |
| } else if (!effCol || section->primaryCellAt(i, effCol - 1) != cell) { |
| - // If a cell originates in this spanning column ensure we have a min/max width of at least 1px for it. |
| + // If a cell originates in this spanning column ensure we have a |
| + // min/max width of at least 1px for it. |
| columnLayout.minLogicalWidth = |
| std::max<int>(columnLayout.minLogicalWidth, |
| cell->maxPreferredLogicalWidth() ? 1 : 0); |
| - // This spanning cell originates in this column. Insert the cell into spanning cells list. |
| + // This spanning cell originates in this column. Insert the cell into |
| + // spanning cells list. |
| insertSpanCell(cell); |
| } |
| } |
| @@ -165,7 +170,8 @@ void TableLayoutAlgorithmAuto::fullRecalc() { |
| groupLogicalWidth = column->style()->logicalWidth(); |
| } else { |
| Length colLogicalWidth = column->style()->logicalWidth(); |
| - // FIXME: calc() on tables should be handled consistently with other lengths. See bug: https://crbug.com/382725 |
| + // FIXME: calc() on tables should be handled consistently with other |
| + // lengths. See bug: https://crbug.com/382725 |
| if (colLogicalWidth.isCalculated() || colLogicalWidth.isAuto()) |
| colLogicalWidth = groupLogicalWidth; |
| // TODO(alancutter): Make this work correctly for calc lengths. |
| @@ -184,7 +190,8 @@ void TableLayoutAlgorithmAuto::fullRecalc() { |
| currentColumn += span; |
| } |
| - // For the last column in a column-group, we invalidate our group logical width. |
| + // For the last column in a column-group, we invalidate our group logical |
| + // width. |
| if (column->isTableColumn() && !column->nextSibling()) |
| groupLogicalWidth = Length(); |
| } |
| @@ -210,7 +217,8 @@ static bool shouldScaleColumnsForParent(LayoutTable* table) { |
| static bool shouldScaleColumnsForSelf(LayoutTable* table) { |
| // Normally, scale all columns to satisfy this from CSS2.2: |
| // "A percentage value for a column width is relative to the table width. |
| - // If the table has 'width: auto', a percentage represents a constraint on the column's width" |
| + // If the table has 'width: auto', a percentage represents a constraint on the |
| + // column's width" |
| // A special case. If this table is not fixed width and contained inside |
| // a cell, then don't bloat the maxwidth by examining percentage growth. |
| @@ -253,7 +261,8 @@ void TableLayoutAlgorithmAuto::computeIntrinsicLogicalWidths( |
| float maxNonPercent = 0; |
| bool scaleColumnsForSelf = shouldScaleColumnsForSelf(m_table); |
| - // We substitute 0 percent by (epsilon / percentScaleFactor) percent in two places below to avoid division by zero. |
| + // We substitute 0 percent by (epsilon / percentScaleFactor) percent in two |
| + // places below to avoid division by zero. |
| // FIXME: Handle the 0% cases properly. |
| const float epsilon = 1 / 128.0f; |
| @@ -298,8 +307,8 @@ void TableLayoutAlgorithmAuto::applyPreferredLogicalWidthQuirks( |
| LayoutUnit& maxWidth) const { |
| Length tableLogicalWidth = m_table->style()->logicalWidth(); |
| if (tableLogicalWidth.isFixed() && tableLogicalWidth.isPositive()) { |
| - // |minWidth| is the result of measuring the intrinsic content's size. Keep it to |
| - // make sure we are *never* smaller than the actual content. |
| + // |minWidth| is the result of measuring the intrinsic content's size. Keep |
| + // it to make sure we are *never* smaller than the actual content. |
| LayoutUnit minContentWidth = minWidth; |
| // FIXME: This line looks REALLY suspicious as it could allow the minimum |
| // preferred logical width to be smaller than the table content. This has |
| @@ -319,7 +328,8 @@ void TableLayoutAlgorithmAuto::applyPreferredLogicalWidthQuirks( |
| /* |
| This method takes care of colspans. |
| - effWidth is the same as width for cells without colspans. If we have colspans, they get modified. |
| + effWidth is the same as width for cells without colspans. If we have colspans, |
| + they get modified. |
|
dcheng
2016/10/07 20:42:01
A wild C-style comment!
|
| */ |
| int TableLayoutAlgorithmAuto::calcEffectiveLogicalWidth() { |
| int maxLogicalWidth = 0; |
| @@ -343,7 +353,8 @@ int TableLayoutAlgorithmAuto::calcEffectiveLogicalWidth() { |
| unsigned span = cell->colSpan(); |
| Length cellLogicalWidth = cell->styleOrColLogicalWidth(); |
| - // FIXME: calc() on tables should be handled consistently with other lengths. See bug: https://crbug.com/382725 |
| + // FIXME: calc() on tables should be handled consistently with other |
| + // lengths. See bug: https://crbug.com/382725 |
| if (cellLogicalWidth.isZero() || cellLogicalWidth.isCalculated()) |
| cellLogicalWidth = Length(); // Make it Auto |
| @@ -373,8 +384,9 @@ int TableLayoutAlgorithmAuto::calcEffectiveLogicalWidth() { |
| if (columnLayout.logicalWidth.value() > 0) { |
| fixedWidth += columnLayout.logicalWidth.value(); |
| allColsArePercent = false; |
| - // IE resets effWidth to Auto here, but this breaks the konqueror about page and seems to be some bad |
| - // legacy behaviour anyway. mozilla doesn't do this so I decided we don't neither. |
| + // IE resets effWidth to Auto here, but this breaks the konqueror |
| + // about page and seems to be some bad legacy behaviour anyway. |
| + // mozilla doesn't do this so I decided we don't neither. |
| break; |
| } |
| // fall through |
| @@ -382,8 +394,8 @@ int TableLayoutAlgorithmAuto::calcEffectiveLogicalWidth() { |
| haveAuto = true; |
| // fall through |
| default: |
| - // If the column is a percentage width, do not let the spanning cell overwrite the |
| - // width value. This caused a mis-layout on amazon.com. |
| + // If the column is a percentage width, do not let the spanning cell |
| + // overwrite the width value. This caused a mis-layout on amazon.com. |
| // Sample snippet: |
| // <table border=2 width=100%>< |
| // <tr><td>1</td><td colspan=2>2-3</tr> |
| @@ -420,7 +432,8 @@ int TableLayoutAlgorithmAuto::calcEffectiveLogicalWidth() { |
| std::max(spanMaxLogicalWidth, cellMaxLogicalWidth) * |
| 100 / cellLogicalWidth.percent())); |
| - // all non percent columns in the span get percent values to sum up correctly. |
| + // all non percent columns in the span get percent values to sum up |
| + // correctly. |
| float percentMissing = cellLogicalWidth.percent() - totalPercent; |
| int totalWidth = 0; |
| for (unsigned pos = effCol; pos < lastCol; ++pos) { |
| @@ -460,14 +473,16 @@ int TableLayoutAlgorithmAuto::calcEffectiveLogicalWidth() { |
| m_layoutStruct[pos].effectiveMinLogicalWidth = cellLogicalWidth; |
| } |
| } else if (allColsArePercent) { |
| - // In this case, we just split the colspan's min amd max widths following the percentage. |
| + // In this case, we just split the colspan's min amd max widths |
| + // following the percentage. |
| int allocatedMinLogicalWidth = 0; |
| int allocatedMaxLogicalWidth = 0; |
| for (unsigned pos = effCol; pos < lastCol; ++pos) { |
| // TODO(alancutter): Make this work correctly for calc lengths. |
| DCHECK(m_layoutStruct[pos].logicalWidth.isPercentOrCalc() || |
| m_layoutStruct[pos].effectiveLogicalWidth.isPercentOrCalc()); |
| - // |allColsArePercent| means that either the logicalWidth *or* the effectiveLogicalWidth are percents, handle both of them here. |
| + // |allColsArePercent| means that either the logicalWidth *or* the |
| + // effectiveLogicalWidth are percents, handle both of them here. |
| float percent = |
| m_layoutStruct[pos].logicalWidth.isPercentOrCalc() |
| ? m_layoutStruct[pos].logicalWidth.percent() |
| @@ -590,7 +605,8 @@ void TableLayoutAlgorithmAuto::insertSpanCell(LayoutTableCell* cell) { |
| size += 10; |
| } |
| - // add them in sort. This is a slow algorithm, and a binary search or a fast sorting after collection would be better |
| + // Add them in sort. This is a slow algorithm, and a binary search or a fast |
| + // sorting after collection would be better. |
| unsigned pos = 0; |
| unsigned span = cell->colSpan(); |
| while (pos < m_spanCells.size() && m_spanCells[pos] && |
| @@ -609,11 +625,13 @@ void TableLayoutAlgorithmAuto::layout() { |
| int available = tableLogicalWidth; |
| size_t nEffCols = m_table->numEffectiveColumns(); |
| - // FIXME: It is possible to be called without having properly updated our internal representation. |
| - // This means that our preferred logical widths were not recomputed as expected. |
| + // FIXME: It is possible to be called without having properly updated our |
| + // internal representation. This means that our preferred logical widths were |
|
dcheng
2016/10/07 20:42:01
I don't feel that strongly about this (but it is i
|
| + // not recomputed as expected. |
| if (nEffCols != m_layoutStruct.size()) { |
| fullRecalc(); |
| - // FIXME: Table layout shouldn't modify our table structure (but does due to columns and column-groups). |
| + // FIXME: Table layout shouldn't modify our table structure (but does due to |
| + // columns and column-groups). |
| nEffCols = m_table->numEffectiveColumns(); |
| } |
| @@ -681,7 +699,8 @@ void TableLayoutAlgorithmAuto::layout() { |
| if (m_layoutStruct[i].effectiveLogicalWidth.isPercentOrCalc()) { |
| int cellLogicalWidth = m_layoutStruct[i].computedLogicalWidth; |
| int reduction = std::min(cellLogicalWidth, excess); |
| - // the lines below might look inconsistent, but that's the way it's handled in mozilla |
| + // The lines below might look inconsistent, but that's the way it's |
| + // handled in mozilla. |
| excess -= reduction; |
| int newLogicalWidth = |
| std::max<int>(m_layoutStruct[i].effectiveMinLogicalWidth, |
| @@ -706,7 +725,8 @@ void TableLayoutAlgorithmAuto::layout() { |
| } |
| } |
| - // Give each auto width column its share of the available width, non-empty columns then empty columns. |
| + // Give each auto width column its share of the available width, non-empty |
| + // columns then empty columns. |
| if (available > 0 && (numAuto || numAutoEmptyCellsOnly)) { |
| available += allocAuto; |
| if (numAuto) |
| @@ -717,7 +737,8 @@ void TableLayoutAlgorithmAuto::layout() { |
| StartToEnd>(available, numAutoEmptyCellsOnly); |
| } |
| - // Any remaining available width expands fixed width, percent width, and non-empty auto width columns, in that order. |
| + // Any remaining available width expands fixed width, percent width, and |
| + // non-empty auto width columns, in that order. |
| if (available > 0 && numFixed) |
| distributeWidthToColumns<float, Fixed, AllCells, ExtraWidth, StartToEnd>( |
| available, totalFixed); |
| @@ -728,14 +749,16 @@ void TableLayoutAlgorithmAuto::layout() { |
| if (available > 0 && nEffCols > numAutoEmptyCellsOnly) { |
| unsigned total = nEffCols - numAutoEmptyCellsOnly; |
| - // Starting from the last cell is for compatibility with FF/IE - it isn't specified anywhere. |
| + // Starting from the last cell is for compatibility with FF/IE - it isn't |
| + // specified anywhere. |
| distributeWidthToColumns<unsigned, Auto, NonEmptyCells, LeftoverWidth, |
| EndToStart>(available, total); |
| } |
| - // If we have overallocated, reduce every cell according to the difference between desired width and minwidth |
| - // this seems to produce to the pixel exact results with IE. Wonder is some of this also holds for width distributing. |
| - // This is basically the reverse of how we grew the cells. |
| + // If we have overallocated, reduce every cell according to the difference |
| + // between desired width and minwidth. This seems to produce to the pixel |
| + // exact results with IE. Wonder is some of this also holds for width |
| + // distributing. This is basically the reverse of how we grew the cells. |
| if (available < 0) |
| shrinkColumnWidth(Auto, available); |
| if (available < 0) |