Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(476)

Side by Side Diff: Source/WebCore/rendering/RenderTable.cpp

Issue 10274004: Merge 113759 (Closed) Base URL: http://svn.webkit.org/repository/webkit/branches/chromium/1084/
Patch Set: Created 8 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « LayoutTests/fast/table/table-caption-not-removed-crash-expected.txt ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
111 void RenderTable::addChild(RenderObject* child, RenderObject* beforeChild) 111 void RenderTable::addChild(RenderObject* child, RenderObject* beforeChild)
112 { 112 {
113 // Make sure we don't append things after :after-generated content if we hav e it. 113 // Make sure we don't append things after :after-generated content if we hav e it.
114 if (!beforeChild) 114 if (!beforeChild)
115 beforeChild = afterPseudoElementRenderer(); 115 beforeChild = afterPseudoElementRenderer();
116 116
117 bool wrapInAnonymousSection = !child->isPositioned(); 117 bool wrapInAnonymousSection = !child->isPositioned();
118 118
119 if (child->isTableCaption()) { 119 if (child->isTableCaption()) {
120 m_captions.append(toRenderTableCaption(child)); 120 m_captions.append(toRenderTableCaption(child));
121 setNeedsSectionRecalc();
122 wrapInAnonymousSection = false; 121 wrapInAnonymousSection = false;
123 } else if (child->isTableCol()) { 122 } else if (child->isTableCol()) {
124 m_hasColElements = true; 123 m_hasColElements = true;
125 wrapInAnonymousSection = false; 124 wrapInAnonymousSection = false;
126 } else if (child->isTableSection()) { 125 } else if (child->isTableSection()) {
127 switch (child->style()->display()) { 126 switch (child->style()->display()) {
128 case TABLE_HEADER_GROUP: 127 case TABLE_HEADER_GROUP:
129 resetSectionPointerIfNotBefore(m_head, beforeChild); 128 resetSectionPointerIfNotBefore(m_head, beforeChild);
130 if (!m_head) { 129 if (!m_head) {
131 m_head = toRenderTableSection(child); 130 m_head = toRenderTableSection(child);
(...skipping 656 matching lines...) Expand 10 before | Expand all | Expand 10 after
788 787
789 return 0; 788 return 0;
790 } 789 }
791 790
792 void RenderTable::recalcSections() const 791 void RenderTable::recalcSections() const
793 { 792 {
794 m_head = 0; 793 m_head = 0;
795 m_foot = 0; 794 m_foot = 0;
796 m_firstBody = 0; 795 m_firstBody = 0;
797 m_hasColElements = false; 796 m_hasColElements = false;
797 m_captions.clear();
798 798
799 // We need to get valid pointers to caption, head, foot and first body again 799 // We need to get valid pointers to caption, head, foot and first body again
800 RenderObject* nextSibling; 800 RenderObject* nextSibling;
801 for (RenderObject* child = firstChild(); child; child = nextSibling) { 801 for (RenderObject* child = firstChild(); child; child = nextSibling) {
802 nextSibling = child->nextSibling(); 802 nextSibling = child->nextSibling();
803 switch (child->style()->display()) { 803 switch (child->style()->display()) {
804 case TABLE_COLUMN: 804 case TABLE_CAPTION:
805 case TABLE_COLUMN_GROUP: 805 if (child->isTableCaption())
806 m_hasColElements = true; 806 m_captions.append(toRenderTableCaption(child));
807 break; 807 break;
808 case TABLE_HEADER_GROUP: 808 case TABLE_COLUMN:
809 if (child->isTableSection()) { 809 case TABLE_COLUMN_GROUP:
810 RenderTableSection* section = toRenderTableSection(child); 810 m_hasColElements = true;
811 if (!m_head) 811 break;
812 m_head = section; 812 case TABLE_HEADER_GROUP:
813 else if (!m_firstBody) 813 if (child->isTableSection()) {
814 m_firstBody = section; 814 RenderTableSection* section = toRenderTableSection(child);
815 section->recalcCellsIfNeeded(); 815 if (!m_head)
816 } 816 m_head = section;
817 break; 817 else if (!m_firstBody)
818 case TABLE_FOOTER_GROUP: 818 m_firstBody = section;
819 if (child->isTableSection()) { 819 section->recalcCellsIfNeeded();
820 RenderTableSection* section = toRenderTableSection(child); 820 }
821 if (!m_foot) 821 break;
822 m_foot = section; 822 case TABLE_FOOTER_GROUP:
823 else if (!m_firstBody) 823 if (child->isTableSection()) {
824 m_firstBody = section; 824 RenderTableSection* section = toRenderTableSection(child);
825 section->recalcCellsIfNeeded(); 825 if (!m_foot)
826 } 826 m_foot = section;
827 break; 827 else if (!m_firstBody)
828 case TABLE_ROW_GROUP: 828 m_firstBody = section;
829 if (child->isTableSection()) { 829 section->recalcCellsIfNeeded();
830 RenderTableSection* section = toRenderTableSection(child); 830 }
831 if (!m_firstBody) 831 break;
832 m_firstBody = section; 832 case TABLE_ROW_GROUP:
833 section->recalcCellsIfNeeded(); 833 if (child->isTableSection()) {
834 } 834 RenderTableSection* section = toRenderTableSection(child);
835 break; 835 if (!m_firstBody)
836 default: 836 m_firstBody = section;
837 break; 837 section->recalcCellsIfNeeded();
838 }
839 break;
840 default:
841 break;
838 } 842 }
839 } 843 }
840 844
841 // repair column count (addChild can grow it too much, because it always add s elements to the last row of a section) 845 // repair column count (addChild can grow it too much, because it always add s elements to the last row of a section)
842 unsigned maxCols = 0; 846 unsigned maxCols = 0;
843 for (RenderObject* child = firstChild(); child; child = child->nextSibling() ) { 847 for (RenderObject* child = firstChild(); child; child = child->nextSibling() ) {
844 if (child->isTableSection()) { 848 if (child->isTableSection()) {
845 RenderTableSection* section = toRenderTableSection(child); 849 RenderTableSection* section = toRenderTableSection(child);
846 unsigned sectionCols = section->numColumns(); 850 unsigned sectionCols = section->numColumns();
847 if (sectionCols > maxCols) 851 if (sectionCols > maxCols)
(...skipping 426 matching lines...) Expand 10 before | Expand all | Expand 10 after
1274 if (visibleToHitTesting() && (action == HitTestBlockBackground || action == HitTestChildBlockBackground) && boundsRect.intersects(result.rectForPoint(pointI nContainer))) { 1278 if (visibleToHitTesting() && (action == HitTestBlockBackground || action == HitTestChildBlockBackground) && boundsRect.intersects(result.rectForPoint(pointI nContainer))) {
1275 updateHitTestResult(result, flipForWritingMode(pointInContainer - toLayo utSize(adjustedLocation))); 1279 updateHitTestResult(result, flipForWritingMode(pointInContainer - toLayo utSize(adjustedLocation)));
1276 if (!result.addNodeToRectBasedTestResult(node(), pointInContainer, bound sRect)) 1280 if (!result.addNodeToRectBasedTestResult(node(), pointInContainer, bound sRect))
1277 return true; 1281 return true;
1278 } 1282 }
1279 1283
1280 return false; 1284 return false;
1281 } 1285 }
1282 1286
1283 } 1287 }
OLDNEW
« no previous file with comments | « LayoutTests/fast/table/table-caption-not-removed-crash-expected.txt ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698