Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(531)

Unified Diff: third_party/WebKit/Source/core/layout/LayoutTableSection.cpp

Issue 2884573002: Replace LayoutTableCell::AbsoluteColumnIndex() with EffectiveColumnIndex()
Patch Set: - Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/core/layout/LayoutTableSection.cpp
diff --git a/third_party/WebKit/Source/core/layout/LayoutTableSection.cpp b/third_party/WebKit/Source/core/layout/LayoutTableSection.cpp
index 43fff52a63b93dc5e06f2071b587ca7f74a90c3b..563e000ae63a6b2ef4db56af8d25e56e3f75e585 100644
--- a/third_party/WebKit/Source/core/layout/LayoutTableSection.cpp
+++ b/third_party/WebKit/Source/core/layout/LayoutTableSection.cpp
@@ -252,7 +252,7 @@ void LayoutTableSection::AddCell(LayoutTableCell* cell, LayoutTableRow* row) {
// <TR><TD>1 <TD rowspan="2">2 <TD>3 <TD>4
// <TR><TD colspan="2">5
// </TABLE>
- unsigned n_cols = NumCols(insertion_row);
+ unsigned n_cols = NumEffectiveColumns(insertion_row);
while (c_col_ < n_cols && (GridCellAt(insertion_row, c_col_).HasCells() ||
GridCellAt(insertion_row, c_col_).InColSpan()))
c_col_++;
@@ -1141,7 +1141,7 @@ void LayoutTableSection::LayoutRows() {
for (unsigned r = 0; r < total_rows; r++) {
LayoutTableRow* row = grid_[r].row;
- unsigned n_cols = NumCols(r);
+ unsigned n_cols = NumEffectiveColumns(r);
for (unsigned c = 0; c < n_cols; c++) {
LayoutTableCell* cell = OriginatingCellAt(r, c);
if (!cell)
@@ -1315,7 +1315,7 @@ bool LayoutTableSection::RecalcChildOverflowAfterStyleChange() {
continue;
row_layouter->ClearChildNeedsOverflowRecalcAfterStyleChange();
bool row_children_overflow_changed = false;
- unsigned n_cols = NumCols(r);
+ unsigned n_cols = NumEffectiveColumns(r);
for (unsigned c = 0; c < n_cols; c++) {
auto* cell = OriginatingCellAt(r, c);
if (!cell || !cell->NeedsOverflowRecalcAfterStyleChange())
@@ -1345,6 +1345,13 @@ void LayoutTableSection::MarkAllCellsWidthsDirtyAndOrNeedsLayout(
int LayoutTableSection::CalcBlockDirectionOuterBorder(
BlockBorderSide side) const {
+ // TODO(wangxianzhu): There are several issues in this function:
+ // 1. Row borders are not respected;
+ // 2. Column borders should be ignored if this section is not at the top or
+ // the bottom.
+ // 3. It's unnecessarily complex.
+ // I think we should just use cell's calculated collapsed border values to
+ // avoid all of the problems.
if (!grid_.size() || !Table()->NumEffectiveColumns())
return 0;
@@ -1367,7 +1374,7 @@ int LayoutTableSection::CalcBlockDirectionOuterBorder(
bool all_hidden = true;
unsigned r = side == kBorderBefore ? 0 : grid_.size() - 1;
- unsigned n_cols = NumCols(r);
+ unsigned n_cols = NumEffectiveColumns(r);
for (unsigned c = 0; c < n_cols; c++) {
const auto& grid_cell = GridCellAt(r, c);
if (grid_cell.InColSpan() || !grid_cell.HasCells())
@@ -1380,7 +1387,7 @@ int LayoutTableSection::CalcBlockDirectionOuterBorder(
: primary_cell_style.BorderAfter();
// FIXME: Don't repeat for the same col group
LayoutTableCol* col =
- Table()->ColElementAtAbsoluteColumn(c).InnermostColOrColGroup();
+ Table()->ColAndColGroupAtEffectiveColumn(c).InnermostColOrColGroup();
if (col) {
const BorderValue& gb = side == kBorderBefore
? col->Style()->BorderBefore()
@@ -1426,7 +1433,7 @@ int LayoutTableSection::CalcInlineDirectionOuterBorder(
border_width = sb.Width();
if (LayoutTableCol* col = Table()
- ->ColElementAtAbsoluteColumn(col_index)
+ ->ColAndColGroupAtEffectiveColumn(col_index)
.InnermostColOrColGroup()) {
const BorderValue& gb = side == kBorderStart ? col->Style()->BorderStart()
: col->Style()->BorderEnd();
@@ -1438,7 +1445,7 @@ int LayoutTableSection::CalcInlineDirectionOuterBorder(
bool all_hidden = true;
for (unsigned r = 0; r < grid_.size(); r++) {
- if (col_index >= NumCols(r))
+ if (col_index >= NumEffectiveColumns(r))
continue;
const auto& grid_cell = GridCellAt(r, col_index);
if (!grid_cell.HasCells())
@@ -1563,7 +1570,7 @@ void LayoutTableSection::DirtiedRowsAndEffectiveColumns(
if (rows.Start() > 0 && rows.Start() < grid_.size()) {
// If there are any cells spanning into the first row, expand |rows| to
// cover the cells.
- unsigned n_cols = NumCols(rows.Start());
+ unsigned n_cols = NumEffectiveColumns(rows.Start());
unsigned smallest_row = rows.Start();
for (unsigned c = columns.Start(); c < std::min(columns.End(), n_cols);
++c) {
@@ -1706,11 +1713,11 @@ void LayoutTableSection::SetNeedsCellRecalc() {
t->SetNeedsSectionRecalc();
}
-unsigned LayoutTableSection::NumEffectiveColumns() const {
+unsigned LayoutTableSection::MaxNumEffectiveColumnsOfRows() const {
unsigned result = 0;
for (unsigned r = 0; r < grid_.size(); ++r) {
- unsigned n_cols = NumCols(r);
+ unsigned n_cols = NumEffectiveColumns(r);
for (unsigned c = result; c < n_cols; ++c) {
const auto& grid_cell = GridCellAt(r, c);
if (grid_cell.HasCells() || grid_cell.InColSpan())
@@ -1756,7 +1763,7 @@ const LayoutTableCell* LayoutTableSection::FirstRowCellAdjoiningTableEnd()
LayoutTableCell* LayoutTableSection::OriginatingCellAt(
unsigned row,
unsigned effective_column) {
- if (effective_column >= NumCols(row))
+ if (effective_column >= NumEffectiveColumns(row))
return nullptr;
auto& grid_cell = GridCellAt(row, effective_column);
if (grid_cell.InColSpan())
@@ -1852,7 +1859,7 @@ bool LayoutTableSection::NodeAtPoint(
// Now iterate over the spanned rows and columns.
for (unsigned hit_row = row_span.Start(); hit_row < row_span.End();
++hit_row) {
- unsigned n_cols = NumCols(hit_row);
+ unsigned n_cols = NumEffectiveColumns(hit_row);
for (unsigned hit_column = column_span.Start();
hit_column < n_cols && hit_column < column_span.End(); ++hit_column) {
auto& grid_cell = GridCellAt(hit_row, hit_column);
@@ -1906,8 +1913,7 @@ void LayoutTableSection::SetLogicalPositionForCell(
cell_location.SetX(LayoutUnit(
Table()->EffectiveColumnPositions()[Table()->NumEffectiveColumns()] -
Table()->EffectiveColumnPositions()
- [Table()->AbsoluteColumnToEffectiveColumn(
- cell->AbsoluteColumnIndex() + cell->ColSpan())] +
+ [cell->EffectiveColumnIndexOfCellAfter()] +
horizontal_border_spacing));
else
cell_location.SetX(
@@ -2127,7 +2133,7 @@ bool LayoutTableSection::MapToVisualRectInAncestorSpaceInternal(
bool LayoutTableSection::PaintedOutputOfObjectHasNoEffectRegardlessOfSize()
const {
// LayoutTableSection paints background from columns.
- if (Table()->HasColElements())
+ if (Table()->HasColOrColGroups())
return false;
return LayoutTableBoxComponent::
PaintedOutputOfObjectHasNoEffectRegardlessOfSize();
« no previous file with comments | « third_party/WebKit/Source/core/layout/LayoutTableSection.h ('k') | third_party/WebKit/Source/core/layout/LayoutTableTest.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698