OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 1997 Martin Jones (mjones@kde.org) | 2 * Copyright (C) 1997 Martin Jones (mjones@kde.org) |
3 * (C) 1997 Torben Weis (weis@kde.org) | 3 * (C) 1997 Torben Weis (weis@kde.org) |
4 * (C) 1998 Waldo Bastian (bastian@kde.org) | 4 * (C) 1998 Waldo Bastian (bastian@kde.org) |
5 * (C) 1999 Lars Knoll (knoll@kde.org) | 5 * (C) 1999 Lars Knoll (knoll@kde.org) |
6 * (C) 1999 Antti Koivisto (koivisto@kde.org) | 6 * (C) 1999 Antti Koivisto (koivisto@kde.org) |
7 * Copyright (C) 2003, 2004, 2005, 2006, 2008, 2009, 2010, 2013 Apple Inc. All r
ights reserved. | 7 * Copyright (C) 2003, 2004, 2005, 2006, 2008, 2009, 2010, 2013 Apple Inc. All r
ights reserved. |
8 * Copyright (C) 2006 Alexey Proskuryakov (ap@nypop.com) | 8 * Copyright (C) 2006 Alexey Proskuryakov (ap@nypop.com) |
9 * | 9 * |
10 * This library is free software; you can redistribute it and/or | 10 * This library is free software; you can redistribute it and/or |
(...skipping 966 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
977 LayoutTableRow* rowLayoutObject = m_grid[r].rowLayoutObject; | 977 LayoutTableRow* rowLayoutObject = m_grid[r].rowLayoutObject; |
978 int paginationStrutOnRow = 0; | 978 int paginationStrutOnRow = 0; |
979 if (rowLayoutObject) { | 979 if (rowLayoutObject) { |
980 rowLayoutObject->setLocation(LayoutPoint(0, m_rowPos[r])); | 980 rowLayoutObject->setLocation(LayoutPoint(0, m_rowPos[r])); |
981 rowLayoutObject->setLogicalWidth(logicalWidth()); | 981 rowLayoutObject->setLogicalWidth(logicalWidth()); |
982 rowLayoutObject->setLogicalHeight(LayoutUnit(m_rowPos[r + 1] - m_row
Pos[r] - vspacing)); | 982 rowLayoutObject->setLogicalHeight(LayoutUnit(m_rowPos[r + 1] - m_row
Pos[r] - vspacing)); |
983 rowLayoutObject->updateLayerTransformAfterLayout(); | 983 rowLayoutObject->updateLayerTransformAfterLayout(); |
984 if (isPaginated) { | 984 if (isPaginated) { |
985 paginationStrutOnRow = paginationStrutForRow(rowLayoutObject, La
youtUnit(m_rowPos[r])); | 985 paginationStrutOnRow = paginationStrutForRow(rowLayoutObject, La
youtUnit(m_rowPos[r])); |
986 if (paginationStrutOnRow) { | 986 if (paginationStrutOnRow) { |
| 987 LayoutTableSection* header = table()->header(); |
| 988 // If we have a header group we will paint it at the top of
each page, move the rows |
| 989 // down to accomodate it. |
| 990 if (header && header != this) |
| 991 paginationStrutOnRow += header->logicalHeight().toInt(); |
987 for (unsigned rowIndex = r; rowIndex <= totalRows; rowIndex+
+) | 992 for (unsigned rowIndex = r; rowIndex <= totalRows; rowIndex+
+) |
988 m_rowPos[rowIndex] += paginationStrutOnRow; | 993 m_rowPos[rowIndex] += paginationStrutOnRow; |
989 } | 994 } |
990 } | 995 } |
991 } | 996 } |
992 | 997 |
993 int rowHeightIncreaseForPagination = INT_MIN; | 998 int rowHeightIncreaseForPagination = INT_MIN; |
994 | 999 |
995 for (unsigned c = 0; c < nEffCols; c++) { | 1000 for (unsigned c = 0; c < nEffCols; c++) { |
996 CellStruct& cs = cellAt(r, c); | 1001 CellStruct& cs = cellAt(r, c); |
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1104 | 1109 |
1105 ASSERT(!needsLayout()); | 1110 ASSERT(!needsLayout()); |
1106 | 1111 |
1107 setLogicalHeight(LayoutUnit(m_rowPos[totalRows])); | 1112 setLogicalHeight(LayoutUnit(m_rowPos[totalRows])); |
1108 | 1113 |
1109 computeOverflowFromCells(totalRows, nEffCols); | 1114 computeOverflowFromCells(totalRows, nEffCols); |
1110 } | 1115 } |
1111 | 1116 |
1112 int LayoutTableSection::paginationStrutForRow(LayoutTableRow* row, LayoutUnit lo
gicalOffset) const | 1117 int LayoutTableSection::paginationStrutForRow(LayoutTableRow* row, LayoutUnit lo
gicalOffset) const |
1113 { | 1118 { |
1114 if (row->getPaginationBreakability() == AllowAnyBreaks) | 1119 // Even if the row allows us to break-inside, we will want to put a strut on
the row if we have a header |
| 1120 // group that wants to appear at the top of each page. |
| 1121 bool tableHeaderForcesStrut = table()->header() ? table()->header()->getPagi
nationBreakability() != AllowAnyBreaks : false; |
| 1122 if (row->getPaginationBreakability() == AllowAnyBreaks && !tableHeaderForces
Strut) |
1115 return 0; | 1123 return 0; |
1116 LayoutUnit pageLogicalHeight = pageLogicalHeightForOffset(logicalOffset); | 1124 LayoutUnit pageLogicalHeight = pageLogicalHeightForOffset(logicalOffset); |
1117 if (!pageLogicalHeight) | 1125 if (!pageLogicalHeight) |
1118 return 0; | 1126 return 0; |
1119 // If the row is too tall for the page don't insert a strut. | 1127 // If the row is too tall for the page don't insert a strut. |
1120 LayoutUnit rowLogicalHeight = row->logicalHeight(); | 1128 LayoutUnit rowLogicalHeight = row->logicalHeight(); |
1121 if (rowLogicalHeight > pageLogicalHeight) | 1129 if (rowLogicalHeight > pageLogicalHeight) |
1122 return 0; | 1130 return 0; |
1123 LayoutUnit remainingLogicalHeight = pageRemainingLogicalHeightForOffset(logi
calOffset, LayoutBlock::AssociateWithLatterPage); | 1131 LayoutUnit remainingLogicalHeight = pageRemainingLogicalHeightForOffset(logi
calOffset, LayoutBlock::AssociateWithLatterPage); |
1124 if (remainingLogicalHeight >= rowLogicalHeight) | 1132 if (remainingLogicalHeight >= rowLogicalHeight) |
(...skipping 546 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1671 // FIXME: The table's direction should determine our row's direction, not th
e section's (see bug 96691). | 1679 // FIXME: The table's direction should determine our row's direction, not th
e section's (see bug 96691). |
1672 if (!style()->isLeftToRightDirection()) | 1680 if (!style()->isLeftToRightDirection()) |
1673 cellLocation.setX(LayoutUnit(table()->effectiveColumnPositions()[table()
->numEffectiveColumns()] - table()->effectiveColumnPositions()[table()->absolute
ColumnToEffectiveColumn(cell->absoluteColumnIndex() + cell->colSpan())] + horizo
ntalBorderSpacing)); | 1681 cellLocation.setX(LayoutUnit(table()->effectiveColumnPositions()[table()
->numEffectiveColumns()] - table()->effectiveColumnPositions()[table()->absolute
ColumnToEffectiveColumn(cell->absoluteColumnIndex() + cell->colSpan())] + horizo
ntalBorderSpacing)); |
1674 else | 1682 else |
1675 cellLocation.setX(LayoutUnit(table()->effectiveColumnPositions()[effecti
veColumn] + horizontalBorderSpacing)); | 1683 cellLocation.setX(LayoutUnit(table()->effectiveColumnPositions()[effecti
veColumn] + horizontalBorderSpacing)); |
1676 | 1684 |
1677 cell->setLogicalLocation(cellLocation); | 1685 cell->setLogicalLocation(cellLocation); |
1678 } | 1686 } |
1679 | 1687 |
1680 } // namespace blink | 1688 } // namespace blink |
OLD | NEW |