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

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

Issue 6913011: Merge 85355 (Closed) Base URL: http://svn.webkit.org/repository/webkit/branches/chromium/742/
Patch Set: Created 9 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 | « Source/WebCore/rendering/RenderTable.h ('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 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
109 beforeChild = lastChild(); 109 beforeChild = lastChild();
110 110
111 bool wrapInAnonymousSection = !child->isPositioned(); 111 bool wrapInAnonymousSection = !child->isPositioned();
112 112
113 if (child->isRenderBlock() && child->style()->display() == TABLE_CAPTION) { 113 if (child->isRenderBlock() && child->style()->display() == TABLE_CAPTION) {
114 // First caption wins. 114 // First caption wins.
115 if (beforeChild && m_caption) { 115 if (beforeChild && m_caption) {
116 RenderObject* o = beforeChild->previousSibling(); 116 RenderObject* o = beforeChild->previousSibling();
117 while (o && o != m_caption) 117 while (o && o != m_caption)
118 o = o->previousSibling(); 118 o = o->previousSibling();
119 if (!o) 119 if (!o) {
120 m_caption = 0; 120 m_caption = 0;
121 setNeedsSectionRecalc();
122 }
121 } 123 }
122 if (!m_caption) 124 if (!m_caption)
123 m_caption = toRenderBlock(child); 125 m_caption = toRenderBlock(child);
126 else
127 setNeedsSectionRecalc();
124 wrapInAnonymousSection = false; 128 wrapInAnonymousSection = false;
125 } else if (child->isTableCol()) { 129 } else if (child->isTableCol()) {
126 m_hasColElements = true; 130 m_hasColElements = true;
127 wrapInAnonymousSection = false; 131 wrapInAnonymousSection = false;
128 } else if (child->isTableSection()) { 132 } else if (child->isTableSection()) {
129 switch (child->style()->display()) { 133 switch (child->style()->display()) {
130 case TABLE_HEADER_GROUP: 134 case TABLE_HEADER_GROUP:
131 resetSectionPointerIfNotBefore(m_head, beforeChild); 135 resetSectionPointerIfNotBefore(m_head, beforeChild);
132 if (!m_head) { 136 if (!m_head) {
133 m_head = toRenderTableSection(child); 137 m_head = toRenderTableSection(child);
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
191 newStyle->inheritFrom(style()); 195 newStyle->inheritFrom(style());
192 newStyle->setDisplay(TABLE_ROW_GROUP); 196 newStyle->setDisplay(TABLE_ROW_GROUP);
193 section->setStyle(newStyle.release()); 197 section->setStyle(newStyle.release());
194 addChild(section, beforeChild); 198 addChild(section, beforeChild);
195 section->addChild(child); 199 section->addChild(child);
196 } 200 }
197 201
198 void RenderTable::removeChild(RenderObject* oldChild) 202 void RenderTable::removeChild(RenderObject* oldChild)
199 { 203 {
200 RenderBox::removeChild(oldChild); 204 RenderBox::removeChild(oldChild);
205
206 if (m_caption && oldChild == m_caption && node())
207 node()->setNeedsStyleRecalc();
201 setNeedsSectionRecalc(); 208 setNeedsSectionRecalc();
202 } 209 }
203 210
204 void RenderTable::computeLogicalWidth() 211 void RenderTable::computeLogicalWidth()
205 { 212 {
206 if (isPositioned()) 213 if (isPositioned())
207 computePositionedLogicalWidth(); 214 computePositionedLogicalWidth();
208 215
209 RenderBlock* cb = containingBlock(); 216 RenderBlock* cb = containingBlock();
210 217
(...skipping 470 matching lines...) Expand 10 before | Expand all | Expand 10 after
681 *endEdge = endCol == col; 688 *endEdge = endCol == col;
682 return colElem; 689 return colElem;
683 } 690 }
684 } 691 }
685 colElem = nextColElement(colElem); 692 colElem = nextColElement(colElem);
686 } 693 }
687 694
688 return 0; 695 return 0;
689 } 696 }
690 697
698 void RenderTable::recalcCaption(RenderBlock* caption) const
699 {
700 if (!m_caption) {
701 m_caption = caption;
702 m_caption->setNeedsLayout(true);
703 } else {
704 // Detach the child from the table.
705 const RenderBlock* block = static_cast<const RenderBlock*>(this);
706 const_cast<RenderBlock*>(block)->removeChild(caption);
707
708 // Make sure to null out the child's renderer.
709 if (Node* node = caption->node())
710 node->setRenderer(0);
711
712 // Destroy the child now.
713 caption->destroy();
714 }
715 }
716
691 void RenderTable::recalcSections() const 717 void RenderTable::recalcSections() const
692 { 718 {
693 m_caption = 0; 719 m_caption = 0;
694 m_head = 0; 720 m_head = 0;
695 m_foot = 0; 721 m_foot = 0;
696 m_firstBody = 0; 722 m_firstBody = 0;
697 m_hasColElements = false; 723 m_hasColElements = false;
698 724
699 // We need to get valid pointers to caption, head, foot and first body again 725 // We need to get valid pointers to caption, head, foot and first body again
700 for (RenderObject* child = firstChild(); child; child = child->nextSibling() ) { 726 RenderObject* nextSibling;
727 for (RenderObject* child = firstChild(); child; child = nextSibling) {
728 nextSibling = child->nextSibling();
701 switch (child->style()->display()) { 729 switch (child->style()->display()) {
702 case TABLE_CAPTION: 730 case TABLE_CAPTION:
703 if (!m_caption && child->isRenderBlock()) { 731 if (child->isRenderBlock())
704 m_caption = toRenderBlock(child); 732 recalcCaption(toRenderBlock(child));
705 m_caption->setNeedsLayout(true);
706 }
707 break; 733 break;
708 case TABLE_COLUMN: 734 case TABLE_COLUMN:
709 case TABLE_COLUMN_GROUP: 735 case TABLE_COLUMN_GROUP:
710 m_hasColElements = true; 736 m_hasColElements = true;
711 break; 737 break;
712 case TABLE_HEADER_GROUP: 738 case TABLE_HEADER_GROUP:
713 if (child->isTableSection()) { 739 if (child->isTableSection()) {
714 RenderTableSection* section = toRenderTableSection(child); 740 RenderTableSection* section = toRenderTableSection(child);
715 if (!m_head) 741 if (!m_head)
716 m_head = section; 742 m_head = section;
(...skipping 478 matching lines...) Expand 10 before | Expand all | Expand 10 after
1195 if (visibleToHitTesting() && (action == HitTestBlockBackground || action == HitTestChildBlockBackground) && boundsRect.intersects(result.rectForPoint(xPos, yPos))) { 1221 if (visibleToHitTesting() && (action == HitTestBlockBackground || action == HitTestChildBlockBackground) && boundsRect.intersects(result.rectForPoint(xPos, yPos))) {
1196 updateHitTestResult(result, flipForWritingMode(IntPoint(xPos - tx, yPos - ty))); 1222 updateHitTestResult(result, flipForWritingMode(IntPoint(xPos - tx, yPos - ty)));
1197 if (!result.addNodeToRectBasedTestResult(node(), xPos, yPos, boundsRect) ) 1223 if (!result.addNodeToRectBasedTestResult(node(), xPos, yPos, boundsRect) )
1198 return true; 1224 return true;
1199 } 1225 }
1200 1226
1201 return false; 1227 return false;
1202 } 1228 }
1203 1229
1204 } 1230 }
OLDNEW
« no previous file with comments | « Source/WebCore/rendering/RenderTable.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698