Index: third_party/WebKit/Source/core/layout/LayoutTableCell.cpp |
diff --git a/third_party/WebKit/Source/core/layout/LayoutTableCell.cpp b/third_party/WebKit/Source/core/layout/LayoutTableCell.cpp |
index 56a40e0dd4045021b7e61e0940053a720889eac1..4c13b8910e741fbae97beb9ef0702ae142e232cf 100644 |
--- a/third_party/WebKit/Source/core/layout/LayoutTableCell.cpp |
+++ b/third_party/WebKit/Source/core/layout/LayoutTableCell.cpp |
@@ -165,9 +165,7 @@ Length LayoutTableCell::LogicalWidthFromColumns( |
Length width_from_style) const { |
DCHECK(first_col_for_this_cell); |
DCHECK_EQ(first_col_for_this_cell, |
- Table() |
- ->ColElementAtAbsoluteColumn(AbsoluteColumnIndex()) |
- .InnermostColOrColGroup()); |
+ GetColAndColGroup().InnermostColOrColGroup()); |
LayoutTableCol* table_col = first_col_for_this_cell; |
unsigned col_span_count = ColSpan(); |
@@ -594,13 +592,11 @@ static CollapsedBorderValue ChooseBorder(const CollapsedBorderValue& border1, |
} |
bool LayoutTableCell::IsInStartColumn() const { |
- return !AbsoluteColumnIndex(); |
+ return !EffectiveColumnIndex(); |
} |
bool LayoutTableCell::IsInEndColumn() const { |
- return Table()->AbsoluteColumnToEffectiveColumn(AbsoluteColumnIndex() + |
- ColSpan() - 1) == |
- Table()->NumEffectiveColumns() - 1; |
+ return EffectiveColumnIndexOfCellAfter() >= Table()->NumEffectiveColumns(); |
} |
bool LayoutTableCell::HasStartBorderAdjoiningTable() const { |
@@ -679,29 +675,26 @@ CollapsedBorderValue LayoutTableCell::ComputeCollapsedStartBorder() const { |
} |
// (5) Our column and column group's start borders. |
- LayoutTable::ColAndColGroup col_and_col_group = |
- table->ColElementAtAbsoluteColumn(AbsoluteColumnIndex()); |
- if (col_and_col_group.colgroup && |
- col_and_col_group.adjoins_start_border_of_col_group) { |
+ auto start_col = GetColAndColGroup(); |
+ if (start_col.colgroup && start_col.adjoins_start_border_of_col_group) { |
// Only apply the colgroup's border if this cell touches the colgroup edge. |
result = ChooseBorder( |
- result, |
- CollapsedBorderValue( |
- col_and_col_group.colgroup->BorderAdjoiningCellStartBorder(this), |
- col_and_col_group.colgroup->ResolveColor(start_color_property), |
- kBorderPrecedenceColumnGroup)); |
+ result, CollapsedBorderValue( |
+ start_col.colgroup->BorderAdjoiningCellStartBorder(this), |
+ start_col.colgroup->ResolveColor(start_color_property), |
+ kBorderPrecedenceColumnGroup)); |
if (!result.Exists()) |
return result; |
} |
- if (col_and_col_group.col) { |
+ if (start_col.col) { |
// Always apply the col's border irrespective of whether this cell touches |
// it. This is per HTML5: "For the purposes of the CSS table model, the col |
// element is expected to be treated as if it "was present as many times as |
// its span attribute specifies". |
result = ChooseBorder( |
result, CollapsedBorderValue( |
- col_and_col_group.col->BorderAdjoiningCellStartBorder(this), |
- col_and_col_group.col->ResolveColor(start_color_property), |
+ start_col.col->BorderAdjoiningCellStartBorder(this), |
+ start_col.col->ResolveColor(start_color_property), |
kBorderPrecedenceColumn)); |
if (!result.Exists()) |
return result; |
@@ -709,15 +702,14 @@ CollapsedBorderValue LayoutTableCell::ComputeCollapsedStartBorder() const { |
// (6) The end border of the preceding column. |
if (cell_before) { |
- LayoutTable::ColAndColGroup col_and_col_group = |
- table->ColElementAtAbsoluteColumn(AbsoluteColumnIndex() - 1); |
+ auto col_before = |
+ table->ColAndColGroupAtEffectiveColumn(EffectiveColumnIndex() - 1); |
// Only apply the colgroup's border if this cell touches the colgroup edge. |
- if (col_and_col_group.colgroup && |
- col_and_col_group.adjoins_end_border_of_col_group) { |
+ if (col_before.colgroup && col_before.adjoins_end_border_of_col_group) { |
result = ChooseBorder( |
CollapsedBorderValue( |
- col_and_col_group.colgroup->BorderAdjoiningCellEndBorder(this), |
- col_and_col_group.colgroup->ResolveColor(end_color_property), |
+ col_before.colgroup->BorderAdjoiningCellEndBorder(this), |
+ col_before.colgroup->ResolveColor(end_color_property), |
kBorderPrecedenceColumnGroup), |
result); |
if (!result.Exists()) |
@@ -727,12 +719,11 @@ CollapsedBorderValue LayoutTableCell::ComputeCollapsedStartBorder() const { |
// it. This is per HTML5: "For the purposes of the CSS table model, the col |
// element is expected to be treated as if it "was present as many times as |
// its span attribute specifies". |
- if (col_and_col_group.col) { |
+ if (col_before.col) { |
result = ChooseBorder( |
- CollapsedBorderValue( |
- col_and_col_group.col->BorderAdjoiningCellAfter(this), |
- col_and_col_group.col->ResolveColor(end_color_property), |
- kBorderPrecedenceColumn), |
+ CollapsedBorderValue(col_before.col->BorderAdjoiningCellAfter(this), |
+ col_before.col->ResolveColor(end_color_property), |
+ kBorderPrecedenceColumn), |
result); |
if (!result.Exists()) |
return result; |
@@ -809,60 +800,56 @@ CollapsedBorderValue LayoutTableCell::ComputeCollapsedEndBorder() const { |
} |
// (5) Our column and column group's end borders. |
- LayoutTable::ColAndColGroup col_and_col_group = |
- table->ColElementAtAbsoluteColumn(AbsoluteColumnIndex() + ColSpan() - 1); |
- if (col_and_col_group.colgroup && |
- col_and_col_group.adjoins_end_border_of_col_group) { |
+ auto end_col = table->ColAndColGroupAtEffectiveColumn( |
+ EffectiveColumnIndexOfCellAfter() - 1); |
+ if (end_col.colgroup && end_col.adjoins_end_border_of_col_group) { |
// Only apply the colgroup's border if this cell touches the colgroup edge. |
result = ChooseBorder( |
- result, |
- CollapsedBorderValue( |
- col_and_col_group.colgroup->BorderAdjoiningCellEndBorder(this), |
- col_and_col_group.colgroup->ResolveColor(end_color_property), |
- kBorderPrecedenceColumnGroup)); |
+ result, CollapsedBorderValue( |
+ end_col.colgroup->BorderAdjoiningCellEndBorder(this), |
+ end_col.colgroup->ResolveColor(end_color_property), |
+ kBorderPrecedenceColumnGroup)); |
if (!result.Exists()) |
return result; |
} |
- if (col_and_col_group.col) { |
+ if (end_col.col) { |
// Always apply the col's border irrespective of whether this cell touches |
// it. This is per HTML5: "For the purposes of the CSS table model, the col |
// element is expected to be treated as if it "was present as many times as |
// its span attribute specifies". |
result = ChooseBorder( |
- result, CollapsedBorderValue( |
- col_and_col_group.col->BorderAdjoiningCellEndBorder(this), |
- col_and_col_group.col->ResolveColor(end_color_property), |
- kBorderPrecedenceColumn)); |
+ result, |
+ CollapsedBorderValue(end_col.col->BorderAdjoiningCellEndBorder(this), |
+ end_col.col->ResolveColor(end_color_property), |
+ kBorderPrecedenceColumn)); |
if (!result.Exists()) |
return result; |
} |
// (6) The start border of the next column. |
if (!is_end_column) { |
- LayoutTable::ColAndColGroup col_and_col_group = |
- table->ColElementAtAbsoluteColumn(AbsoluteColumnIndex() + ColSpan()); |
- if (col_and_col_group.colgroup && |
- col_and_col_group.adjoins_start_border_of_col_group) { |
+ auto col_after = table->ColAndColGroupAtEffectiveColumn( |
+ EffectiveColumnIndexOfCellAfter()); |
+ if (col_after.colgroup && col_after.adjoins_start_border_of_col_group) { |
// Only apply the colgroup's border if this cell touches the colgroup |
// edge. |
result = ChooseBorder( |
- result, |
- CollapsedBorderValue( |
- col_and_col_group.colgroup->BorderAdjoiningCellStartBorder(this), |
- col_and_col_group.colgroup->ResolveColor(start_color_property), |
- kBorderPrecedenceColumnGroup)); |
+ result, CollapsedBorderValue( |
+ col_after.colgroup->BorderAdjoiningCellStartBorder(this), |
+ col_after.colgroup->ResolveColor(start_color_property), |
+ kBorderPrecedenceColumnGroup)); |
if (!result.Exists()) |
return result; |
} |
- if (col_and_col_group.col) { |
+ if (col_after.col) { |
// Always apply the col's border irrespective of whether this cell touches |
// it. This is per HTML5: "For the purposes of the CSS table model, the |
// col element is expected to be treated as if it "was present as many |
// times as its span attribute specifies". |
result = ChooseBorder( |
result, CollapsedBorderValue( |
- col_and_col_group.col->BorderAdjoiningCellBefore(this), |
- col_and_col_group.col->ResolveColor(start_color_property), |
+ col_after.col->BorderAdjoiningCellBefore(this), |
+ col_after.col->ResolveColor(start_color_property), |
kBorderPrecedenceColumn)); |
if (!result.Exists()) |
return result; |
@@ -887,7 +874,7 @@ CollapsedBorderValue LayoutTableCell::ComputeCollapsedBeforeBorder() const { |
LayoutTableCell* prev_cell = table->CellAbove(this); |
// We can use the border shared with |prev_cell| if it is valid. |
if (prev_cell && prev_cell->collapsed_border_values_valid_ && |
- prev_cell->AbsoluteColumnIndex() == AbsoluteColumnIndex()) { |
+ prev_cell->EffectiveColumnIndex() == EffectiveColumnIndex()) { |
return prev_cell->GetCollapsedBorderValues() |
? prev_cell->GetCollapsedBorderValues()->AfterBorder() |
: CollapsedBorderValue(); |
@@ -969,9 +956,7 @@ CollapsedBorderValue LayoutTableCell::ComputeCollapsedBeforeBorder() const { |
if (!curr_section) { |
// (8) Our column and column group's before borders. |
- LayoutTableCol* col_elt = |
- table->ColElementAtAbsoluteColumn(AbsoluteColumnIndex()) |
- .InnermostColOrColGroup(); |
+ LayoutTableCol* col_elt = GetColAndColGroup().InnermostColOrColGroup(); |
if (col_elt) { |
result = ChooseBorder( |
result, |
@@ -1010,7 +995,7 @@ CollapsedBorderValue LayoutTableCell::ComputeCollapsedAfterBorder() const { |
LayoutTableCell* next_cell = table->CellBelow(this); |
// We can use the border shared with |next_cell| if it is valid. |
if (next_cell && next_cell->collapsed_border_values_valid_ && |
- next_cell->AbsoluteColumnIndex() == AbsoluteColumnIndex()) { |
+ next_cell->EffectiveColumnIndex() == EffectiveColumnIndex()) { |
return next_cell->GetCollapsedBorderValues() |
? next_cell->GetCollapsedBorderValues()->BeforeBorder() |
: CollapsedBorderValue(); |
@@ -1083,9 +1068,7 @@ CollapsedBorderValue LayoutTableCell::ComputeCollapsedAfterBorder() const { |
if (!curr_section) { |
// (8) Our column and column group's after borders. |
- LayoutTableCol* col_elt = |
- table->ColElementAtAbsoluteColumn(AbsoluteColumnIndex()) |
- .InnermostColOrColGroup(); |
+ LayoutTableCol* col_elt = GetColAndColGroup().InnermostColOrColGroup(); |
if (col_elt) { |
result = ChooseBorder( |
result, |