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

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

Issue 821203003: Handling of percent less than 1 while extra height distribution in spanning rows. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Review comments addressed Created 5 years, 9 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/layout/LayoutTableSection.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/layout/LayoutTableSection.cpp
diff --git a/Source/core/layout/LayoutTableSection.cpp b/Source/core/layout/LayoutTableSection.cpp
index 29e2a0c609103400515219cc23d2224ab18a3e07..005e41c88d38114a6e8e98b9ad7e54cff80dc80b 100644
--- a/Source/core/layout/LayoutTableSection.cpp
+++ b/Source/core/layout/LayoutTableSection.cpp
@@ -293,14 +293,15 @@ void LayoutTableSection::populateSpanningRowsHeightFromCell(LayoutTableCell* cel
spanningRowsHeight.spanningCellHeightIgnoringBorderSpacing += borderSpacingForRow(rowIndex + rowSpan - 1);
}
-void LayoutTableSection::distributeExtraRowSpanHeightToPercentRows(LayoutTableCell* cell, int totalPercent, int& extraRowSpanningHeight, Vector<int>& rowsHeight)
+void LayoutTableSection::distributeExtraRowSpanHeightToPercentRows(LayoutTableCell* cell, LayoutUnit totalPercent, int& extraRowSpanningHeight, Vector<int>& rowsHeight)
{
if (!extraRowSpanningHeight || !totalPercent)
return;
const unsigned rowSpan = cell->rowSpan();
const unsigned rowIndex = cell->rowIndex();
- int percent = std::min(totalPercent, 100);
+ LayoutUnit percent = 100;
+ percent = std::min(totalPercent, percent);
const int tableHeight = m_rowPos[m_grid.size()] + extraRowSpanningHeight;
// Our algorithm matches Firefox. Extra spanning height would be distributed Only in first percent height rows
@@ -323,15 +324,18 @@ void LayoutTableSection::distributeExtraRowSpanHeightToPercentRows(LayoutTableCe
}
}
-// Sometimes the multiplication of the 2 values below will overflow an integer.
-// So we convert the parameters to 'long long' instead of 'int' to avoid the
-// problem in this function.
-static void updatePositionIncreasedWithRowHeight(long long extraHeight, long long rowHeight, long long totalHeight, int& accumulatedPositionIncrease, int& remainder)
+static void updatePositionIncreasedWithRowHeight(int extraHeight, LayoutUnit rowHeight, LayoutUnit totalHeight, int& accumulatedPositionIncrease, int& remainder)
{
static_assert(sizeof(long long int) > sizeof(int), "int should be smaller than long long");
- accumulatedPositionIncrease += (extraHeight * rowHeight) / totalHeight;
- remainder += (extraHeight * rowHeight) % totalHeight;
+ // Multiplication of the 2 values below will overflow in LayoutUnit.
+ // So we converted to 'long long' instead of 'int' to avoid the problem in this function.
+ // Upto 2 digits of rational part is considered for calculation.
Julien - ping for review 2015/03/26 17:05:15 That's a lot of computation, most of which makes l
+ long long rHeight = static_cast<int>(rowHeight * 100);
+ long long tHeight = static_cast<int>(totalHeight * 100);
+
+ accumulatedPositionIncrease += (extraHeight * rHeight) / tHeight;
+ remainder += ((extraHeight * rHeight) % tHeight) / 100;
}
// This is mainly used to distribute whole extra rowspanning height in percent rows when all spanning rows are
@@ -339,7 +343,7 @@ static void updatePositionIncreasedWithRowHeight(long long extraHeight, long lon
// Distributing whole extra rowspanning height in percent rows based on the ratios of percent because this method works
// same as percent distribution when only percent rows are present and percent is 100. Also works perfectly fine when
// percent is not equal to 100.
-void LayoutTableSection::distributeWholeExtraRowSpanHeightToPercentRows(LayoutTableCell* cell, int totalPercent, int& extraRowSpanningHeight, Vector<int>& rowsHeight)
+void LayoutTableSection::distributeWholeExtraRowSpanHeightToPercentRows(LayoutTableCell* cell, LayoutUnit totalPercent, int& extraRowSpanningHeight, Vector<int>& rowsHeight)
{
if (!extraRowSpanningHeight || !totalPercent)
return;
@@ -358,7 +362,7 @@ void LayoutTableSection::distributeWholeExtraRowSpanHeightToPercentRows(LayoutTa
// is equvalent to divisor then 1 unit increased in row position.
// Note that this algorithm is biased towards adding more space towards the lower rows.
if (remainder >= totalPercent) {
- remainder -= totalPercent;
+ remainder = remainder - totalPercent;
accumulatedPositionIncrease++;
}
}
@@ -619,7 +623,7 @@ void LayoutTableSection::distributeRowSpanHeightToRows(SpanningLayoutTableCells&
}
// Below we are handling only row(s) who have at least one visible cell without rowspan value.
- int totalPercent = 0;
+ LayoutUnit totalPercent = 0;
int totalAutoRowsHeight = 0;
int totalRemainingRowsHeight = spanningRowsHeight.totalRowsHeight;
« no previous file with comments | « Source/core/layout/LayoutTableSection.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698