| 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 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 109 { | 109 { |
| 110 if (!before || !ptr) | 110 if (!before || !ptr) |
| 111 return; | 111 return; |
| 112 RenderObject* o = before->previousSibling(); | 112 RenderObject* o = before->previousSibling(); |
| 113 while (o && o != ptr) | 113 while (o && o != ptr) |
| 114 o = o->previousSibling(); | 114 o = o->previousSibling(); |
| 115 if (!o) | 115 if (!o) |
| 116 ptr = 0; | 116 ptr = 0; |
| 117 } | 117 } |
| 118 | 118 |
| 119 static inline bool needsTableSection(RenderObject* object) |
| 120 { |
| 121 // Return true if 'object' can't exist in an anonymous table without being |
| 122 // wrapped in a table section box. |
| 123 EDisplay display = object->style()->display(); |
| 124 return display != TABLE_CAPTION && display != TABLE_COLUMN_GROUP && display
!= TABLE_COLUMN; |
| 125 } |
| 126 |
| 119 void RenderTable::addChild(RenderObject* child, RenderObject* beforeChild) | 127 void RenderTable::addChild(RenderObject* child, RenderObject* beforeChild) |
| 120 { | 128 { |
| 121 bool wrapInAnonymousSection = !child->isOutOfFlowPositioned(); | 129 bool wrapInAnonymousSection = !child->isOutOfFlowPositioned(); |
| 122 | 130 |
| 123 if (child->isTableCaption()) | 131 if (child->isTableCaption()) |
| 124 wrapInAnonymousSection = false; | 132 wrapInAnonymousSection = false; |
| 125 else if (child->isRenderTableCol()) { | 133 else if (child->isRenderTableCol()) { |
| 126 m_hasColElements = true; | 134 m_hasColElements = true; |
| 127 wrapInAnonymousSection = false; | 135 wrapInAnonymousSection = false; |
| 128 } else if (child->isTableSection()) { | 136 } else if (child->isTableSection()) { |
| (...skipping 19 matching lines...) Expand all Loading... |
| 148 // Fall through. | 156 // Fall through. |
| 149 case TABLE_ROW_GROUP: | 157 case TABLE_ROW_GROUP: |
| 150 resetSectionPointerIfNotBefore(m_firstBody, beforeChild); | 158 resetSectionPointerIfNotBefore(m_firstBody, beforeChild); |
| 151 if (!m_firstBody) | 159 if (!m_firstBody) |
| 152 m_firstBody = toRenderTableSection(child); | 160 m_firstBody = toRenderTableSection(child); |
| 153 wrapInAnonymousSection = false; | 161 wrapInAnonymousSection = false; |
| 154 break; | 162 break; |
| 155 default: | 163 default: |
| 156 ASSERT_NOT_REACHED(); | 164 ASSERT_NOT_REACHED(); |
| 157 } | 165 } |
| 158 } else if (child->isTableCell() || child->isTableRow()) | 166 } else |
| 159 wrapInAnonymousSection = true; | |
| 160 else | |
| 161 wrapInAnonymousSection = true; | 167 wrapInAnonymousSection = true; |
| 162 | 168 |
| 163 if (child->isTableSection()) | 169 if (child->isTableSection()) |
| 164 setNeedsSectionRecalc(); | 170 setNeedsSectionRecalc(); |
| 165 | 171 |
| 166 if (!wrapInAnonymousSection) { | 172 if (!wrapInAnonymousSection) { |
| 167 if (beforeChild && beforeChild->parent() != this) | 173 if (beforeChild && beforeChild->parent() != this) |
| 168 beforeChild = splitAnonymousBoxesAroundChild(beforeChild); | 174 beforeChild = splitAnonymousBoxesAroundChild(beforeChild); |
| 169 | 175 |
| 170 RenderBox::addChild(child, beforeChild); | 176 RenderBox::addChild(child, beforeChild); |
| 171 return; | 177 return; |
| 172 } | 178 } |
| 173 | 179 |
| 174 if (!beforeChild && lastChild() && lastChild()->isTableSection() && lastChil
d()->isAnonymous() && !lastChild()->isBeforeContent()) { | 180 if (!beforeChild && lastChild() && lastChild()->isTableSection() && lastChil
d()->isAnonymous() && !lastChild()->isBeforeContent()) { |
| 175 lastChild()->addChild(child); | 181 lastChild()->addChild(child); |
| 176 return; | 182 return; |
| 177 } | 183 } |
| 178 | 184 |
| 179 if (beforeChild && !beforeChild->isAnonymous() && beforeChild->parent() == t
his) { | 185 if (beforeChild && !beforeChild->isAnonymous() && beforeChild->parent() == t
his) { |
| 180 RenderObject* section = beforeChild->previousSibling(); | 186 RenderObject* section = beforeChild->previousSibling(); |
| 181 if (section && section->isTableSection() && section->isAnonymous()) { | 187 if (section && section->isTableSection() && section->isAnonymous()) { |
| 182 section->addChild(child); | 188 section->addChild(child); |
| 183 return; | 189 return; |
| 184 } | 190 } |
| 185 } | 191 } |
| 186 | 192 |
| 187 RenderObject* lastBox = beforeChild; | 193 RenderObject* lastBox = beforeChild; |
| 188 while (lastBox && lastBox->parent()->isAnonymous() && !lastBox->isTableSecti
on() && lastBox->style()->display() != TABLE_CAPTION && lastBox->style()->displa
y() != TABLE_COLUMN_GROUP) | 194 while (lastBox && lastBox->parent()->isAnonymous() && !lastBox->isTableSecti
on() && needsTableSection(lastBox)) |
| 189 lastBox = lastBox->parent(); | 195 lastBox = lastBox->parent(); |
| 190 if (lastBox && lastBox->isAnonymous() && !isAfterContent(lastBox)) { | 196 if (lastBox && lastBox->isAnonymous() && !isAfterContent(lastBox)) { |
| 191 if (beforeChild == lastBox) | 197 if (beforeChild == lastBox) |
| 192 beforeChild = lastBox->firstChild(); | 198 beforeChild = lastBox->firstChild(); |
| 193 lastBox->addChild(child, beforeChild); | 199 lastBox->addChild(child, beforeChild); |
| 194 return; | 200 return; |
| 195 } | 201 } |
| 196 | 202 |
| 197 if (beforeChild && !beforeChild->isTableSection() && beforeChild->style()->d
isplay() != TABLE_CAPTION && beforeChild->style()->display() != TABLE_COLUMN_GRO
UP) | 203 if (beforeChild && !beforeChild->isTableSection() && needsTableSection(befor
eChild)) |
| 198 beforeChild = 0; | 204 beforeChild = 0; |
| 199 | 205 |
| 200 RenderTableSection* section = RenderTableSection::createAnonymousWithParentR
enderer(this); | 206 RenderTableSection* section = RenderTableSection::createAnonymousWithParentR
enderer(this); |
| 201 addChild(section, beforeChild); | 207 addChild(section, beforeChild); |
| 202 section->addChild(child); | 208 section->addChild(child); |
| 203 } | 209 } |
| 204 | 210 |
| 205 void RenderTable::addCaption(const RenderTableCaption* caption) | 211 void RenderTable::addCaption(const RenderTableCaption* caption) |
| 206 { | 212 { |
| 207 ASSERT(m_captions.find(caption) == kNotFound); | 213 ASSERT(m_captions.find(caption) == kNotFound); |
| (...skipping 1228 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1436 const BorderValue& RenderTable::tableEndBorderAdjoiningCell(const RenderTableCel
l* cell) const | 1442 const BorderValue& RenderTable::tableEndBorderAdjoiningCell(const RenderTableCel
l* cell) const |
| 1437 { | 1443 { |
| 1438 ASSERT(cell->isFirstOrLastCellInRow()); | 1444 ASSERT(cell->isFirstOrLastCellInRow()); |
| 1439 if (hasSameDirectionAs(cell->row())) | 1445 if (hasSameDirectionAs(cell->row())) |
| 1440 return style()->borderEnd(); | 1446 return style()->borderEnd(); |
| 1441 | 1447 |
| 1442 return style()->borderStart(); | 1448 return style()->borderStart(); |
| 1443 } | 1449 } |
| 1444 | 1450 |
| 1445 } | 1451 } |
| OLD | NEW |