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, 2007, 2008, 2009, 2010 Apple Inc. All r
ights reserved. | 7 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 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 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
55 : RenderBlock(element) | 55 : RenderBlock(element) |
56 , m_head(0) | 56 , m_head(0) |
57 , m_foot(0) | 57 , m_foot(0) |
58 , m_firstBody(0) | 58 , m_firstBody(0) |
59 , m_currentBorder(0) | 59 , m_currentBorder(0) |
60 , m_collapsedBordersValid(false) | 60 , m_collapsedBordersValid(false) |
61 , m_hasColElements(false) | 61 , m_hasColElements(false) |
62 , m_needsSectionRecalc(false) | 62 , m_needsSectionRecalc(false) |
63 , m_columnLogicalWidthChanged(false) | 63 , m_columnLogicalWidthChanged(false) |
64 , m_columnRenderersValid(false) | 64 , m_columnRenderersValid(false) |
| 65 , m_hasCellColspanThatDeterminesTableWidth(false) |
65 , m_hSpacing(0) | 66 , m_hSpacing(0) |
66 , m_vSpacing(0) | 67 , m_vSpacing(0) |
67 , m_borderStart(0) | 68 , m_borderStart(0) |
68 , m_borderEnd(0) | 69 , m_borderEnd(0) |
69 { | 70 { |
70 setChildrenInline(false); | 71 setChildrenInline(false); |
71 m_columnPos.fill(0, 1); | 72 m_columnPos.fill(0, 1); |
72 | 73 |
73 } | 74 } |
74 | 75 |
(...skipping 753 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
828 } | 829 } |
829 | 830 |
830 m_columnPos.grow(numEffCols() + 1); | 831 m_columnPos.grow(numEffCols() + 1); |
831 } | 832 } |
832 | 833 |
833 void RenderTable::appendColumn(unsigned span) | 834 void RenderTable::appendColumn(unsigned span) |
834 { | 835 { |
835 unsigned newColumnIndex = m_columns.size(); | 836 unsigned newColumnIndex = m_columns.size(); |
836 m_columns.append(ColumnStruct(span)); | 837 m_columns.append(ColumnStruct(span)); |
837 | 838 |
| 839 // Unless the table has cell(s) with colspan that exceed the number of colum
ns afforded |
| 840 // by the other rows in the table we can use the fast path when mapping colu
mns to effective columns. |
| 841 m_hasCellColspanThatDeterminesTableWidth = m_hasCellColspanThatDeterminesTab
leWidth || span > 1; |
| 842 |
838 // Propagate the change in our columns representation to the sections that d
on't need | 843 // Propagate the change in our columns representation to the sections that d
on't need |
839 // cell recalc. If they do, they will be synced up directly with m_columns l
ater. | 844 // cell recalc. If they do, they will be synced up directly with m_columns l
ater. |
840 for (RenderObject* child = firstChild(); child; child = child->nextSibling()
) { | 845 for (RenderObject* child = firstChild(); child; child = child->nextSibling()
) { |
841 if (!child->isTableSection()) | 846 if (!child->isTableSection()) |
842 continue; | 847 continue; |
843 | 848 |
844 RenderTableSection* section = toRenderTableSection(child); | 849 RenderTableSection* section = toRenderTableSection(child); |
845 if (section->needsCellRecalc()) | 850 if (section->needsCellRecalc()) |
846 continue; | 851 continue; |
847 | 852 |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
902 } | 907 } |
903 | 908 |
904 void RenderTable::recalcSections() const | 909 void RenderTable::recalcSections() const |
905 { | 910 { |
906 ASSERT(m_needsSectionRecalc); | 911 ASSERT(m_needsSectionRecalc); |
907 | 912 |
908 m_head = 0; | 913 m_head = 0; |
909 m_foot = 0; | 914 m_foot = 0; |
910 m_firstBody = 0; | 915 m_firstBody = 0; |
911 m_hasColElements = false; | 916 m_hasColElements = false; |
| 917 m_hasCellColspanThatDeterminesTableWidth = hasCellColspanThatDeterminesTable
Width(); |
912 | 918 |
913 // We need to get valid pointers to caption, head, foot and first body again | 919 // We need to get valid pointers to caption, head, foot and first body again |
914 RenderObject* nextSibling; | 920 RenderObject* nextSibling; |
915 for (RenderObject* child = firstChild(); child; child = nextSibling) { | 921 for (RenderObject* child = firstChild(); child; child = nextSibling) { |
916 nextSibling = child->nextSibling(); | 922 nextSibling = child->nextSibling(); |
917 switch (child->style()->display()) { | 923 switch (child->style()->display()) { |
918 case TABLE_COLUMN: | 924 case TABLE_COLUMN: |
919 case TABLE_COLUMN_GROUP: | 925 case TABLE_COLUMN_GROUP: |
920 m_hasColElements = true; | 926 m_hasColElements = true; |
921 break; | 927 break; |
(...skipping 528 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1450 const BorderValue& RenderTable::tableEndBorderAdjoiningCell(const RenderTableCel
l* cell) const | 1456 const BorderValue& RenderTable::tableEndBorderAdjoiningCell(const RenderTableCel
l* cell) const |
1451 { | 1457 { |
1452 ASSERT(cell->isFirstOrLastCellInRow()); | 1458 ASSERT(cell->isFirstOrLastCellInRow()); |
1453 if (hasSameDirectionAs(cell->row())) | 1459 if (hasSameDirectionAs(cell->row())) |
1454 return style()->borderEnd(); | 1460 return style()->borderEnd(); |
1455 | 1461 |
1456 return style()->borderStart(); | 1462 return style()->borderStart(); |
1457 } | 1463 } |
1458 | 1464 |
1459 } | 1465 } |
OLD | NEW |