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

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

Issue 360613003: Ensure we compute the min and max height of replaced elements to 'none' or 0 when appropriate. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 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
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 2753 matching lines...) Expand 10 before | Expand all | Expand 10 after
2764 2764
2765 ASSERT_NOT_REACHED(); 2765 ASSERT_NOT_REACHED();
2766 return 0; 2766 return 0;
2767 } 2767 }
2768 2768
2769 LayoutUnit RenderBox::computeReplacedLogicalHeight() const 2769 LayoutUnit RenderBox::computeReplacedLogicalHeight() const
2770 { 2770 {
2771 return computeReplacedLogicalHeightRespectingMinMaxHeight(computeReplacedLog icalHeightUsing(style()->logicalHeight())); 2771 return computeReplacedLogicalHeightRespectingMinMaxHeight(computeReplacedLog icalHeightUsing(style()->logicalHeight()));
2772 } 2772 }
2773 2773
2774 bool RenderBox::logicalHeightComputesAsNone(SizeType sizeType) const
2775 {
2776 ASSERT(sizeType == MinSize || sizeType == MaxSize);
2777 Length logicalHeightLength = sizeType == MinSize ? style()->logicalMinHeight () : style()->logicalMaxHeight();
2778
2779 if (logicalHeightLength == (sizeType == MinSize ? RenderStyle::initialMinSiz e() : RenderStyle::initialMaxSize()))
2780 return true;
2781
2782 if (!logicalHeightLength.isPercent() || isOutOfFlowPositioned() || document( ).inQuirksMode())
leviw_travelin_and_unemployed 2014/07/07 18:02:35 Why the Quirks Mode check here? Is this tested any
2783 return false;
2784
2785 // Anonymous block boxes are ignored when resolving percentage values that w ould refer to it:
2786 // the closest non-anonymous ancestor box is used instead.
2787 RenderBlock* cb = containingBlock();
2788 while (cb->isAnonymous())
2789 cb = cb->containingBlock();
2790
2791 return cb->hasAutoHeightOrContainingBlockWithAutoHeight();
2792 }
2793
2774 LayoutUnit RenderBox::computeReplacedLogicalHeightRespectingMinMaxHeight(LayoutU nit logicalHeight) const 2794 LayoutUnit RenderBox::computeReplacedLogicalHeightRespectingMinMaxHeight(LayoutU nit logicalHeight) const
2775 { 2795 {
2776 LayoutUnit minLogicalHeight = computeReplacedLogicalHeightUsing(style()->log icalMinHeight()); 2796 // If the height of the containing block is not specified explicitly (i.e., it depends on content height), and this element is not absolutely positioned,
2777 LayoutUnit maxLogicalHeight = style()->logicalMaxHeight().isUndefined() ? lo gicalHeight : computeReplacedLogicalHeightUsing(style()->logicalMaxHeight()); 2797 // the percentage value is treated as '0' (for 'min-height') or 'none' (for 'max-height').
2798 LayoutUnit minLogicalHeight = logicalHeightComputesAsNone(MinSize) ? LayoutU nit() : computeReplacedLogicalHeightUsing(style()->logicalMinHeight());
esprehn 2014/07/07 18:15:53 computeReplacedLogicalHeightUsing should just know
2799 LayoutUnit maxLogicalHeight = logicalHeightComputesAsNone(MaxSize) ? logical Height : computeReplacedLogicalHeightUsing(style()->logicalMaxHeight());
2778 return std::max(minLogicalHeight, std::min(logicalHeight, maxLogicalHeight)) ; 2800 return std::max(minLogicalHeight, std::min(logicalHeight, maxLogicalHeight)) ;
2779 } 2801 }
2780 2802
2781 LayoutUnit RenderBox::computeReplacedLogicalHeightUsing(const Length& logicalHei ght) const 2803 LayoutUnit RenderBox::computeReplacedLogicalHeightUsing(const Length& logicalHei ght) const
2782 { 2804 {
2783 switch (logicalHeight.type()) { 2805 switch (logicalHeight.type()) {
2784 case Fixed: 2806 case Fixed:
2785 return adjustContentBoxLogicalHeightForBoxSizing(logicalHeight.value ()); 2807 return adjustContentBoxLogicalHeightForBoxSizing(logicalHeight.value ());
2786 case Percent: 2808 case Percent:
2787 case Calculated: 2809 case Calculated:
(...skipping 1824 matching lines...) Expand 10 before | Expand all | Expand 10 after
4612 return 0; 4634 return 0;
4613 4635
4614 if (!layoutState && !flowThreadContainingBlock()) 4636 if (!layoutState && !flowThreadContainingBlock())
4615 return 0; 4637 return 0;
4616 4638
4617 RenderBlock* containerBlock = containingBlock(); 4639 RenderBlock* containerBlock = containingBlock();
4618 return containerBlock->offsetFromLogicalTopOfFirstPage() + logicalTop(); 4640 return containerBlock->offsetFromLogicalTopOfFirstPage() + logicalTop();
4619 } 4641 }
4620 4642
4621 } // namespace WebCore 4643 } // namespace WebCore
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698