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

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

Issue 25048006: Attempt to clean up requiresLayoutToDetermineWidth to be more clear (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: MATCH THE CHUNKS HARDER Created 7 years, 2 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/RenderBox.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) 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 * (C) 2005 Allan Sandfeld Jensen (kde@carewolf.com) 4 * (C) 2005 Allan Sandfeld Jensen (kde@carewolf.com)
5 * (C) 2005, 2006 Samuel Weinig (sam.weinig@gmail.com) 5 * (C) 2005, 2006 Samuel Weinig (sam.weinig@gmail.com)
6 * Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010 Apple Inc. All rights reserv ed. 6 * Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010 Apple Inc. All rights reserv ed.
7 * Copyright (C) 2013 Adobe Systems Incorporated. All rights reserved. 7 * Copyright (C) 2013 Adobe Systems Incorporated. All rights reserved.
8 * 8 *
9 * This library is free software; you can redistribute it and/or 9 * This library is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU Library General Public 10 * modify it under the terms of the GNU Library General Public
(...skipping 390 matching lines...) Expand 10 before | Expand all | Expand 10 after
401 int RenderBox::pixelSnappedOffsetWidth() const 401 int RenderBox::pixelSnappedOffsetWidth() const
402 { 402 {
403 return snapSizeToPixel(offsetWidth(), x() + clientLeft()); 403 return snapSizeToPixel(offsetWidth(), x() + clientLeft());
404 } 404 }
405 405
406 int RenderBox::pixelSnappedOffsetHeight() const 406 int RenderBox::pixelSnappedOffsetHeight() const
407 { 407 {
408 return snapSizeToPixel(offsetHeight(), y() + clientTop()); 408 return snapSizeToPixel(offsetHeight(), y() + clientTop());
409 } 409 }
410 410
411 bool RenderBox::requiresLayoutToDetermineWidth() const 411 bool RenderBox::canDetermineWidthWithoutLayout() const
412 { 412 {
413 // FIXME: There are likely many subclasses of RenderBlockFlow which
Julien - ping for review 2013/09/30 16:28:06 Maybe also classes outside RenderBlockFlow?
414 // cannot determine their layout just from style!
415 // Perhaps we should create a "PlainRenderBlockFlow"
416 // and move this optimization there?
417 if (!isRenderBlockFlow()
418 // Flexbox items can be expanded beyond their width.
419 || isFlexItemIncludingDeprecated()
420 // Table Layout controls cell size, width is ignored.
Julien - ping for review 2013/09/30 16:28:06 width is not ignored when doing a table layout. On
421 || isTableCell())
422 return false;
423
413 RenderStyle* style = this->style(); 424 RenderStyle* style = this->style();
414 return !style->width().isFixed() 425 return style->width().isFixed()
415 || !style->minWidth().isFixed() 426 && style->minWidth().isFixed()
416 || (!style->maxWidth().isUndefined() && !style->maxWidth().isFixed()) 427 && (style->maxWidth().isUndefined() || style->maxWidth().isFixed())
417 || !style->paddingLeft().isFixed() 428 && style->paddingLeft().isFixed()
418 || !style->paddingRight().isFixed() 429 && style->paddingRight().isFixed()
419 || style->resize() != RESIZE_NONE 430 && style->boxSizing() == CONTENT_BOX;
420 || style->boxSizing() == BORDER_BOX
421 || !isRenderBlock()
422 || !isRenderBlockFlow()
423 || isFlexItemIncludingDeprecated()
424 // TableCells can expand beyond a specified width.
425 || isTableCell();
426 } 431 }
427 432
428 LayoutUnit RenderBox::fixedOffsetWidth() const 433 LayoutUnit RenderBox::fixedOffsetWidth() const
429 { 434 {
430 ASSERT(!requiresLayoutToDetermineWidth()); 435 ASSERT(canDetermineWidthWithoutLayout());
431 436
432 RenderStyle* style = this->style(); 437 RenderStyle* style = this->style();
433 438
434 LayoutUnit width = std::max(LayoutUnit(style->minWidth().value()), LayoutUni t(style->width().value())); 439 LayoutUnit width = std::max(LayoutUnit(style->minWidth().value()), LayoutUni t(style->width().value()));
435 if (style->maxWidth().isFixed()) 440 if (style->maxWidth().isFixed())
436 width = std::min(LayoutUnit(style->maxWidth().value()), width); 441 width = std::min(LayoutUnit(style->maxWidth().value()), width);
437 442
438 LayoutUnit borderLeft = style->borderLeft().nonZero() ? style->borderLeft(). width() : 0; 443 LayoutUnit borderLeft = style->borderLeft().nonZero() ? style->borderLeft(). width() : 0;
439 LayoutUnit borderRight = style->borderRight().nonZero() ? style->borderRight ().width() : 0; 444 LayoutUnit borderRight = style->borderRight().nonZero() ? style->borderRight ().width() : 0;
440 445
(...skipping 1640 matching lines...) Expand 10 before | Expand all | Expand 10 after
2081 float maxWidth = 0; 2086 float maxWidth = 0;
2082 for (RenderObject* child = renderer->firstChild(); child; child = child->nex tSibling()) { 2087 for (RenderObject* child = renderer->firstChild(); child; child = child->nex tSibling()) {
2083 if (!child->isListItem()) 2088 if (!child->isListItem())
2084 continue; 2089 continue;
2085 2090
2086 RenderBox* listItem = toRenderBox(child); 2091 RenderBox* listItem = toRenderBox(child);
2087 for (RenderObject* itemChild = listItem->firstChild(); itemChild; itemCh ild = itemChild->nextSibling()) { 2092 for (RenderObject* itemChild = listItem->firstChild(); itemChild; itemCh ild = itemChild->nextSibling()) {
2088 if (!itemChild->isListMarker()) 2093 if (!itemChild->isListMarker())
2089 continue; 2094 continue;
2090 RenderBox* itemMarker = toRenderBox(itemChild); 2095 RenderBox* itemMarker = toRenderBox(itemChild);
2091 if (itemMarker->requiresLayoutToDetermineWidth() && itemMarker->need sLayout()) { 2096 // FIXME: canDetermineWidthWithoutLayout expects us to use fixedOffs etWidth, which this code
2097 // does not do! This check is likely wrong.
2098 if (!itemMarker->canDetermineWidthWithoutLayout() && itemMarker->nee dsLayout()) {
2092 // Make sure to compute the autosized width. 2099 // Make sure to compute the autosized width.
2093 itemMarker->layout(); 2100 itemMarker->layout();
Julien - ping for review 2013/09/30 16:28:06 layoutIfNeeded()?
2094 } 2101 }
2095 maxWidth = max<float>(maxWidth, toRenderListMarker(itemMarker)->logi calWidth().toFloat()); 2102 maxWidth = max<float>(maxWidth, toRenderListMarker(itemMarker)->logi calWidth().toFloat());
2096 break; 2103 break;
2097 } 2104 }
2098 } 2105 }
2099 return maxWidth; 2106 return maxWidth;
2100 } 2107 }
2101 2108
2102 void RenderBox::computeLogicalWidthInRegion(LogicalExtentComputedValues& compute dValues, RenderRegion* region) const 2109 void RenderBox::computeLogicalWidthInRegion(LogicalExtentComputedValues& compute dValues, RenderRegion* region) const
2103 { 2110 {
(...skipping 2663 matching lines...) Expand 10 before | Expand all | Expand 10 after
4767 return 0; 4774 return 0;
4768 4775
4769 if (!layoutState && !flowThreadContainingBlock()) 4776 if (!layoutState && !flowThreadContainingBlock())
4770 return 0; 4777 return 0;
4771 4778
4772 RenderBlock* containerBlock = containingBlock(); 4779 RenderBlock* containerBlock = containingBlock();
4773 return containerBlock->offsetFromLogicalTopOfFirstPage() + logicalTop(); 4780 return containerBlock->offsetFromLogicalTopOfFirstPage() + logicalTop();
4774 } 4781 }
4775 4782
4776 } // namespace WebCore 4783 } // namespace WebCore
OLDNEW
« no previous file with comments | « Source/core/rendering/RenderBox.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698