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

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

Issue 18496005: Dirty line boxes when moving list marker from another block. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 7 years, 5 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 | « LayoutTests/fast/lists/list-inside-columns-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) 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 250 matching lines...) Expand 10 before | Expand all | Expand 10 after
261 RenderObject* result = parent->firstChild(); 261 RenderObject* result = parent->firstChild();
262 while (result && result->isListMarker()) 262 while (result && result->isListMarker())
263 result = result->nextSibling(); 263 result = result->nextSibling();
264 return result; 264 return result;
265 } 265 }
266 266
267 void RenderListItem::updateMarkerLocation() 267 void RenderListItem::updateMarkerLocation()
268 { 268 {
269 // Sanity check the location of our marker. 269 // Sanity check the location of our marker.
270 if (m_marker) { 270 if (m_marker) {
271 RenderObject* markerPar = m_marker->parent(); 271 RenderObject* markerPar = m_marker->parent();
eae 2013/07/03 18:18:46 Could you rename this to markerParent while you're
272 RenderObject* lineBoxParent = getParentOfFirstLineBox(this, m_marker); 272 RenderObject* lineBoxParent = getParentOfFirstLineBox(this, m_marker);
273 if (!lineBoxParent) { 273 if (!lineBoxParent) {
274 // If the marker is currently contained inside an anonymous box, 274 // If the marker is currently contained inside an anonymous box,
275 // then we are the only item in that anonymous box (since no line bo x 275 // then we are the only item in that anonymous box (since no line bo x
276 // parent was found). It's ok to just leave the marker where it is 276 // parent was found). It's ok to just leave the marker where it is
277 // in this case. 277 // in this case.
278 if (markerPar && markerPar->isAnonymousBlock()) 278 if (markerPar && markerPar->isAnonymousBlock())
279 lineBoxParent = markerPar; 279 lineBoxParent = markerPar;
280 else 280 else
281 lineBoxParent = this; 281 lineBoxParent = this;
282 } 282 }
283 283
284 if (markerPar != lineBoxParent || m_marker->preferredLogicalWidthsDirty( )) { 284 if (markerPar != lineBoxParent || m_marker->preferredLogicalWidthsDirty( )) {
285 // Removing and adding the marker can trigger repainting in 285 // Removing and adding the marker can trigger repainting in
286 // containers other than ourselves, so we need to disable LayoutStat e. 286 // containers other than ourselves, so we need to disable LayoutStat e.
287 LayoutStateDisabler layoutStateDisabler(view()); 287 LayoutStateDisabler layoutStateDisabler(view());
288 updateFirstLetter(); 288 updateFirstLetter();
289 m_marker->remove(); 289 m_marker->remove();
290 if (markerPar)
291 markerPar->dirtyLinesFromChangedChild(m_marker);
290 if (!lineBoxParent) 292 if (!lineBoxParent)
291 lineBoxParent = this; 293 lineBoxParent = this;
292 lineBoxParent->addChild(m_marker, firstNonMarkerChild(lineBoxParent) ); 294 lineBoxParent->addChild(m_marker, firstNonMarkerChild(lineBoxParent) );
293 m_marker->updateMarginsAndContent(); 295 m_marker->updateMarginsAndContent();
294 // If markerPar is an anonymous block that has lost all its children , destroy it. 296 // If markerPar is an anonymous block that has lost all its children , destroy it.
295 if (markerPar && markerPar->isAnonymousBlock() && !markerPar->firstC hild() && !toRenderBlock(markerPar)->continuation()) 297 if (markerPar && markerPar->isAnonymousBlock() && !markerPar->firstC hild() && !toRenderBlock(markerPar)->continuation())
296 markerPar->destroy(); 298 markerPar->destroy();
297 } 299 }
298 } 300 }
299 } 301 }
(...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after
503 // assume that all the following ones have too. 505 // assume that all the following ones have too.
504 // This gives us the opportunity to stop here and avoid 506 // This gives us the opportunity to stop here and avoid
505 // marking the same nodes again. 507 // marking the same nodes again.
506 break; 508 break;
507 } 509 }
508 item->updateValue(); 510 item->updateValue();
509 } 511 }
510 } 512 }
511 513
512 } // namespace WebCore 514 } // namespace WebCore
OLDNEW
« no previous file with comments | « LayoutTests/fast/lists/list-inside-columns-crash-expected.txt ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698