Chromium Code Reviews| 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) 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 2081 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2092 | 2092 |
| 2093 // Width calculations | 2093 // Width calculations |
| 2094 if (treatAsReplaced) { | 2094 if (treatAsReplaced) { |
| 2095 computedValues.m_extent = LayoutUnit(logicalWidthLength.value()) + borde rAndPaddingLogicalWidth(); | 2095 computedValues.m_extent = LayoutUnit(logicalWidthLength.value()) + borde rAndPaddingLogicalWidth(); |
| 2096 } else if (parent()->isLayoutGrid() && style()->logicalWidth().isAuto() && s tyle()->logicalMinWidth().isAuto() && style()->overflowX() == OVISIBLE && contai nerLogicalWidth < minPreferredLogicalWidth()) { | 2096 } else if (parent()->isLayoutGrid() && style()->logicalWidth().isAuto() && s tyle()->logicalMinWidth().isAuto() && style()->overflowX() == OVISIBLE && contai nerLogicalWidth < minPreferredLogicalWidth()) { |
| 2097 // TODO (lajava) Move this logic to the LayoutGrid class. | 2097 // TODO (lajava) Move this logic to the LayoutGrid class. |
| 2098 // Implied minimum size of Grid items. | 2098 // Implied minimum size of Grid items. |
| 2099 computedValues.m_extent = constrainLogicalWidthByMinMax(minPreferredLogi calWidth(), containerLogicalWidth, cb); | 2099 computedValues.m_extent = constrainLogicalWidthByMinMax(minPreferredLogi calWidth(), containerLogicalWidth, cb); |
| 2100 } else { | 2100 } else { |
| 2101 LayoutUnit containerWidthInInlineDirection = containerLogicalWidth; | 2101 LayoutUnit containerWidthInInlineDirection = containerLogicalWidth; |
| 2102 if (hasPerpendicularContainingBlock) | 2102 if (hasPerpendicularContainingBlock) { |
| 2103 containerWidthInInlineDirection = perpendicularContainingBlockLogica lHeight(); | 2103 containerWidthInInlineDirection = perpendicularContainingBlockLogica lHeight(); |
| 2104 } else if (styleToUse.logicalWidth().hasPercent() && !isOutOfFlowPositio ned() && cb->isFlexItem()) { | |
|
leviw_travelin_and_unemployed
2016/03/01 01:58:51
Nit, I may have put the isFlexItem() part first.
cbiesinger
2016/03/01 20:36:10
Done.
| |
| 2105 LayoutUnit stretchedWidth = toLayoutFlexibleBox(cb->parent())->child LogicalHeightForPercentageResolution(*cb); | |
|
leviw_travelin_and_unemployed
2016/03/01 01:58:51
Link to spec about why width = height?
cbiesinger
2016/03/01 20:36:10
That was a typo :(
I added a test that hits this
| |
| 2106 if (stretchedWidth != LayoutUnit(-1)) | |
| 2107 containerWidthInInlineDirection = stretchedWidth; | |
| 2108 } | |
| 2104 LayoutUnit preferredWidth = computeLogicalWidthUsing(MainOrPreferredSize , styleToUse.logicalWidth(), containerWidthInInlineDirection, cb); | 2109 LayoutUnit preferredWidth = computeLogicalWidthUsing(MainOrPreferredSize , styleToUse.logicalWidth(), containerWidthInInlineDirection, cb); |
| 2105 computedValues.m_extent = constrainLogicalWidthByMinMax(preferredWidth, containerWidthInInlineDirection, cb); | 2110 computedValues.m_extent = constrainLogicalWidthByMinMax(preferredWidth, containerWidthInInlineDirection, cb); |
| 2106 } | 2111 } |
| 2107 | 2112 |
| 2108 // Margin calculations. | 2113 // Margin calculations. |
| 2109 computeMarginsForDirection(InlineDirection, cb, containerLogicalWidth, compu tedValues.m_extent, computedValues.m_margins.m_start, | 2114 computeMarginsForDirection(InlineDirection, cb, containerLogicalWidth, compu tedValues.m_extent, computedValues.m_margins.m_start, |
| 2110 computedValues.m_margins.m_end, style()->marginStart(), style()->marginE nd()); | 2115 computedValues.m_margins.m_end, style()->marginStart(), style()->marginE nd()); |
| 2111 | 2116 |
| 2112 if (!hasPerpendicularContainingBlock && containerLogicalWidth && containerLo gicalWidth != (computedValues.m_extent + computedValues.m_margins.m_start + comp utedValues.m_margins.m_end) | 2117 if (!hasPerpendicularContainingBlock && containerLogicalWidth && containerLo gicalWidth != (computedValues.m_extent + computedValues.m_margins.m_start + comp utedValues.m_margins.m_end) |
| 2113 && !isFloating() && !isInline() && !cb->isFlexibleBoxIncludingDeprecated () && !cb->isLayoutGrid()) { | 2118 && !isFloating() && !isInline() && !cb->isFlexibleBoxIncludingDeprecated () && !cb->isLayoutGrid()) { |
| (...skipping 479 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2593 cb->addPercentHeightDescendant(const_cast<LayoutBox*>(this)); | 2598 cb->addPercentHeightDescendant(const_cast<LayoutBox*>(this)); |
| 2594 | 2599 |
| 2595 const ComputedStyle& cbstyle = cb->styleRef(); | 2600 const ComputedStyle& cbstyle = cb->styleRef(); |
| 2596 | 2601 |
| 2597 // A positioned element that specified both top/bottom or that specifies hei ght should be treated as though it has a height | 2602 // A positioned element that specified both top/bottom or that specifies hei ght should be treated as though it has a height |
| 2598 // explicitly specified that can be used for any percentage computations. | 2603 // explicitly specified that can be used for any percentage computations. |
| 2599 bool isOutOfFlowPositionedWithSpecifiedHeight = cb->isOutOfFlowPositioned() && (!cbstyle.logicalHeight().isAuto() || (!cbstyle.logicalTop().isAuto() && !cbs tyle.logicalBottom().isAuto())); | 2604 bool isOutOfFlowPositionedWithSpecifiedHeight = cb->isOutOfFlowPositioned() && (!cbstyle.logicalHeight().isAuto() || (!cbstyle.logicalTop().isAuto() && !cbs tyle.logicalBottom().isAuto())); |
| 2600 | 2605 |
| 2601 bool includeBorderPadding = isTable(); | 2606 bool includeBorderPadding = isTable(); |
| 2602 | 2607 |
| 2608 LayoutUnit stretchedFlexHeight(-1); | |
| 2609 if (cb->isFlexItem()) | |
| 2610 stretchedFlexHeight = toLayoutFlexibleBox(cb->parent())->childLogicalHei ghtForPercentageResolution(*cb); | |
| 2611 | |
| 2603 if (isHorizontalWritingMode() != cb->isHorizontalWritingMode()) { | 2612 if (isHorizontalWritingMode() != cb->isHorizontalWritingMode()) { |
| 2604 availableHeight = containingBlockChild->containingBlockLogicalWidthForCo ntent(); | 2613 availableHeight = containingBlockChild->containingBlockLogicalWidthForCo ntent(); |
| 2614 } else if (stretchedFlexHeight != LayoutUnit(-1)) { | |
| 2615 availableHeight = stretchedFlexHeight; | |
| 2605 } else if (hasOverrideContainingBlockLogicalHeight()) { | 2616 } else if (hasOverrideContainingBlockLogicalHeight()) { |
| 2606 availableHeight = overrideContainingBlockContentLogicalHeight(); | 2617 availableHeight = overrideContainingBlockContentLogicalHeight(); |
| 2607 } else if (cb->isTableCell()) { | 2618 } else if (cb->isTableCell()) { |
| 2608 if (!skippedAutoHeightContainingBlock) { | 2619 if (!skippedAutoHeightContainingBlock) { |
| 2609 // The second clause in this conditional (after the ||) is to suppor t this line from the | 2620 // The second clause in this conditional (after the ||) is to suppor t this line from the |
| 2610 // definition of height in CSS 2.2: | 2621 // definition of height in CSS 2.2: |
| 2611 // "If the height of the containing block is not specified explicitl y (i.e., it depends on | 2622 // "If the height of the containing block is not specified explicitl y (i.e., it depends on |
| 2612 // content height), and this element is not absolutely positioned, t he used height is | 2623 // content height), and this element is not absolutely positioned, t he used height is |
| 2613 // calculated as if 'auto' was specified." | 2624 // calculated as if 'auto' was specified." |
| 2614 // But FF doesn't apply this logic (1) in quirks mode or (2) when "t his element" is a table. | 2625 // But FF doesn't apply this logic (1) in quirks mode or (2) when "t his element" is a table. |
| (...skipping 2067 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 4682 } | 4693 } |
| 4683 | 4694 |
| 4684 void LayoutBox::IntrinsicSizingInfo::transpose() | 4695 void LayoutBox::IntrinsicSizingInfo::transpose() |
| 4685 { | 4696 { |
| 4686 size = size.transposedSize(); | 4697 size = size.transposedSize(); |
| 4687 aspectRatio = aspectRatio.transposedSize(); | 4698 aspectRatio = aspectRatio.transposedSize(); |
| 4688 std::swap(hasWidth, hasHeight); | 4699 std::swap(hasWidth, hasHeight); |
| 4689 } | 4700 } |
| 4690 | 4701 |
| 4691 } // namespace blink | 4702 } // namespace blink |
| OLD | NEW |