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

Unified Diff: Source/core/rendering/RenderTableSection.cpp

Issue 145603002: Eliminate large chunks of nearly duplicated code for table-row-group border calculation. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Address code review issue raised together with lgtm Created 6 years, 11 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
« no previous file with comments | « Source/core/rendering/RenderTableSection.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/rendering/RenderTableSection.cpp
diff --git a/Source/core/rendering/RenderTableSection.cpp b/Source/core/rendering/RenderTableSection.cpp
index a04afb2003167a18f7a1413a66a82d682dfd3f8a..656b5514fe13c482437ea97056ee9d13e7a07d12 100644
--- a/Source/core/rendering/RenderTableSection.cpp
+++ b/Source/core/rendering/RenderTableSection.cpp
@@ -1065,7 +1065,7 @@ void RenderTableSection::computeOverflowFromCells(unsigned totalRows, unsigned n
ASSERT(hasOverflowingCell == this->hasOverflowingCell());
}
-int RenderTableSection::calcOuterBorderBefore() const
+int RenderTableSection::calcBlockDirectionOuterBorder(BlockBorderSide side) const
{
unsigned totalCols = table()->numEffCols();
if (!m_grid.size() || !totalCols)
@@ -1073,13 +1073,13 @@ int RenderTableSection::calcOuterBorderBefore() const
unsigned borderWidth = 0;
- const BorderValue& sb = style()->borderBefore();
+ const BorderValue& sb = side == BorderBefore ? style()->borderBefore() : style()->borderAfter();
if (sb.style() == BHIDDEN)
return -1;
if (sb.style() > BHIDDEN)
borderWidth = sb.width();
- const BorderValue& rb = firstChild()->style()->borderBefore();
+ const BorderValue& rb = side == BorderBefore ? firstChild()->style()->borderBefore() : lastChild()->style()->borderAfter();
if (rb.style() == BHIDDEN)
return -1;
if (rb.style() > BHIDDEN && rb.width() > borderWidth)
@@ -1087,14 +1087,15 @@ int RenderTableSection::calcOuterBorderBefore() const
bool allHidden = true;
for (unsigned c = 0; c < totalCols; c++) {
- const CellStruct& current = cellAt(0, c);
+ const CellStruct& current = cellAt(side == BorderBefore ? 0 : m_grid.size() - 1, c);
if (current.inColSpan || !current.hasCells())
continue;
- const BorderValue& cb = current.primaryCell()->style()->borderBefore(); // FIXME: Make this work with perpendicular and flipped cells.
+ const RenderStyle* primaryCellStyle = current.primaryCell()->style();
+ const BorderValue& cb = side == BorderBefore ? primaryCellStyle->borderBefore() : primaryCellStyle->borderAfter(); // FIXME: Make this work with perpendicular and flipped cells.
// FIXME: Don't repeat for the same col group
RenderTableCol* colGroup = table()->colElement(c);
if (colGroup) {
- const BorderValue& gb = colGroup->style()->borderBefore();
+ const BorderValue& gb = side == BorderBefore ? colGroup->style()->borderBefore() : colGroup->style()->borderAfter();
if (gb.style() == BHIDDEN || cb.style() == BHIDDEN)
continue;
allHidden = false;
@@ -1113,120 +1114,28 @@ int RenderTableSection::calcOuterBorderBefore() const
if (allHidden)
return -1;
+ if (side == BorderAfter)
+ borderWidth++; // Distribute rounding error
return borderWidth / 2;
}
-int RenderTableSection::calcOuterBorderAfter() const
+int RenderTableSection::calcInlineDirectionOuterBorder(InlineBorderSide side) const
{
unsigned totalCols = table()->numEffCols();
if (!m_grid.size() || !totalCols)
return 0;
+ unsigned colIndex = side == BorderStart ? 0 : totalCols - 1;
unsigned borderWidth = 0;
- const BorderValue& sb = style()->borderAfter();
+ const BorderValue& sb = side == BorderStart ? style()->borderStart() : style()->borderEnd();
if (sb.style() == BHIDDEN)
return -1;
if (sb.style() > BHIDDEN)
borderWidth = sb.width();
- const BorderValue& rb = lastChild()->style()->borderAfter();
- if (rb.style() == BHIDDEN)
- return -1;
- if (rb.style() > BHIDDEN && rb.width() > borderWidth)
- borderWidth = rb.width();
-
- bool allHidden = true;
- for (unsigned c = 0; c < totalCols; c++) {
- const CellStruct& current = cellAt(m_grid.size() - 1, c);
- if (current.inColSpan || !current.hasCells())
- continue;
- const BorderValue& cb = current.primaryCell()->style()->borderAfter(); // FIXME: Make this work with perpendicular and flipped cells.
- // FIXME: Don't repeat for the same col group
- RenderTableCol* colGroup = table()->colElement(c);
- if (colGroup) {
- const BorderValue& gb = colGroup->style()->borderAfter();
- if (gb.style() == BHIDDEN || cb.style() == BHIDDEN)
- continue;
- allHidden = false;
- if (gb.style() > BHIDDEN && gb.width() > borderWidth)
- borderWidth = gb.width();
- if (cb.style() > BHIDDEN && cb.width() > borderWidth)
- borderWidth = cb.width();
- } else {
- if (cb.style() == BHIDDEN)
- continue;
- allHidden = false;
- if (cb.style() > BHIDDEN && cb.width() > borderWidth)
- borderWidth = cb.width();
- }
- }
- if (allHidden)
- return -1;
-
- return (borderWidth + 1) / 2;
-}
-
-int RenderTableSection::calcOuterBorderStart() const
-{
- unsigned totalCols = table()->numEffCols();
- if (!m_grid.size() || !totalCols)
- return 0;
-
- unsigned borderWidth = 0;
-
- const BorderValue& sb = style()->borderStart();
- if (sb.style() == BHIDDEN)
- return -1;
- if (sb.style() > BHIDDEN)
- borderWidth = sb.width();
-
- if (RenderTableCol* colGroup = table()->colElement(0)) {
- const BorderValue& gb = colGroup->style()->borderStart();
- if (gb.style() == BHIDDEN)
- return -1;
- if (gb.style() > BHIDDEN && gb.width() > borderWidth)
- borderWidth = gb.width();
- }
-
- bool allHidden = true;
- for (unsigned r = 0; r < m_grid.size(); r++) {
- const CellStruct& current = cellAt(r, 0);
- if (!current.hasCells())
- continue;
- // FIXME: Don't repeat for the same cell
- const BorderValue& cb = current.primaryCell()->style()->borderStart(); // FIXME: Make this work with perpendicular and flipped cells.
- const BorderValue& rb = current.primaryCell()->parent()->style()->borderStart();
- if (cb.style() == BHIDDEN || rb.style() == BHIDDEN)
- continue;
- allHidden = false;
- if (cb.style() > BHIDDEN && cb.width() > borderWidth)
- borderWidth = cb.width();
- if (rb.style() > BHIDDEN && rb.width() > borderWidth)
- borderWidth = rb.width();
- }
- if (allHidden)
- return -1;
-
- return (borderWidth + (table()->style()->isLeftToRightDirection() ? 0 : 1)) / 2;
-}
-
-int RenderTableSection::calcOuterBorderEnd() const
-{
- unsigned totalCols = table()->numEffCols();
- if (!m_grid.size() || !totalCols)
- return 0;
-
- unsigned borderWidth = 0;
-
- const BorderValue& sb = style()->borderEnd();
- if (sb.style() == BHIDDEN)
- return -1;
- if (sb.style() > BHIDDEN)
- borderWidth = sb.width();
-
- if (RenderTableCol* colGroup = table()->colElement(totalCols - 1)) {
- const BorderValue& gb = colGroup->style()->borderEnd();
+ if (RenderTableCol* colGroup = table()->colElement(colIndex)) {
+ const BorderValue& gb = side == BorderStart ? colGroup->style()->borderStart() : colGroup->style()->borderEnd();
if (gb.style() == BHIDDEN)
return -1;
if (gb.style() > BHIDDEN && gb.width() > borderWidth)
@@ -1235,12 +1144,14 @@ int RenderTableSection::calcOuterBorderEnd() const
bool allHidden = true;
for (unsigned r = 0; r < m_grid.size(); r++) {
- const CellStruct& current = cellAt(r, totalCols - 1);
+ const CellStruct& current = cellAt(r, colIndex);
if (!current.hasCells())
continue;
// FIXME: Don't repeat for the same cell
- const BorderValue& cb = current.primaryCell()->style()->borderEnd(); // FIXME: Make this work with perpendicular and flipped cells.
- const BorderValue& rb = current.primaryCell()->parent()->style()->borderEnd();
+ const RenderStyle* primaryCellStyle = current.primaryCell()->style();
+ const RenderStyle* primaryCellParentStyle = current.primaryCell()->parent()->style();
+ const BorderValue& cb = side == BorderStart ? primaryCellStyle->borderStart() : primaryCellStyle->borderEnd(); // FIXME: Make this work with perpendicular and flipped cells.
+ const BorderValue& rb = side == BorderStart ? primaryCellParentStyle->borderStart() : primaryCellParentStyle->borderEnd();
if (cb.style() == BHIDDEN || rb.style() == BHIDDEN)
continue;
allHidden = false;
@@ -1252,15 +1163,17 @@ int RenderTableSection::calcOuterBorderEnd() const
if (allHidden)
return -1;
- return (borderWidth + (table()->style()->isLeftToRightDirection() ? 1 : 0)) / 2;
+ if ((side == BorderStart) != table()->style()->isLeftToRightDirection())
+ borderWidth++; // Distribute rounding error
+ return borderWidth / 2;
}
void RenderTableSection::recalcOuterBorder()
{
- m_outerBorderBefore = calcOuterBorderBefore();
- m_outerBorderAfter = calcOuterBorderAfter();
- m_outerBorderStart = calcOuterBorderStart();
- m_outerBorderEnd = calcOuterBorderEnd();
+ m_outerBorderBefore = calcBlockDirectionOuterBorder(BorderBefore);
+ m_outerBorderAfter = calcBlockDirectionOuterBorder(BorderAfter);
+ m_outerBorderStart = calcInlineDirectionOuterBorder(BorderStart);
+ m_outerBorderEnd = calcInlineDirectionOuterBorder(BorderEnd);
}
int RenderTableSection::firstLineBoxBaseline() const
« no previous file with comments | « Source/core/rendering/RenderTableSection.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698