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

Side by Side Diff: Source/core/rendering/RenderListItem.cpp

Issue 899163003: Move rendering/RenderObject to layout/LayoutObject. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 5 years, 10 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 | Annotate | Revision Log
« no previous file with comments | « Source/core/rendering/RenderListItem.h ('k') | Source/core/rendering/RenderListMarker.h » ('j') | 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) 1999 Lars Knoll (knoll@kde.org) 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org)
3 * (C) 1999 Antti Koivisto (koivisto@kde.org) 3 * (C) 1999 Antti Koivisto (koivisto@kde.org)
4 * Copyright (C) 2003, 2004, 2005, 2006, 2010 Apple Inc. All rights reserved. 4 * Copyright (C) 2003, 2004, 2005, 2006, 2010 Apple Inc. All rights reserved.
5 * Copyright (C) 2006 Andrew Wellington (proton@wiretapped.net) 5 * Copyright (C) 2006 Andrew Wellington (proton@wiretapped.net)
6 * 6 *
7 * This library is free software; you can redistribute it and/or 7 * This library is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Library General Public 8 * modify it under the terms of the GNU Library General Public
9 * License as published by the Free Software Foundation; either 9 * License as published by the Free Software Foundation; either
10 * version 2 of the License, or (at your option) any later version. 10 * version 2 of the License, or (at your option) any later version.
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after
122 ASSERT(!current->document().childNeedsDistributionRecalc()); 122 ASSERT(!current->document().childNeedsDistributionRecalc());
123 current = NodeRenderingTraversal::next(*current, listNode); 123 current = NodeRenderingTraversal::next(*current, listNode);
124 124
125 while (current) { 125 while (current) {
126 if (isList(*current)) { 126 if (isList(*current)) {
127 // We've found a nested, independent list: nothing to do here. 127 // We've found a nested, independent list: nothing to do here.
128 current = NodeRenderingTraversal::nextSkippingChildren(*current, lis tNode); 128 current = NodeRenderingTraversal::nextSkippingChildren(*current, lis tNode);
129 continue; 129 continue;
130 } 130 }
131 131
132 RenderObject* renderer = current->renderer(); 132 LayoutObject* renderer = current->renderer();
133 if (renderer && renderer->isListItem()) 133 if (renderer && renderer->isListItem())
134 return toRenderListItem(renderer); 134 return toRenderListItem(renderer);
135 135
136 // FIXME: Can this be optimized to skip the children of the elements wit hout a renderer? 136 // FIXME: Can this be optimized to skip the children of the elements wit hout a renderer?
137 current = NodeRenderingTraversal::next(*current, listNode); 137 current = NodeRenderingTraversal::next(*current, listNode);
138 } 138 }
139 139
140 return 0; 140 return 0;
141 } 141 }
142 142
143 // Returns the previous list item with respect to the DOM order. 143 // Returns the previous list item with respect to the DOM order.
144 static RenderListItem* previousListItem(const Node* listNode, const RenderListIt em* item) 144 static RenderListItem* previousListItem(const Node* listNode, const RenderListIt em* item)
145 { 145 {
146 Node* current = item->node(); 146 Node* current = item->node();
147 ASSERT(current); 147 ASSERT(current);
148 ASSERT(!current->document().childNeedsDistributionRecalc()); 148 ASSERT(!current->document().childNeedsDistributionRecalc());
149 for (current = NodeRenderingTraversal::previous(*current, listNode); current && current != listNode; current = NodeRenderingTraversal::previous(*current, li stNode)) { 149 for (current = NodeRenderingTraversal::previous(*current, listNode); current && current != listNode; current = NodeRenderingTraversal::previous(*current, li stNode)) {
150 RenderObject* renderer = current->renderer(); 150 LayoutObject* renderer = current->renderer();
151 if (!renderer || (renderer && !renderer->isListItem())) 151 if (!renderer || (renderer && !renderer->isListItem()))
152 continue; 152 continue;
153 Node* otherList = enclosingList(toRenderListItem(renderer)); 153 Node* otherList = enclosingList(toRenderListItem(renderer));
154 // This item is part of our current list, so it's what we're looking for . 154 // This item is part of our current list, so it's what we're looking for .
155 if (listNode == otherList) 155 if (listNode == otherList)
156 return toRenderListItem(renderer); 156 return toRenderListItem(renderer);
157 // We found ourself inside another list; lets skip the rest of it. 157 // We found ourself inside another list; lets skip the rest of it.
158 // Use nextIncludingPseudo() here because the other list itself may actu ally 158 // Use nextIncludingPseudo() here because the other list itself may actu ally
159 // be a list item itself. We need to examine it, so we do this to counte ract 159 // be a list item itself. We need to examine it, so we do this to counte ract
160 // the previousIncludingPseudo() that will be done by the loop. 160 // the previousIncludingPseudo() that will be done by the loop.
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
209 { 209 {
210 m_value = calcValue(); 210 m_value = calcValue();
211 m_isValueUpToDate = true; 211 m_isValueUpToDate = true;
212 } 212 }
213 213
214 bool RenderListItem::isEmpty() const 214 bool RenderListItem::isEmpty() const
215 { 215 {
216 return lastChild() == m_marker; 216 return lastChild() == m_marker;
217 } 217 }
218 218
219 static RenderObject* getParentOfFirstLineBox(RenderBlockFlow* curr, RenderObject * marker) 219 static LayoutObject* getParentOfFirstLineBox(RenderBlockFlow* curr, LayoutObject * marker)
220 { 220 {
221 RenderObject* firstChild = curr->firstChild(); 221 LayoutObject* firstChild = curr->firstChild();
222 if (!firstChild) 222 if (!firstChild)
223 return 0; 223 return 0;
224 224
225 bool inQuirksMode = curr->document().inQuirksMode(); 225 bool inQuirksMode = curr->document().inQuirksMode();
226 for (RenderObject* currChild = firstChild; currChild; currChild = currChild- >nextSibling()) { 226 for (LayoutObject* currChild = firstChild; currChild; currChild = currChild- >nextSibling()) {
227 if (currChild == marker) 227 if (currChild == marker)
228 continue; 228 continue;
229 229
230 if (currChild->isInline() && (!currChild->isRenderInline() || curr->gene ratesLineBoxesForInlineChild(currChild))) 230 if (currChild->isInline() && (!currChild->isRenderInline() || curr->gene ratesLineBoxesForInlineChild(currChild)))
231 return curr; 231 return curr;
232 232
233 if (currChild->isFloating() || currChild->isOutOfFlowPositioned()) 233 if (currChild->isFloating() || currChild->isOutOfFlowPositioned())
234 continue; 234 continue;
235 235
236 if (!currChild->isRenderBlockFlow() || (currChild->isBox() && toRenderBo x(currChild)->isWritingModeRoot())) 236 if (!currChild->isRenderBlockFlow() || (currChild->isBox() && toRenderBo x(currChild)->isWritingModeRoot()))
237 break; 237 break;
238 238
239 if (curr->isListItem() && inQuirksMode && currChild->node() && 239 if (curr->isListItem() && inQuirksMode && currChild->node() &&
240 (isHTMLUListElement(*currChild->node()) || isHTMLOListElement(*currC hild->node()))) 240 (isHTMLUListElement(*currChild->node()) || isHTMLOListElement(*currC hild->node())))
241 break; 241 break;
242 242
243 RenderObject* lineBox = getParentOfFirstLineBox(toRenderBlockFlow(currCh ild), marker); 243 LayoutObject* lineBox = getParentOfFirstLineBox(toRenderBlockFlow(currCh ild), marker);
244 if (lineBox) 244 if (lineBox)
245 return lineBox; 245 return lineBox;
246 } 246 }
247 247
248 return 0; 248 return 0;
249 } 249 }
250 250
251 void RenderListItem::updateValue() 251 void RenderListItem::updateValue()
252 { 252 {
253 if (!m_hasExplicitValue) { 253 if (!m_hasExplicitValue) {
254 m_isValueUpToDate = false; 254 m_isValueUpToDate = false;
255 if (m_marker) 255 if (m_marker)
256 m_marker->setNeedsLayoutAndPrefWidthsRecalcAndFullPaintInvalidation( ); 256 m_marker->setNeedsLayoutAndPrefWidthsRecalcAndFullPaintInvalidation( );
257 } 257 }
258 } 258 }
259 259
260 static RenderObject* firstNonMarkerChild(RenderObject* parent) 260 static LayoutObject* firstNonMarkerChild(LayoutObject* parent)
261 { 261 {
262 RenderObject* result = parent->slowFirstChild(); 262 LayoutObject* result = parent->slowFirstChild();
263 while (result && result->isListMarker()) 263 while (result && result->isListMarker())
264 result = result->nextSibling(); 264 result = result->nextSibling();
265 return result; 265 return result;
266 } 266 }
267 267
268 void RenderListItem::updateMarkerLocationAndInvalidateWidth() 268 void RenderListItem::updateMarkerLocationAndInvalidateWidth()
269 { 269 {
270 ASSERT(m_marker); 270 ASSERT(m_marker);
271 271
272 // FIXME: We should not modify the structure of the render tree 272 // FIXME: We should not modify the structure of the render tree
273 // during layout. crbug.com/370461 273 // during layout. crbug.com/370461
274 DeprecatedDisableModifyRenderTreeStructureAsserts disabler; 274 DeprecatedDisableModifyRenderTreeStructureAsserts disabler;
275 if (updateMarkerLocation()) { 275 if (updateMarkerLocation()) {
276 // If the marker is inside we need to redo the preferred width calculati ons 276 // If the marker is inside we need to redo the preferred width calculati ons
277 // as the size of the item now includes the size of the list marker. 277 // as the size of the item now includes the size of the list marker.
278 if (m_marker->isInside()) 278 if (m_marker->isInside())
279 containingBlock()->updateLogicalWidth(); 279 containingBlock()->updateLogicalWidth();
280 } 280 }
281 } 281 }
282 282
283 bool RenderListItem::updateMarkerLocation() 283 bool RenderListItem::updateMarkerLocation()
284 { 284 {
285 ASSERT(m_marker); 285 ASSERT(m_marker);
286 RenderObject* markerParent = m_marker->parent(); 286 LayoutObject* markerParent = m_marker->parent();
287 RenderObject* lineBoxParent = getParentOfFirstLineBox(this, m_marker); 287 LayoutObject* lineBoxParent = getParentOfFirstLineBox(this, m_marker);
288 if (!lineBoxParent) { 288 if (!lineBoxParent) {
289 // If the marker is currently contained inside an anonymous box, then we 289 // If the marker is currently contained inside an anonymous box, then we
290 // are the only item in that anonymous box (since no line box parent was 290 // are the only item in that anonymous box (since no line box parent was
291 // found). It's ok to just leave the marker where it is in this case. 291 // found). It's ok to just leave the marker where it is in this case.
292 if (markerParent && markerParent->isAnonymousBlock()) 292 if (markerParent && markerParent->isAnonymousBlock())
293 lineBoxParent = markerParent; 293 lineBoxParent = markerParent;
294 else 294 else
295 lineBoxParent = this; 295 lineBoxParent = this;
296 } 296 }
297 297
(...skipping 216 matching lines...) Expand 10 before | Expand all | Expand 10 after
514 // assume that all the following ones have too. 514 // assume that all the following ones have too.
515 // This gives us the opportunity to stop here and avoid 515 // This gives us the opportunity to stop here and avoid
516 // marking the same nodes again. 516 // marking the same nodes again.
517 break; 517 break;
518 } 518 }
519 item->updateValue(); 519 item->updateValue();
520 } 520 }
521 } 521 }
522 522
523 } // namespace blink 523 } // namespace blink
OLDNEW
« no previous file with comments | « Source/core/rendering/RenderListItem.h ('k') | Source/core/rendering/RenderListMarker.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698