OLD | NEW |
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) 2007 David Smith (catfish.man@gmail.com) | 4 * (C) 2007 David Smith (catfish.man@gmail.com) |
5 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. | 5 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. |
6 * All rights reserved. | 6 * All rights reserved. |
7 * Copyright (C) Research In Motion Limited 2010. All rights reserved. | 7 * Copyright (C) Research In Motion Limited 2010. 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 1705 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1716 if (!curr->IsFloatingOrOutOfFlowPositioned()) { | 1716 if (!curr->IsFloatingOrOutOfFlowPositioned()) { |
1717 int result = curr->FirstLineBoxBaseline(); | 1717 int result = curr->FirstLineBoxBaseline(); |
1718 if (result != -1) | 1718 if (result != -1) |
1719 return (curr->LogicalTop() + result) | 1719 return (curr->LogicalTop() + result) |
1720 .ToInt(); // Translate to our coordinate space. | 1720 .ToInt(); // Translate to our coordinate space. |
1721 } | 1721 } |
1722 } | 1722 } |
1723 return -1; | 1723 return -1; |
1724 } | 1724 } |
1725 | 1725 |
| 1726 bool LayoutBlock::UseLogicalBottomMarginEdgeForInlineBlockBaseline() const { |
| 1727 // CSS2.1 states that the baseline of an 'inline-block' is: |
| 1728 // the baseline of the last line box in the normal flow, unless it has |
| 1729 // either no in-flow line boxes or if its 'overflow' property has a computed |
| 1730 // value other than 'visible', in which case the baseline is the bottom |
| 1731 // margin edge. |
| 1732 // We likewise avoid using the last line box in the case of size containment, |
| 1733 // where the block's contents shouldn't be considered when laying out its |
| 1734 // ancestors or siblings. |
| 1735 return (!Style()->IsOverflowVisible() && |
| 1736 !ShouldIgnoreOverflowPropertyForInlineBlockBaseline()) || |
| 1737 Style()->ContainsSize(); |
| 1738 } |
| 1739 |
1726 int LayoutBlock::InlineBlockBaseline(LineDirectionMode line_direction) const { | 1740 int LayoutBlock::InlineBlockBaseline(LineDirectionMode line_direction) const { |
1727 DCHECK(!ChildrenInline()); | 1741 DCHECK(!ChildrenInline()); |
1728 if ((!Style()->IsOverflowVisible() && | 1742 if (UseLogicalBottomMarginEdgeForInlineBlockBaseline()) { |
1729 !ShouldIgnoreOverflowPropertyForInlineBlockBaseline()) || | |
1730 Style()->ContainsSize()) { | |
1731 // We are not calling LayoutBox::baselinePosition here because the caller | 1743 // We are not calling LayoutBox::baselinePosition here because the caller |
1732 // should add the margin-top/margin-right, not us. | 1744 // should add the margin-top/margin-right, not us. |
1733 return (line_direction == kHorizontalLine ? Size().Height() + MarginBottom() | 1745 return (line_direction == kHorizontalLine ? Size().Height() + MarginBottom() |
1734 : Size().Width() + MarginLeft()) | 1746 : Size().Width() + MarginLeft()) |
1735 .ToInt(); | 1747 .ToInt(); |
1736 } | 1748 } |
1737 | 1749 |
1738 if (IsWritingModeRoot() && !IsRubyRun()) | 1750 if (IsWritingModeRoot() && !IsRubyRun()) |
1739 return -1; | 1751 return -1; |
1740 | 1752 |
(...skipping 443 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2184 bool LayoutBlock::HasDefiniteLogicalHeight() const { | 2196 bool LayoutBlock::HasDefiniteLogicalHeight() const { |
2185 return AvailableLogicalHeightForPercentageComputation() != LayoutUnit(-1); | 2197 return AvailableLogicalHeightForPercentageComputation() != LayoutUnit(-1); |
2186 } | 2198 } |
2187 | 2199 |
2188 bool LayoutBlock::NeedsPreferredWidthsRecalculation() const { | 2200 bool LayoutBlock::NeedsPreferredWidthsRecalculation() const { |
2189 return (HasRelativeLogicalHeight() && Style()->LogicalWidth().IsAuto()) || | 2201 return (HasRelativeLogicalHeight() && Style()->LogicalWidth().IsAuto()) || |
2190 LayoutBox::NeedsPreferredWidthsRecalculation(); | 2202 LayoutBox::NeedsPreferredWidthsRecalculation(); |
2191 } | 2203 } |
2192 | 2204 |
2193 } // namespace blink | 2205 } // namespace blink |
OLD | NEW |