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

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

Issue 2471933002: Reland of Improve how the column balancer handles top margins on floats. (Closed)
Patch Set: Created 4 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
« no previous file with comments | « third_party/WebKit/Source/core/layout/LayoutBox.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. 6 * Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010 Apple Inc.
7 * All rights reserved. 7 * All rights reserved.
8 * Copyright (C) 2013 Adobe Systems Incorporated. All rights reserved. 8 * Copyright (C) 2013 Adobe Systems Incorporated. All rights reserved.
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 688 matching lines...) Expand 10 before | Expand all | Expand 10 after
699 m_frameRect.height().toFloat()); 699 m_frameRect.height().toFloat());
700 } 700 }
701 701
702 void LayoutBox::updateLayerTransformAfterLayout() { 702 void LayoutBox::updateLayerTransformAfterLayout() {
703 // Transform-origin depends on box size, so we need to update the layer 703 // Transform-origin depends on box size, so we need to update the layer
704 // transform after layout. 704 // transform after layout.
705 if (hasLayer()) 705 if (hasLayer())
706 layer()->updateTransformationMatrix(); 706 layer()->updateTransformationMatrix();
707 } 707 }
708 708
709 LayoutUnit LayoutBox::logicalHeightIncludingOverflow() const { 709 LayoutUnit LayoutBox::logicalHeightWithVisibleOverflow() const {
710 if (!m_overflow) 710 if (!m_overflow || hasOverflowClip())
711 return logicalHeight(); 711 return logicalHeight();
712 LayoutRect overflow = layoutOverflowRect(); 712 LayoutRect overflow = layoutOverflowRect();
713 if (style()->isHorizontalWritingMode()) 713 if (style()->isHorizontalWritingMode())
714 return overflow.maxY(); 714 return overflow.maxY();
715 return overflow.maxX(); 715 return overflow.maxX();
716 } 716 }
717 717
718 LayoutUnit LayoutBox::constrainLogicalWidthByMinMax(LayoutUnit logicalWidth, 718 LayoutUnit LayoutBox::constrainLogicalWidthByMinMax(LayoutUnit logicalWidth,
719 LayoutUnit availableWidth, 719 LayoutUnit availableWidth,
720 LayoutBlock* cb) const { 720 LayoutBlock* cb) const {
(...skipping 3984 matching lines...) Expand 10 before | Expand all | Expand 10 after
4705 } 4705 }
4706 4706
4707 void LayoutBox::updateFragmentationInfoForChild(LayoutBox& child) { 4707 void LayoutBox::updateFragmentationInfoForChild(LayoutBox& child) {
4708 LayoutState* layoutState = view()->layoutState(); 4708 LayoutState* layoutState = view()->layoutState();
4709 DCHECK(layoutState->isPaginated()); 4709 DCHECK(layoutState->isPaginated());
4710 child.setOffsetToNextPage(LayoutUnit()); 4710 child.setOffsetToNextPage(LayoutUnit());
4711 if (!pageLogicalHeightForOffset(child.logicalTop())) 4711 if (!pageLogicalHeightForOffset(child.logicalTop()))
4712 return; 4712 return;
4713 4713
4714 LayoutUnit logicalTop = child.logicalTop(); 4714 LayoutUnit logicalTop = child.logicalTop();
4715 LayoutUnit logicalHeight = child.logicalHeightIncludingOverflow(); 4715 LayoutUnit logicalHeight = child.logicalHeightWithVisibleOverflow();
4716 LayoutUnit spaceLeft = 4716 LayoutUnit spaceLeft =
4717 pageRemainingLogicalHeightForOffset(logicalTop, AssociateWithLatterPage); 4717 pageRemainingLogicalHeightForOffset(logicalTop, AssociateWithLatterPage);
4718 if (spaceLeft < logicalHeight) 4718 if (spaceLeft < logicalHeight)
4719 child.setOffsetToNextPage(spaceLeft); 4719 child.setOffsetToNextPage(spaceLeft);
4720 } 4720 }
4721 4721
4722 bool LayoutBox::childNeedsRelayoutForPagination(const LayoutBox& child) const { 4722 bool LayoutBox::childNeedsRelayoutForPagination(const LayoutBox& child) const {
4723 // TODO(mstensho): Should try to get this to work for floats too, instead of 4723 // TODO(mstensho): Should try to get this to work for floats too, instead of
4724 // just marking and bailing here. 4724 // just marking and bailing here.
4725 if (child.isFloating()) 4725 if (child.isFloating())
4726 return true; 4726 return true;
4727 LayoutUnit logicalTop = child.logicalTop(); 4727 LayoutUnit logicalTop = child.logicalTop();
4728 // Figure out if we really need to force re-layout of the child. We only need 4728 // Figure out if we really need to force re-layout of the child. We only need
4729 // to do this if there's a chance that we need to recalculate pagination 4729 // to do this if there's a chance that we need to recalculate pagination
4730 // struts inside. 4730 // struts inside.
4731 if (LayoutUnit pageLogicalHeight = pageLogicalHeightForOffset(logicalTop)) { 4731 if (LayoutUnit pageLogicalHeight = pageLogicalHeightForOffset(logicalTop)) {
4732 LayoutUnit logicalHeight = child.logicalHeightIncludingOverflow(); 4732 LayoutUnit logicalHeight = child.logicalHeightWithVisibleOverflow();
4733 LayoutUnit remainingSpace = pageRemainingLogicalHeightForOffset( 4733 LayoutUnit remainingSpace = pageRemainingLogicalHeightForOffset(
4734 logicalTop, AssociateWithLatterPage); 4734 logicalTop, AssociateWithLatterPage);
4735 if (child.offsetToNextPage()) { 4735 if (child.offsetToNextPage()) {
4736 // We need to relayout unless we're going to break at the exact same 4736 // We need to relayout unless we're going to break at the exact same
4737 // location as before. 4737 // location as before.
4738 if (child.offsetToNextPage() != remainingSpace) 4738 if (child.offsetToNextPage() != remainingSpace)
4739 return true; 4739 return true;
4740 } else if (logicalHeight > remainingSpace) { 4740 } else if (logicalHeight > remainingSpace) {
4741 // Last time we laid out this child, we didn't need to break, but now we 4741 // Last time we laid out this child, we didn't need to break, but now we
4742 // have to. So we need to relayout. 4742 // have to. So we need to relayout.
(...skipping 895 matching lines...) Expand 10 before | Expand all | Expand 10 after
5638 LayoutRect rect = frameRect(); 5638 LayoutRect rect = frameRect();
5639 5639
5640 LayoutBlock* block = containingBlock(); 5640 LayoutBlock* block = containingBlock();
5641 if (block) 5641 if (block)
5642 block->adjustChildDebugRect(rect); 5642 block->adjustChildDebugRect(rect);
5643 5643
5644 return rect; 5644 return rect;
5645 } 5645 }
5646 5646
5647 } // namespace blink 5647 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/layout/LayoutBox.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698