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

Side by Side Diff: third_party/WebKit/Source/core/layout/LayoutListItem.cpp

Issue 1415493008: ASSERTION FAILED: !m_overflow (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: nittified! Created 5 years, 1 month 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
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 332 matching lines...) Expand 10 before | Expand all | Expand 10 after
343 } 343 }
344 344
345 bool adjustOverflow = false; 345 bool adjustOverflow = false;
346 LayoutUnit markerLogicalLeft; 346 LayoutUnit markerLogicalLeft;
347 RootInlineBox& root = m_marker->inlineBoxWrapper()->root(); 347 RootInlineBox& root = m_marker->inlineBoxWrapper()->root();
348 bool hitSelfPaintingLayer = false; 348 bool hitSelfPaintingLayer = false;
349 349
350 LayoutUnit lineTop = root.lineTop(); 350 LayoutUnit lineTop = root.lineTop();
351 LayoutUnit lineBottom = root.lineBottom(); 351 LayoutUnit lineBottom = root.lineBottom();
352 352
353 // TODO(jchaffraix): Propagating the overflow to the line boxes seems
354 // pretty wrong (https://crbug.com/554160).
353 // FIXME: Need to account for relative positioning in the layout overflo w. 355 // FIXME: Need to account for relative positioning in the layout overflo w.
354 if (style()->isLeftToRightDirection()) { 356 if (style()->isLeftToRightDirection()) {
355 LayoutUnit leftLineOffset = logicalLeftOffsetForLine(blockOffset, lo gicalLeftOffsetForLine(blockOffset, false), false); 357 LayoutUnit leftLineOffset = logicalLeftOffsetForLine(blockOffset, lo gicalLeftOffsetForLine(blockOffset, false), false);
356 markerLogicalLeft = leftLineOffset - lineOffset - paddingStart() - b orderStart() + m_marker->marginStart(); 358 markerLogicalLeft = leftLineOffset - lineOffset - paddingStart() - b orderStart() + m_marker->marginStart();
357 m_marker->inlineBoxWrapper()->moveInInlineDirection((markerLogicalLe ft - markerOldLogicalLeft).toFloat()); 359 m_marker->inlineBoxWrapper()->moveInInlineDirection((markerLogicalLe ft - markerOldLogicalLeft).toFloat());
358 for (InlineFlowBox* box = m_marker->inlineBoxWrapper()->parent(); bo x; box = box->parent()) { 360 for (InlineFlowBox* box = m_marker->inlineBoxWrapper()->parent(); bo x; box = box->parent()) {
359 LayoutRect newLogicalVisualOverflowRect = box->logicalVisualOver flowRect(lineTop, lineBottom); 361 LayoutRect newLogicalVisualOverflowRect = box->logicalVisualOver flowRect(lineTop, lineBottom);
360 LayoutRect newLogicalLayoutOverflowRect = box->logicalLayoutOver flowRect(lineTop, lineBottom); 362 LayoutRect newLogicalLayoutOverflowRect = box->logicalLayoutOver flowRect(lineTop, lineBottom);
361 if (markerLogicalLeft < newLogicalVisualOverflowRect.x() && !hit SelfPaintingLayer) { 363 if (markerLogicalLeft < newLogicalVisualOverflowRect.x() && !hit SelfPaintingLayer) {
362 newLogicalVisualOverflowRect.setWidth(newLogicalVisualOverfl owRect.maxX() - markerLogicalLeft); 364 newLogicalVisualOverflowRect.setWidth(newLogicalVisualOverfl owRect.maxX() - markerLogicalLeft);
363 newLogicalVisualOverflowRect.setX(markerLogicalLeft); 365 newLogicalVisualOverflowRect.setX(markerLogicalLeft);
364 if (box == root) 366 if (box == root)
365 adjustOverflow = true; 367 adjustOverflow = true;
366 } 368 }
367 if (markerLogicalLeft < newLogicalLayoutOverflowRect.x()) { 369 if (markerLogicalLeft < newLogicalLayoutOverflowRect.x()) {
368 newLogicalLayoutOverflowRect.setWidth(newLogicalLayoutOverfl owRect.maxX() - markerLogicalLeft); 370 newLogicalLayoutOverflowRect.setWidth(newLogicalLayoutOverfl owRect.maxX() - markerLogicalLeft);
369 newLogicalLayoutOverflowRect.setX(markerLogicalLeft); 371 newLogicalLayoutOverflowRect.setX(markerLogicalLeft);
370 if (box == root) 372 if (box == root)
371 adjustOverflow = true; 373 adjustOverflow = true;
372 } 374 }
373 box->setOverflowFromLogicalRects(newLogicalLayoutOverflowRect, n ewLogicalVisualOverflowRect, lineTop, lineBottom); 375 box->overrideOverflowFromLogicalRects(newLogicalLayoutOverflowRe ct, newLogicalVisualOverflowRect, lineTop, lineBottom);
374 if (box->boxModelObject().hasSelfPaintingLayer()) 376 if (box->boxModelObject().hasSelfPaintingLayer())
375 hitSelfPaintingLayer = true; 377 hitSelfPaintingLayer = true;
376 } 378 }
377 } else { 379 } else {
378 LayoutUnit rightLineOffset = logicalRightOffsetForLine(blockOffset, logicalRightOffsetForLine(blockOffset, false), false); 380 LayoutUnit rightLineOffset = logicalRightOffsetForLine(blockOffset, logicalRightOffsetForLine(blockOffset, false), false);
379 markerLogicalLeft = rightLineOffset - lineOffset + paddingStart() + borderStart() + m_marker->marginEnd(); 381 markerLogicalLeft = rightLineOffset - lineOffset + paddingStart() + borderStart() + m_marker->marginEnd();
380 m_marker->inlineBoxWrapper()->moveInInlineDirection((markerLogicalLe ft - markerOldLogicalLeft).toFloat()); 382 m_marker->inlineBoxWrapper()->moveInInlineDirection((markerLogicalLe ft - markerOldLogicalLeft).toFloat());
381 for (InlineFlowBox* box = m_marker->inlineBoxWrapper()->parent(); bo x; box = box->parent()) { 383 for (InlineFlowBox* box = m_marker->inlineBoxWrapper()->parent(); bo x; box = box->parent()) {
382 LayoutRect newLogicalVisualOverflowRect = box->logicalVisualOver flowRect(lineTop, lineBottom); 384 LayoutRect newLogicalVisualOverflowRect = box->logicalVisualOver flowRect(lineTop, lineBottom);
383 LayoutRect newLogicalLayoutOverflowRect = box->logicalLayoutOver flowRect(lineTop, lineBottom); 385 LayoutRect newLogicalLayoutOverflowRect = box->logicalLayoutOver flowRect(lineTop, lineBottom);
384 if (markerLogicalLeft + m_marker->logicalWidth() > newLogicalVis ualOverflowRect.maxX() && !hitSelfPaintingLayer) { 386 if (markerLogicalLeft + m_marker->logicalWidth() > newLogicalVis ualOverflowRect.maxX() && !hitSelfPaintingLayer) {
385 newLogicalVisualOverflowRect.setWidth(markerLogicalLeft + m_ marker->logicalWidth() - newLogicalVisualOverflowRect.x()); 387 newLogicalVisualOverflowRect.setWidth(markerLogicalLeft + m_ marker->logicalWidth() - newLogicalVisualOverflowRect.x());
386 if (box == root) 388 if (box == root)
387 adjustOverflow = true; 389 adjustOverflow = true;
388 } 390 }
389 if (markerLogicalLeft + m_marker->logicalWidth() > newLogicalLay outOverflowRect.maxX()) { 391 if (markerLogicalLeft + m_marker->logicalWidth() > newLogicalLay outOverflowRect.maxX()) {
390 newLogicalLayoutOverflowRect.setWidth(markerLogicalLeft + m_ marker->logicalWidth() - newLogicalLayoutOverflowRect.x()); 392 newLogicalLayoutOverflowRect.setWidth(markerLogicalLeft + m_ marker->logicalWidth() - newLogicalLayoutOverflowRect.x());
391 if (box == root) 393 if (box == root)
392 adjustOverflow = true; 394 adjustOverflow = true;
393 } 395 }
394 box->setOverflowFromLogicalRects(newLogicalLayoutOverflowRect, n ewLogicalVisualOverflowRect, lineTop, lineBottom); 396 box->overrideOverflowFromLogicalRects(newLogicalLayoutOverflowRe ct, newLogicalVisualOverflowRect, lineTop, lineBottom);
395 397
396 if (box->boxModelObject().hasSelfPaintingLayer()) 398 if (box->boxModelObject().hasSelfPaintingLayer())
397 hitSelfPaintingLayer = true; 399 hitSelfPaintingLayer = true;
398 } 400 }
399 } 401 }
400 402
401 if (adjustOverflow) { 403 if (adjustOverflow) {
402 LayoutRect markerRect(LayoutPoint(markerLogicalLeft + lineOffset, bl ockOffset), m_marker->size()); 404 LayoutRect markerRect(LayoutPoint(markerLogicalLeft + lineOffset, bl ockOffset), m_marker->size());
403 if (!style()->isHorizontalWritingMode()) 405 if (!style()->isHorizontalWritingMode())
404 markerRect = markerRect.transposedRect(); 406 markerRect = markerRect.transposedRect();
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
509 // assume that all the following ones have too. 511 // assume that all the following ones have too.
510 // This gives us the opportunity to stop here and avoid 512 // This gives us the opportunity to stop here and avoid
511 // marking the same nodes again. 513 // marking the same nodes again.
512 break; 514 break;
513 } 515 }
514 item->updateValue(); 516 item->updateValue();
515 } 517 }
516 } 518 }
517 519
518 } // namespace blink 520 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698