Index: Source/core/rendering/RenderTableSection.cpp |
diff --git a/Source/core/rendering/RenderTableSection.cpp b/Source/core/rendering/RenderTableSection.cpp |
index de1f54512902e387a152a99808b85479511d81cf..4313e21b577f463b7b3d00793824dfa64c5d39b4 100644 |
--- a/Source/core/rendering/RenderTableSection.cpp |
+++ b/Source/core/rendering/RenderTableSection.cpp |
@@ -373,17 +373,28 @@ void RenderTableSection::distributeExtraRowSpanHeightToRemainingRows(RenderTable |
// To avoid unneeded extra height distributions, we apply the following sorting algorithm: |
// 1. We sort by increasing start row but decreasing last row (ie the top-most, shortest cells first). |
// 2. For cells spanning the same rows, we sort by intrinsic size. |
Julien - ping for review
2013/09/04 20:46:27
As you inlined the description of what you do, the
a.suchit
2013/09/05 06:35:01
Done.
|
-static bool compareRowSpanCellsInHeightDistributionOrder(const RenderTableCell* cell2, const RenderTableCell* cell1) |
+static bool compareRowSpanCellsInHeightDistributionOrder(const RenderTableCell* cell1, const RenderTableCell* cell2) |
{ |
- unsigned cellRowIndex1 = cell1->rowIndex(); |
- unsigned cellRowSpan1 = cell1->rowSpan(); |
- unsigned cellRowIndex2 = cell2->rowIndex(); |
- unsigned cellRowSpan2 = cell2->rowSpan(); |
+ unsigned cell1RowIndex = cell1->rowIndex(); |
+ unsigned cell1RowSpan = cell1->rowSpan(); |
+ unsigned cell2RowIndex = cell2->rowIndex(); |
+ unsigned cell2RowSpan = cell2->rowSpan(); |
+ |
+ // Sorting bigger height cell first if cells are at same index with same span because we will skip smaller |
+ // height cell to distribute it's extra height. |
+ if (cell1RowIndex == cell2RowIndex && cell1RowSpan == cell2RowSpan) |
+ return (cell1->logicalHeightForRowSizing() > cell2->logicalHeightForRowSizing()); |
+ // Sorting inner most cell first because if inner spanning cell'e extra height is distributed then outer |
+ // spanning cell's extra height will adjust accordingly. In reverse order, there is more chances that outer |
+ // spanning cell's height will exceed than defined by user. |
+ if (cell1RowIndex >= cell2RowIndex && (cell1RowIndex + cell1RowSpan) <= (cell2RowIndex + cell2RowSpan)) |
Julien - ping for review
2013/09/04 18:35:45
This should be a function as you use it twice:
bo
a.suchit
2013/09/05 06:35:01
Done.
|
+ return true; |
+ // Sorting lower row index first because first we need to apply the extra height of spanning cell which |
+ // comes first in the table so lower rows's position would increment in sequence. |
+ if (!(cell2RowIndex >= cell1RowIndex && (cell2RowIndex + cell2RowSpan) <= (cell1RowIndex + cell1RowSpan))) |
+ return (cell1RowIndex < cell2RowIndex); |
- if (cellRowIndex1 == cellRowIndex2 && cellRowSpan1 == cellRowSpan2) |
- return (cell2->logicalHeightForRowSizing() > cell1->logicalHeightForRowSizing()); |
- |
- return (cellRowIndex2 >= cellRowIndex1 && (cellRowIndex2 + cellRowSpan2) <= (cellRowIndex1 + cellRowSpan1)); |
+ return false; |
Julien - ping for review
2013/09/04 18:35:45
I am concerned about always returning false here b
|
} |
// Distribute rowSpan cell height in rows those comes in rowSpan cell based on the ratio of row's height if |