| 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, 2009 Apple Inc. All rights reserved. | 7 * Copyright (C) 2003, 2004, 2005, 2006, 2009 Apple Inc. All rights reserved. |
| 8 * | 8 * |
| 9 * This library is free software; you can redistribute it and/or | 9 * This library is free software; you can redistribute it and/or |
| 10 * modify it under the terms of the GNU Library General Public | 10 * modify it under the terms of the GNU Library General Public |
| (...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 154 | 154 |
| 155 return style()->borderStart(); | 155 return style()->borderStart(); |
| 156 } | 156 } |
| 157 | 157 |
| 158 const BorderValue& borderAdjoiningStartCell(const RenderTableCell*) const; | 158 const BorderValue& borderAdjoiningStartCell(const RenderTableCell*) const; |
| 159 const BorderValue& borderAdjoiningEndCell(const RenderTableCell*) const; | 159 const BorderValue& borderAdjoiningEndCell(const RenderTableCell*) const; |
| 160 | 160 |
| 161 const RenderTableCell* firstRowCellAdjoiningTableStart() const; | 161 const RenderTableCell* firstRowCellAdjoiningTableStart() const; |
| 162 const RenderTableCell* firstRowCellAdjoiningTableEnd() const; | 162 const RenderTableCell* firstRowCellAdjoiningTableEnd() const; |
| 163 | 163 |
| 164 CellStruct& cellAt(unsigned row, unsigned col) { return m_grid[row].row[col
]; } | 164 CellStruct& cellAt(unsigned row, unsigned col) |
| 165 const CellStruct& cellAt(unsigned row, unsigned col) const { return m_grid[r
ow].row[col]; } | 165 { |
| 166 recalcCellsIfNeeded(); |
| 167 return m_grid[row].row[col]; |
| 168 } |
| 169 |
| 170 const CellStruct& cellAt(unsigned row, unsigned col) const |
| 171 { |
| 172 ASSERT(!m_needsCellRecalc); |
| 173 return m_grid[row].row[col]; |
| 174 } |
| 166 RenderTableCell* primaryCellAt(unsigned row, unsigned col) | 175 RenderTableCell* primaryCellAt(unsigned row, unsigned col) |
| 167 { | 176 { |
| 177 recalcCellsIfNeeded(); |
| 168 CellStruct& c = m_grid[row].row[col]; | 178 CellStruct& c = m_grid[row].row[col]; |
| 169 return c.primaryCell(); | 179 return c.primaryCell(); |
| 170 } | 180 } |
| 171 | 181 |
| 172 RenderTableRow* rowRendererAt(unsigned row) const { return m_grid[row].rowRe
nderer; } | 182 RenderTableRow* rowRendererAt(unsigned row) const |
| 183 { |
| 184 ASSERT(!m_needsCellRecalc); |
| 185 return m_grid[row].rowRenderer; |
| 186 } |
| 173 | 187 |
| 174 void appendColumn(unsigned pos); | 188 void appendColumn(unsigned pos); |
| 175 void splitColumn(unsigned pos, unsigned first); | 189 void splitColumn(unsigned pos, unsigned first); |
| 176 | 190 |
| 177 enum BlockBorderSide { BorderBefore, BorderAfter }; | 191 enum BlockBorderSide { BorderBefore, BorderAfter }; |
| 178 int calcBlockDirectionOuterBorder(BlockBorderSide) const; | 192 int calcBlockDirectionOuterBorder(BlockBorderSide) const; |
| 179 enum InlineBorderSide { BorderStart, BorderEnd }; | 193 enum InlineBorderSide { BorderStart, BorderEnd }; |
| 180 int calcInlineDirectionOuterBorder(InlineBorderSide) const; | 194 int calcInlineDirectionOuterBorder(InlineBorderSide) const; |
| 181 void recalcOuterBorder(); | 195 void recalcOuterBorder(); |
| 182 | 196 |
| 183 int outerBorderBefore() const { return m_outerBorderBefore; } | 197 int outerBorderBefore() const { return m_outerBorderBefore; } |
| 184 int outerBorderAfter() const { return m_outerBorderAfter; } | 198 int outerBorderAfter() const { return m_outerBorderAfter; } |
| 185 int outerBorderStart() const { return m_outerBorderStart; } | 199 int outerBorderStart() const { return m_outerBorderStart; } |
| 186 int outerBorderEnd() const { return m_outerBorderEnd; } | 200 int outerBorderEnd() const { return m_outerBorderEnd; } |
| 187 | 201 |
| 188 unsigned numRows() const { return m_grid.size(); } | 202 unsigned numRows() const |
| 203 { |
| 204 ASSERT(!m_needsCellRecalc); |
| 205 return m_grid.size(); |
| 206 } |
| 189 unsigned numColumns() const; | 207 unsigned numColumns() const; |
| 190 void recalcCells(); | 208 void recalcCells(); |
| 191 void recalcCellsIfNeeded() | 209 void recalcCellsIfNeeded() |
| 192 { | 210 { |
| 193 if (m_needsCellRecalc) | 211 if (m_needsCellRecalc) |
| 194 recalcCells(); | 212 recalcCells(); |
| 195 } | 213 } |
| 196 | 214 |
| 197 bool needsCellRecalc() const { return m_needsCellRecalc; } | 215 bool needsCellRecalc() const { return m_needsCellRecalc; } |
| 198 void setNeedsCellRecalc(); | 216 void setNeedsCellRecalc(); |
| 199 | 217 |
| 200 LayoutUnit rowBaseline(unsigned row) { return m_grid[row].baseline; } | 218 LayoutUnit rowBaseline(unsigned row) |
| 219 { |
| 220 recalcCellsIfNeeded(); |
| 221 return m_grid[row].baseline; |
| 222 } |
| 201 | 223 |
| 202 void rowLogicalHeightChanged(unsigned rowIndex); | 224 void rowLogicalHeightChanged(unsigned rowIndex); |
| 203 | 225 |
| 204 void removeCachedCollapsedBorders(const RenderTableCell*); | 226 void removeCachedCollapsedBorders(const RenderTableCell*); |
| 205 void setCachedCollapsedBorder(const RenderTableCell*, CollapsedBorderSide, C
ollapsedBorderValue); | 227 void setCachedCollapsedBorder(const RenderTableCell*, CollapsedBorderSide, C
ollapsedBorderValue); |
| 206 CollapsedBorderValue& cachedCollapsedBorder(const RenderTableCell*, Collapse
dBorderSide); | 228 CollapsedBorderValue& cachedCollapsedBorder(const RenderTableCell*, Collapse
dBorderSide); |
| 207 | 229 |
| 208 // distributeExtraLogicalHeightToRows methods return the *consumed* extra lo
gical height. | 230 // distributeExtraLogicalHeightToRows methods return the *consumed* extra lo
gical height. |
| 209 // FIXME: We may want to introduce a structure holding the in-flux layout in
formation. | 231 // FIXME: We may want to introduce a structure holding the in-flux layout in
formation. |
| 210 int distributeExtraLogicalHeightToRows(int extraLogicalHeight); | 232 int distributeExtraLogicalHeightToRows(int extraLogicalHeight); |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 256 | 278 |
| 257 void distributeExtraLogicalHeightToPercentRows(int& extraLogicalHeight, int
totalPercent); | 279 void distributeExtraLogicalHeightToPercentRows(int& extraLogicalHeight, int
totalPercent); |
| 258 void distributeExtraLogicalHeightToAutoRows(int& extraLogicalHeight, unsigne
d autoRowsCount); | 280 void distributeExtraLogicalHeightToAutoRows(int& extraLogicalHeight, unsigne
d autoRowsCount); |
| 259 void distributeRemainingExtraLogicalHeight(int& extraLogicalHeight); | 281 void distributeRemainingExtraLogicalHeight(int& extraLogicalHeight); |
| 260 | 282 |
| 261 void updateBaselineForCell(RenderTableCell*, unsigned row, LayoutUnit& basel
ineDescent); | 283 void updateBaselineForCell(RenderTableCell*, unsigned row, LayoutUnit& basel
ineDescent); |
| 262 | 284 |
| 263 bool hasOverflowingCell() const { return m_overflowingCells.size() || m_forc
eSlowPaintPathWithOverflowingCell; } | 285 bool hasOverflowingCell() const { return m_overflowingCells.size() || m_forc
eSlowPaintPathWithOverflowingCell; } |
| 264 void computeOverflowFromCells(unsigned totalRows, unsigned nEffCols); | 286 void computeOverflowFromCells(unsigned totalRows, unsigned nEffCols); |
| 265 | 287 |
| 266 CellSpan fullTableRowSpan() const { return CellSpan(0, m_grid.size()); } | 288 CellSpan fullTableRowSpan() const |
| 289 { |
| 290 ASSERT(!m_needsCellRecalc); |
| 291 return CellSpan(0, m_grid.size()); |
| 292 } |
| 267 CellSpan fullTableColumnSpan() const { return CellSpan(0, table()->columns()
.size()); } | 293 CellSpan fullTableColumnSpan() const { return CellSpan(0, table()->columns()
.size()); } |
| 268 | 294 |
| 269 // Flip the rect so it aligns with the coordinates used by the rowPos and co
lumnPos vectors. | 295 // Flip the rect so it aligns with the coordinates used by the rowPos and co
lumnPos vectors. |
| 270 LayoutRect logicalRectForWritingModeAndDirection(const LayoutRect&) const; | 296 LayoutRect logicalRectForWritingModeAndDirection(const LayoutRect&) const; |
| 271 | 297 |
| 272 CellSpan dirtiedRows(const LayoutRect& repaintRect) const; | 298 CellSpan dirtiedRows(const LayoutRect& repaintRect) const; |
| 273 CellSpan dirtiedColumns(const LayoutRect& repaintRect) const; | 299 CellSpan dirtiedColumns(const LayoutRect& repaintRect) const; |
| 274 | 300 |
| 275 // These two functions take a rectangle as input that has been flipped by lo
gicalRectForWritingModeAndDirection. | 301 // These two functions take a rectangle as input that has been flipped by lo
gicalRectForWritingModeAndDirection. |
| 276 // The returned span of rows or columns is end-exclusive, and empty if start
==end. | 302 // The returned span of rows or columns is end-exclusive, and empty if start
==end. |
| (...skipping 29 matching lines...) Expand all Loading... |
| 306 // This map holds the collapsed border values for cells with collapsed borde
rs. | 332 // This map holds the collapsed border values for cells with collapsed borde
rs. |
| 307 // It is held at RenderTableSection level to spare memory consumption by tab
le cells. | 333 // It is held at RenderTableSection level to spare memory consumption by tab
le cells. |
| 308 HashMap<pair<const RenderTableCell*, int>, CollapsedBorderValue > m_cellsCol
lapsedBorders; | 334 HashMap<pair<const RenderTableCell*, int>, CollapsedBorderValue > m_cellsCol
lapsedBorders; |
| 309 }; | 335 }; |
| 310 | 336 |
| 311 DEFINE_RENDER_OBJECT_TYPE_CASTS(RenderTableSection, isTableSection()); | 337 DEFINE_RENDER_OBJECT_TYPE_CASTS(RenderTableSection, isTableSection()); |
| 312 | 338 |
| 313 } // namespace WebCore | 339 } // namespace WebCore |
| 314 | 340 |
| 315 #endif // RenderTableSection_h | 341 #endif // RenderTableSection_h |
| OLD | NEW |