Chromium Code Reviews| Index: third_party/WebKit/Source/core/layout/ng/ng_length_utils.cc |
| diff --git a/third_party/WebKit/Source/core/layout/ng/ng_length_utils.cc b/third_party/WebKit/Source/core/layout/ng/ng_length_utils.cc |
| index 0f039e89d86f3b915849abba362050727e8cfd9f..ee0480fb987e66698f9b58249dfc39e75127f81b 100644 |
| --- a/third_party/WebKit/Source/core/layout/ng/ng_length_utils.cc |
| +++ b/third_party/WebKit/Source/core/layout/ng/ng_length_utils.cc |
| @@ -15,69 +15,88 @@ namespace blink { |
| // - positioned and/or replaced calculations |
| // - Handle margins for fill-available and width: auto |
| -LayoutUnit resolveInlineLength(LengthResolveType type, |
| +LayoutUnit resolveInlineLength(const NGConstraintSpace& constraintSpace, |
| const Length& length, |
| - const NGConstraintSpace& constraintSpace) { |
| + LengthResolveType type) { |
| + // TODO(layout-ng): Handle min/max/fit-content |
| DCHECK(!length.isMaxSizeNone()); |
| + |
| if (type == LengthResolveType::MinSize && length.isAuto()) |
| return LayoutUnit(); |
| - // TODO(layout-ng): Handle min/max/fit-content |
| + |
| return valueForLength(length, constraintSpace.inlineContainerSize()); |
| } |
| -LayoutUnit resolveBlockLength(LengthResolveType type, |
| +LayoutUnit resolveBlockLength(const NGConstraintSpace& constraintSpace, |
| const Length& length, |
| - const NGConstraintSpace& constraintSpace, |
| - LayoutUnit contentContribution) { |
| + LayoutUnit contentSize, |
| + LengthResolveType type) { |
| DCHECK(!length.isMaxSizeNone()); |
| + |
| if (type == LengthResolveType::MinSize && length.isAuto()) |
| return LayoutUnit(); |
| + |
| if (length.isAuto()) |
| - return contentContribution; |
| + return contentSize; |
| + |
| if (length.isMinContent() || length.isMaxContent() || length.isFitContent()) |
| - return contentContribution; |
| + return contentSize; |
| + |
| return valueForLength(length, constraintSpace.blockContainerSize()); |
| } |
| LayoutUnit computeInlineSizeForFragment( |
| const NGConstraintSpace& constraintSpace, |
| const ComputedStyle& style) { |
| - LayoutUnit extent = resolveInlineLength( |
| - LengthResolveType::ContentSize, style.logicalWidth(), constraintSpace); |
| + if (constraintSpace.fixedInlineSize()) |
| + return constraintSpace.inlineContainerSize(); |
|
cbiesinger
2016/08/11 20:41:56
Thanks!
|
| + |
| + LayoutUnit extent = resolveInlineLength(constraintSpace, style.logicalWidth(), |
| + LengthResolveType::ContentSize); |
| + |
| Length maxLength = style.logicalMaxWidth(); |
| if (!maxLength.isMaxSizeNone()) { |
| - LayoutUnit max = resolveInlineLength(LengthResolveType::MaxSize, maxLength, |
| - constraintSpace); |
| + LayoutUnit max = resolveInlineLength(constraintSpace, maxLength, |
| + LengthResolveType::MaxSize); |
| extent = std::min(extent, max); |
| } |
| - LayoutUnit min = resolveInlineLength( |
| - LengthResolveType::MinSize, style.logicalMinWidth(), constraintSpace); |
| + |
| + LayoutUnit min = resolveInlineLength(constraintSpace, style.logicalMinWidth(), |
| + LengthResolveType::MinSize); |
| extent = std::max(extent, min); |
| + |
| if (style.boxSizing() == BoxSizingContentBox) { |
| // TODO(layout-ng): Compute border/padding size and add it |
| } |
| + |
| return extent; |
| } |
| LayoutUnit computeBlockSizeForFragment(const NGConstraintSpace& constraintSpace, |
| const ComputedStyle& style, |
| - LayoutUnit contentContribution) { |
| + LayoutUnit contentSize) { |
| + if (constraintSpace.fixedBlockSize()) |
| + return constraintSpace.blockContainerSize(); |
| + |
| LayoutUnit extent = |
| - resolveBlockLength(LengthResolveType::ContentSize, style.logicalHeight(), |
| - constraintSpace, contentContribution); |
| + resolveBlockLength(constraintSpace, style.logicalHeight(), contentSize, |
| + LengthResolveType::ContentSize); |
| Length maxLength = style.logicalMaxHeight(); |
| + |
| if (!maxLength.isMaxSizeNone()) { |
| - LayoutUnit max = resolveBlockLength(LengthResolveType::MaxSize, maxLength, |
| - constraintSpace, contentContribution); |
| + LayoutUnit max = resolveBlockLength(constraintSpace, maxLength, contentSize, |
| + LengthResolveType::MaxSize); |
| extent = std::min(extent, max); |
| } |
| - LayoutUnit min = |
| - resolveBlockLength(LengthResolveType::MinSize, style.logicalMinHeight(), |
| - constraintSpace, contentContribution); |
| + |
| + LayoutUnit min = resolveBlockLength(constraintSpace, style.logicalMinHeight(), |
| + contentSize, LengthResolveType::MinSize); |
| extent = std::max(extent, min); |
| + |
| if (style.boxSizing() == BoxSizingContentBox) { |
| // TODO(layout-ng): Compute border/padding size and add it |
| } |
| + |
| return extent; |
| } |