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

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

Issue 2721613003: [LayoutNG] Move remaining ng_units structs to their own files (Closed)
Patch Set: Don't export NGBoxStrut for now Created 3 years, 9 months 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 unified diff | Download patch
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "core/layout/ng/ng_length_utils.h" 5 #include "core/layout/ng/ng_length_utils.h"
6 6
7 #include "core/layout/ng/ng_constraint_space.h" 7 #include "core/layout/ng/ng_constraint_space.h"
8 #include "core/layout/ng/ng_constraint_space_builder.h" 8 #include "core/layout/ng/ng_constraint_space_builder.h"
9 #include "core/layout/ng/ng_fragment.h" 9 #include "core/layout/ng/ng_fragment.h"
10 #include "core/style/ComputedStyle.h" 10 #include "core/style/ComputedStyle.h"
11 #include "platform/LayoutUnit.h" 11 #include "platform/LayoutUnit.h"
12 #include "platform/Length.h" 12 #include "platform/Length.h"
13 #include "wtf/Optional.h" 13 #include "wtf/Optional.h"
14 14
15 namespace blink { 15 namespace blink {
16 // TODO(layout-ng): 16 // TODO(layout-ng):
17 // - replaced calculations 17 // - replaced calculations
18 // - Take scrollbars into account 18 // - Take scrollbars into account
19 19
20 bool NeedMinAndMaxContentSizes(const NGConstraintSpace& constraint_space, 20 bool NeedMinMaxContentSize(const NGConstraintSpace& constraint_space,
21 const ComputedStyle& style) { 21 const ComputedStyle& style) {
22 // This check is technically too broad (fill-available does not need intrinsic 22 // This check is technically too broad (fill-available does not need intrinsic
23 // size computation) but that's a rare case and only affects performance, not 23 // size computation) but that's a rare case and only affects performance, not
24 // correctness. 24 // correctness.
25 return constraint_space.IsShrinkToFit() || 25 return constraint_space.IsShrinkToFit() ||
26 style.logicalWidth().isIntrinsic() || 26 style.logicalWidth().isIntrinsic() ||
27 style.logicalMinWidth().isIntrinsic() || 27 style.logicalMinWidth().isIntrinsic() ||
28 style.logicalMaxWidth().isIntrinsic(); 28 style.logicalMaxWidth().isIntrinsic();
29 } 29 }
30 30
31 bool NeedMinAndMaxContentSizesForContentContribution( 31 bool NeedMinMaxContentSizeForContentContribution(const ComputedStyle& style) {
32 const ComputedStyle& style) {
33 return style.logicalWidth().isIntrinsicOrAuto() || 32 return style.logicalWidth().isIntrinsicOrAuto() ||
34 style.logicalMinWidth().isIntrinsic() || 33 style.logicalMinWidth().isIntrinsic() ||
35 style.logicalMaxWidth().isIntrinsic(); 34 style.logicalMaxWidth().isIntrinsic();
36 } 35 }
37 36
38 LayoutUnit ResolveInlineLength( 37 LayoutUnit ResolveInlineLength(
39 const NGConstraintSpace& constraint_space, 38 const NGConstraintSpace& constraint_space,
40 const ComputedStyle& style, 39 const ComputedStyle& style,
41 const WTF::Optional<MinAndMaxContentSizes>& min_and_max, 40 const WTF::Optional<MinMaxContentSize>& min_and_max,
42 const Length& length, 41 const Length& length,
43 LengthResolveType type) { 42 LengthResolveType type) {
44 DCHECK(!length.isMaxSizeNone()); 43 DCHECK(!length.isMaxSizeNone());
45 DCHECK_GE(constraint_space.AvailableSize().inline_size, LayoutUnit()); 44 DCHECK_GE(constraint_space.AvailableSize().inline_size, LayoutUnit());
46 DCHECK_GE(constraint_space.PercentageResolutionSize().inline_size, 45 DCHECK_GE(constraint_space.PercentageResolutionSize().inline_size,
47 LayoutUnit()); 46 LayoutUnit());
48 47
49 if (type == LengthResolveType::kMinSize && length.isAuto()) 48 if (type == LengthResolveType::kMinSize && length.isAuto())
50 return LayoutUnit(); 49 return LayoutUnit();
51 50
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after
176 case DeviceHeight: 175 case DeviceHeight:
177 case ExtendToZoom: 176 case ExtendToZoom:
178 NOTREACHED() << "These should only be used for viewport definitions"; 177 NOTREACHED() << "These should only be used for viewport definitions";
179 case MaxSizeNone: 178 case MaxSizeNone:
180 default: 179 default:
181 NOTREACHED(); 180 NOTREACHED();
182 return border_and_padding.BlockSum(); 181 return border_and_padding.BlockSum();
183 } 182 }
184 } 183 }
185 184
186 MinAndMaxContentSizes ComputeMinAndMaxContentContribution( 185 MinMaxContentSize ComputeMinAndMaxContentContribution(
187 const ComputedStyle& style, 186 const ComputedStyle& style,
188 const WTF::Optional<MinAndMaxContentSizes>& min_and_max) { 187 const WTF::Optional<MinMaxContentSize>& min_and_max) {
189 // Synthesize a zero-sized constraint space for passing to 188 // Synthesize a zero-sized constraint space for passing to
190 // ResolveInlineLength. 189 // ResolveInlineLength.
191 NGWritingMode writing_mode = FromPlatformWritingMode(style.getWritingMode()); 190 NGWritingMode writing_mode = FromPlatformWritingMode(style.getWritingMode());
192 NGConstraintSpaceBuilder builder(writing_mode); 191 NGConstraintSpaceBuilder builder(writing_mode);
193 builder.SetInitialContainingBlockSize( 192 builder.SetInitialContainingBlockSize(
194 NGPhysicalSize{LayoutUnit(), LayoutUnit()}); 193 NGPhysicalSize{LayoutUnit(), LayoutUnit()});
195 NGConstraintSpace* space = builder.ToConstraintSpace(writing_mode); 194 NGConstraintSpace* space = builder.ToConstraintSpace(writing_mode);
196 195
197 MinAndMaxContentSizes computed_sizes; 196 MinMaxContentSize computed_sizes;
198 Length inline_size = style.logicalWidth(); 197 Length inline_size = style.logicalWidth();
199 if (inline_size.isAuto()) { 198 if (inline_size.isAuto()) {
200 CHECK(min_and_max.has_value()); 199 CHECK(min_and_max.has_value());
201 NGBoxStrut border_and_padding = 200 NGBoxStrut border_and_padding =
202 ComputeBorders(*space, style) + ComputePadding(*space, style); 201 ComputeBorders(*space, style) + ComputePadding(*space, style);
203 computed_sizes.min_content = 202 computed_sizes.min_content =
204 min_and_max->min_content + border_and_padding.InlineSum(); 203 min_and_max->min_content + border_and_padding.InlineSum();
205 computed_sizes.max_content = 204 computed_sizes.max_content =
206 min_and_max->max_content + border_and_padding.InlineSum(); 205 min_and_max->max_content + border_and_padding.InlineSum();
207 } else { 206 } else {
(...skipping 19 matching lines...) Expand all
227 NGBoxStrut margins = 226 NGBoxStrut margins =
228 ComputeMargins(*space, style, writing_mode, style.direction()); 227 ComputeMargins(*space, style, writing_mode, style.direction());
229 computed_sizes.min_content += margins.InlineSum(); 228 computed_sizes.min_content += margins.InlineSum();
230 computed_sizes.max_content += margins.InlineSum(); 229 computed_sizes.max_content += margins.InlineSum();
231 return computed_sizes; 230 return computed_sizes;
232 } 231 }
233 232
234 LayoutUnit ComputeInlineSizeForFragment( 233 LayoutUnit ComputeInlineSizeForFragment(
235 const NGConstraintSpace& space, 234 const NGConstraintSpace& space,
236 const ComputedStyle& style, 235 const ComputedStyle& style,
237 const WTF::Optional<MinAndMaxContentSizes>& min_and_max) { 236 const WTF::Optional<MinMaxContentSize>& min_and_max) {
238 if (space.IsFixedSizeInline()) 237 if (space.IsFixedSizeInline())
239 return space.AvailableSize().inline_size; 238 return space.AvailableSize().inline_size;
240 239
241 Length logicalWidth = style.logicalWidth(); 240 Length logicalWidth = style.logicalWidth();
242 if (logicalWidth.isAuto() && space.IsShrinkToFit()) 241 if (logicalWidth.isAuto() && space.IsShrinkToFit())
243 logicalWidth = Length(FitContent); 242 logicalWidth = Length(FitContent);
244 243
245 LayoutUnit extent = ResolveInlineLength( 244 LayoutUnit extent = ResolveInlineLength(
246 space, style, min_and_max, logicalWidth, LengthResolveType::kContentSize); 245 space, style, min_and_max, logicalWidth, LengthResolveType::kContentSize);
247 246
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
328 if (style.hasNormalColumnGap()) 327 if (style.hasNormalColumnGap())
329 return LayoutUnit(style.getFontDescription().computedPixelSize()); 328 return LayoutUnit(style.getFontDescription().computedPixelSize());
330 return LayoutUnit(style.columnGap()); 329 return LayoutUnit(style.columnGap());
331 } 330 }
332 331
333 NGBoxStrut ComputeMargins(const NGConstraintSpace& constraint_space, 332 NGBoxStrut ComputeMargins(const NGConstraintSpace& constraint_space,
334 const ComputedStyle& style, 333 const ComputedStyle& style,
335 const NGWritingMode writing_mode, 334 const NGWritingMode writing_mode,
336 const TextDirection direction) { 335 const TextDirection direction) {
337 // We don't need these for margin computations 336 // We don't need these for margin computations
338 MinAndMaxContentSizes empty_sizes; 337 MinMaxContentSize empty_sizes;
339 // Margins always get computed relative to the inline size: 338 // Margins always get computed relative to the inline size:
340 // https://www.w3.org/TR/CSS2/box.html#value-def-margin-width 339 // https://www.w3.org/TR/CSS2/box.html#value-def-margin-width
341 NGPhysicalBoxStrut physical_dim; 340 NGPhysicalBoxStrut physical_dim;
342 physical_dim.left = ResolveInlineLength( 341 physical_dim.left = ResolveInlineLength(
343 constraint_space, style, empty_sizes, style.marginLeft(), 342 constraint_space, style, empty_sizes, style.marginLeft(),
344 LengthResolveType::kMarginBorderPaddingSize); 343 LengthResolveType::kMarginBorderPaddingSize);
345 physical_dim.right = ResolveInlineLength( 344 physical_dim.right = ResolveInlineLength(
346 constraint_space, style, empty_sizes, style.marginRight(), 345 constraint_space, style, empty_sizes, style.marginRight(),
347 LengthResolveType::kMarginBorderPaddingSize); 346 LengthResolveType::kMarginBorderPaddingSize);
348 physical_dim.top = ResolveInlineLength( 347 physical_dim.top = ResolveInlineLength(
(...skipping 21 matching lines...) Expand all
370 } 369 }
371 370
372 NGBoxStrut ComputePadding(const NGConstraintSpace& constraint_space, 371 NGBoxStrut ComputePadding(const NGConstraintSpace& constraint_space,
373 const ComputedStyle& style) { 372 const ComputedStyle& style) {
374 // If we are producing an anonymous fragment (e.g. a column) we shouldn't 373 // If we are producing an anonymous fragment (e.g. a column) we shouldn't
375 // have any padding. 374 // have any padding.
376 if (constraint_space.IsAnonymous()) 375 if (constraint_space.IsAnonymous())
377 return NGBoxStrut(); 376 return NGBoxStrut();
378 377
379 // We don't need these for padding computations 378 // We don't need these for padding computations
380 MinAndMaxContentSizes empty_sizes; 379 MinMaxContentSize empty_sizes;
381 // Padding always gets computed relative to the inline size: 380 // Padding always gets computed relative to the inline size:
382 // https://www.w3.org/TR/CSS2/box.html#value-def-padding-width 381 // https://www.w3.org/TR/CSS2/box.html#value-def-padding-width
383 NGBoxStrut padding; 382 NGBoxStrut padding;
384 padding.inline_start = ResolveInlineLength( 383 padding.inline_start = ResolveInlineLength(
385 constraint_space, style, empty_sizes, style.paddingStart(), 384 constraint_space, style, empty_sizes, style.paddingStart(),
386 LengthResolveType::kMarginBorderPaddingSize); 385 LengthResolveType::kMarginBorderPaddingSize);
387 padding.inline_end = ResolveInlineLength( 386 padding.inline_end = ResolveInlineLength(
388 constraint_space, style, empty_sizes, style.paddingEnd(), 387 constraint_space, style, empty_sizes, style.paddingEnd(),
389 LengthResolveType::kMarginBorderPaddingSize); 388 LengthResolveType::kMarginBorderPaddingSize);
390 padding.block_start = ResolveInlineLength( 389 padding.block_start = ResolveInlineLength(
(...skipping 29 matching lines...) Expand all
420 Optional<LayoutUnit> min, 419 Optional<LayoutUnit> min,
421 Optional<LayoutUnit> max) { 420 Optional<LayoutUnit> max) {
422 if (max && length > max.value()) 421 if (max && length > max.value())
423 length = max.value(); 422 length = max.value();
424 if (min && length < min.value()) 423 if (min && length < min.value())
425 length = min.value(); 424 length = min.value();
426 return length; 425 return length;
427 } 426 }
428 427
429 } // namespace blink 428 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698