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

Unified Diff: third_party/WebKit/Source/core/layout/ng/ng_length_utils.cc

Issue 2583063004: [layoutng] Add a function to compute the min- and max-content contribution (Closed)
Patch Set: include margins Created 4 years 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 side-by-side diff with in-line comments
Download patch
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 0802881f942ed8a23e142a024c152a2aa48e22c4..05b27372202237feb552162bb1cdd34e43db7caa 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
@@ -5,6 +5,7 @@
#include "core/layout/ng/ng_length_utils.h"
#include "core/layout/ng/ng_constraint_space.h"
+#include "core/layout/ng/ng_constraint_space_builder.h"
#include "core/layout/ng/ng_fragment_base.h"
#include "core/style/ComputedStyle.h"
#include "platform/LayoutUnit.h"
@@ -28,6 +29,11 @@ bool NeedMinAndMaxContentSizes(const ComputedStyle& style) {
style.logicalMaxWidth().isIntrinsic();
}
+bool NeedMinAndMaxContentSizesForContentContribution(
+ const ComputedStyle& style) {
+ return NeedMinAndMaxContentSizes(style) || style.logicalWidth().isAuto();
+}
+
LayoutUnit ResolveInlineLength(
const NGConstraintSpace& constraint_space,
const ComputedStyle& style,
@@ -175,6 +181,52 @@ LayoutUnit ResolveBlockLength(const NGConstraintSpace& constraint_space,
}
}
+MinAndMaxContentSizes ComputeMinAndMaxContentContribution(
+ const ComputedStyle& style,
+ const WTF::Optional<MinAndMaxContentSizes>& min_and_max) {
+ // Synthesize a zero-sized constraint space for passing to
+ // ResolveInlineLength.
+ NGWritingMode writing_mode = FromPlatformWritingMode(style.getWritingMode());
+ NGConstraintSpaceBuilder builder(writing_mode);
+ NGConstraintSpace* space = builder.ToConstraintSpace();
+
+ MinAndMaxContentSizes computed_sizes;
+ Length inline_size = style.logicalWidth();
+ if (inline_size.isAuto()) {
+ CHECK(min_and_max.has_value());
+ NGBoxStrut border_and_padding =
+ ComputeBorders(style) + ComputePadding(*space, style);
+ computed_sizes.min_content =
+ min_and_max->min_content + border_and_padding.InlineSum();
+ computed_sizes.max_content =
+ min_and_max->max_content + border_and_padding.InlineSum();
+ } else {
+ computed_sizes.min_content = computed_sizes.max_content =
+ ResolveInlineLength(*space, style, min_and_max, inline_size,
+ LengthResolveType::kContentSize);
+ }
+
+ Length max_length = style.logicalMaxWidth();
+ if (!max_length.isMaxSizeNone()) {
+ LayoutUnit max = ResolveInlineLength(*space, style, min_and_max, max_length,
+ LengthResolveType::kMaxSize);
+ computed_sizes.min_content = std::min(computed_sizes.min_content, max);
+ computed_sizes.max_content = std::min(computed_sizes.max_content, max);
+ }
+
+ LayoutUnit min =
+ ResolveInlineLength(*space, style, min_and_max, style.logicalMinWidth(),
+ LengthResolveType::kMinSize);
+ computed_sizes.min_content = std::max(computed_sizes.min_content, min);
+ computed_sizes.max_content = std::max(computed_sizes.max_content, min);
+
+ NGBoxStrut margins =
+ ComputeMargins(*space, style, writing_mode, style.direction());
+ computed_sizes.min_content += margins.InlineSum();
+ computed_sizes.max_content += margins.InlineSum();
+ return computed_sizes;
+}
+
LayoutUnit ComputeInlineSizeForFragment(
const NGConstraintSpace& space,
const ComputedStyle& style,

Powered by Google App Engine
This is Rietveld 408576698