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, 2010 Apple Inc. | 7 * Copyright (C) 2003, 2004, 2005, 2006, 2009, 2010 Apple Inc. |
8 * All rights reserved. | 8 * All rights reserved. |
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 234 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
245 } | 245 } |
246 void setEffectiveColumnPosition(unsigned index, int position) { | 246 void setEffectiveColumnPosition(unsigned index, int position) { |
247 // Note that if our horizontal border-spacing changed, our position will | 247 // Note that if our horizontal border-spacing changed, our position will |
248 // change but not our column's width. In practice, horizontal border-spacing | 248 // change but not our column's width. In practice, horizontal border-spacing |
249 // won't change often. | 249 // won't change often. |
250 m_columnLogicalWidthChanged |= | 250 m_columnLogicalWidthChanged |= |
251 m_effectiveColumnPositions[index] != position; | 251 m_effectiveColumnPositions[index] != position; |
252 m_effectiveColumnPositions[index] = position; | 252 m_effectiveColumnPositions[index] = position; |
253 } | 253 } |
254 | 254 |
255 LayoutTableSection* header() const { return m_head; } | 255 LayoutTableSection* header() const { |
256 LayoutTableSection* footer() const { return m_foot; } | 256 // TODO(mstensho): We should ideally DCHECK(!needsSectionRecalc()) here, but |
257 LayoutTableSection* firstBody() const { return m_firstBody; } | 257 // we currently cannot, due to crbug.com/693212 |
| 258 return m_head; |
| 259 } |
| 260 LayoutTableSection* footer() const { |
| 261 DCHECK(!needsSectionRecalc()); |
| 262 return m_foot; |
| 263 } |
| 264 LayoutTableSection* firstBody() const { |
| 265 DCHECK(!needsSectionRecalc()); |
| 266 return m_firstBody; |
| 267 } |
258 | 268 |
259 void setRowOffsetFromRepeatingHeader(LayoutUnit offset) { | 269 void setRowOffsetFromRepeatingHeader(LayoutUnit offset) { |
260 m_rowOffsetFromRepeatingHeader = offset; | 270 m_rowOffsetFromRepeatingHeader = offset; |
261 } | 271 } |
262 LayoutUnit rowOffsetFromRepeatingHeader() const { | 272 LayoutUnit rowOffsetFromRepeatingHeader() const { |
263 return m_rowOffsetFromRepeatingHeader; | 273 return m_rowOffsetFromRepeatingHeader; |
264 } | 274 } |
265 | 275 |
266 // This function returns 0 if the table has no section. | 276 // This function returns 0 if the table has no section. |
267 LayoutTableSection* topSection() const; | 277 LayoutTableSection* topSection() const; |
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
360 // fast. | 370 // fast. |
361 if (!m_hasColElements) | 371 if (!m_hasColElements) |
362 return ColAndColGroup(); | 372 return ColAndColGroup(); |
363 return slowColElementAtAbsoluteColumn(absoluteColumnIndex); | 373 return slowColElementAtAbsoluteColumn(absoluteColumnIndex); |
364 } | 374 } |
365 | 375 |
366 bool needsSectionRecalc() const { return m_needsSectionRecalc; } | 376 bool needsSectionRecalc() const { return m_needsSectionRecalc; } |
367 void setNeedsSectionRecalc() { | 377 void setNeedsSectionRecalc() { |
368 if (documentBeingDestroyed()) | 378 if (documentBeingDestroyed()) |
369 return; | 379 return; |
| 380 // For all we know, sections may have been deleted at this point. Don't |
| 381 // keep pointers dangling around. |
| 382 m_head = nullptr; |
| 383 m_foot = nullptr; |
| 384 m_firstBody = nullptr; |
| 385 |
370 m_needsSectionRecalc = true; | 386 m_needsSectionRecalc = true; |
371 setNeedsLayoutAndFullPaintInvalidation( | 387 setNeedsLayoutAndFullPaintInvalidation( |
372 LayoutInvalidationReason::TableChanged); | 388 LayoutInvalidationReason::TableChanged); |
373 } | 389 } |
374 | 390 |
375 LayoutTableSection* sectionAbove( | 391 LayoutTableSection* sectionAbove( |
376 const LayoutTableSection*, | 392 const LayoutTableSection*, |
377 SkipEmptySectionsValue = DoNotSkipEmptySections) const; | 393 SkipEmptySectionsValue = DoNotSkipEmptySections) const; |
378 LayoutTableSection* sectionBelow( | 394 LayoutTableSection* sectionBelow( |
379 const LayoutTableSection*, | 395 const LayoutTableSection*, |
380 SkipEmptySectionsValue = DoNotSkipEmptySections) const; | 396 SkipEmptySectionsValue = DoNotSkipEmptySections) const; |
381 | 397 |
382 LayoutTableCell* cellAbove(const LayoutTableCell*) const; | 398 LayoutTableCell* cellAbove(const LayoutTableCell*) const; |
383 LayoutTableCell* cellBelow(const LayoutTableCell*) const; | 399 LayoutTableCell* cellBelow(const LayoutTableCell*) const; |
384 LayoutTableCell* cellBefore(const LayoutTableCell*) const; | 400 LayoutTableCell* cellBefore(const LayoutTableCell*) const; |
385 LayoutTableCell* cellAfter(const LayoutTableCell*) const; | 401 LayoutTableCell* cellAfter(const LayoutTableCell*) const; |
386 | 402 |
387 typedef Vector<CollapsedBorderValue> CollapsedBorderValues; | 403 typedef Vector<CollapsedBorderValue> CollapsedBorderValues; |
388 void invalidateCollapsedBorders(); | 404 void invalidateCollapsedBorders(); |
389 | 405 |
390 bool hasSections() const { return m_head || m_foot || m_firstBody; } | 406 bool hasSections() const { return header() || footer() || firstBody(); } |
391 | 407 |
392 void recalcSectionsIfNeeded() const { | 408 void recalcSectionsIfNeeded() const { |
393 if (m_needsSectionRecalc) | 409 if (m_needsSectionRecalc) |
394 recalcSections(); | 410 recalcSections(); |
395 } | 411 } |
396 | 412 |
397 static LayoutTable* createAnonymousWithParent(const LayoutObject*); | 413 static LayoutTable* createAnonymousWithParent(const LayoutObject*); |
398 LayoutBox* createAnonymousBoxWithSameTypeAs( | 414 LayoutBox* createAnonymousBoxWithSameTypeAs( |
399 const LayoutObject* parent) const override { | 415 const LayoutObject* parent) const override { |
400 return createAnonymousWithParent(parent); | 416 return createAnonymousWithParent(parent); |
(...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
592 if (m_firstBody) | 608 if (m_firstBody) |
593 return m_firstBody; | 609 return m_firstBody; |
594 return m_foot; | 610 return m_foot; |
595 } | 611 } |
596 | 612 |
597 DEFINE_LAYOUT_OBJECT_TYPE_CASTS(LayoutTable, isTable()); | 613 DEFINE_LAYOUT_OBJECT_TYPE_CASTS(LayoutTable, isTable()); |
598 | 614 |
599 } // namespace blink | 615 } // namespace blink |
600 | 616 |
601 #endif // LayoutTable_h | 617 #endif // LayoutTable_h |
OLD | NEW |