| 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
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..0f039e89d86f3b915849abba362050727e8cfd9f
|
| --- /dev/null
|
| +++ b/third_party/WebKit/Source/core/layout/ng/ng_length_utils.cc
|
| @@ -0,0 +1,84 @@
|
| +// Copyright 2016 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include "core/layout/ng/ng_length_utils.h"
|
| +
|
| +#include "core/layout/ng/ng_constraint_space.h"
|
| +#include "core/style/ComputedStyle.h"
|
| +#include "platform/LayoutUnit.h"
|
| +#include "platform/Length.h"
|
| +
|
| +namespace blink {
|
| +// TODO(layout-ng):
|
| +// - Handle border-box correctly
|
| +// - positioned and/or replaced calculations
|
| +// - Handle margins for fill-available and width: auto
|
| +
|
| +LayoutUnit resolveInlineLength(LengthResolveType type,
|
| + const Length& length,
|
| + const NGConstraintSpace& constraintSpace) {
|
| + 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,
|
| + const Length& length,
|
| + const NGConstraintSpace& constraintSpace,
|
| + LayoutUnit contentContribution) {
|
| + DCHECK(!length.isMaxSizeNone());
|
| + if (type == LengthResolveType::MinSize && length.isAuto())
|
| + return LayoutUnit();
|
| + if (length.isAuto())
|
| + return contentContribution;
|
| + if (length.isMinContent() || length.isMaxContent() || length.isFitContent())
|
| + return contentContribution;
|
| + return valueForLength(length, constraintSpace.blockContainerSize());
|
| +}
|
| +
|
| +LayoutUnit computeInlineSizeForFragment(
|
| + const NGConstraintSpace& constraintSpace,
|
| + const ComputedStyle& style) {
|
| + LayoutUnit extent = resolveInlineLength(
|
| + LengthResolveType::ContentSize, style.logicalWidth(), constraintSpace);
|
| + Length maxLength = style.logicalMaxWidth();
|
| + if (!maxLength.isMaxSizeNone()) {
|
| + LayoutUnit max = resolveInlineLength(LengthResolveType::MaxSize, maxLength,
|
| + constraintSpace);
|
| + extent = std::min(extent, max);
|
| + }
|
| + LayoutUnit min = resolveInlineLength(
|
| + LengthResolveType::MinSize, style.logicalMinWidth(), constraintSpace);
|
| + 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 extent =
|
| + resolveBlockLength(LengthResolveType::ContentSize, style.logicalHeight(),
|
| + constraintSpace, contentContribution);
|
| + Length maxLength = style.logicalMaxHeight();
|
| + if (!maxLength.isMaxSizeNone()) {
|
| + LayoutUnit max = resolveBlockLength(LengthResolveType::MaxSize, maxLength,
|
| + constraintSpace, contentContribution);
|
| + extent = std::min(extent, max);
|
| + }
|
| + LayoutUnit min =
|
| + resolveBlockLength(LengthResolveType::MinSize, style.logicalMinHeight(),
|
| + constraintSpace, contentContribution);
|
| + extent = std::max(extent, min);
|
| + if (style.boxSizing() == BoxSizingContentBox) {
|
| + // TODO(layout-ng): Compute border/padding size and add it
|
| + }
|
| + return extent;
|
| +}
|
| +
|
| +} // namespace blink
|
|
|