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

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

Issue 2643043003: Constrain width/height to minmax values (Closed)
Patch Set: Clamp width/height to minmax values Created 3 years, 11 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
« no previous file with comments | « third_party/WebKit/Source/core/layout/ng/ng_length_utils.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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"
(...skipping 224 matching lines...) Expand 10 before | Expand all | Expand 10 after
235 if (space.IsFixedSizeInline()) 235 if (space.IsFixedSizeInline())
236 return space.AvailableSize().inline_size; 236 return space.AvailableSize().inline_size;
237 237
238 Length logicalWidth = style.logicalWidth(); 238 Length logicalWidth = style.logicalWidth();
239 if (logicalWidth.isAuto() && space.IsShrinkToFit()) 239 if (logicalWidth.isAuto() && space.IsShrinkToFit())
240 logicalWidth = Length(FitContent); 240 logicalWidth = Length(FitContent);
241 241
242 LayoutUnit extent = ResolveInlineLength( 242 LayoutUnit extent = ResolveInlineLength(
243 space, style, min_and_max, logicalWidth, LengthResolveType::kContentSize); 243 space, style, min_and_max, logicalWidth, LengthResolveType::kContentSize);
244 244
245 Length max_length = style.logicalMaxWidth(); 245 Optional<LayoutUnit> max_length;
246 if (!max_length.isMaxSizeNone()) { 246 if (!style.logicalMaxWidth().isMaxSizeNone()) {
247 LayoutUnit max = ResolveInlineLength(space, style, min_and_max, max_length, 247 max_length =
248 LengthResolveType::kMaxSize); 248 ResolveInlineLength(space, style, min_and_max, style.logicalMaxWidth(),
249 extent = std::min(extent, max); 249 LengthResolveType::kMaxSize);
250 } 250 }
251 251 Optional<LayoutUnit> min_length =
252 LayoutUnit min =
253 ResolveInlineLength(space, style, min_and_max, style.logicalMinWidth(), 252 ResolveInlineLength(space, style, min_and_max, style.logicalMinWidth(),
254 LengthResolveType::kMinSize); 253 LengthResolveType::kMinSize);
255 extent = std::max(extent, min); 254 return ConstrainByMinMax(extent, min_length, max_length);
256 return extent;
257 } 255 }
258 256
259 LayoutUnit ComputeBlockSizeForFragment( 257 LayoutUnit ComputeBlockSizeForFragment(
260 const NGConstraintSpace& constraint_space, 258 const NGConstraintSpace& constraint_space,
261 const ComputedStyle& style, 259 const ComputedStyle& style,
262 LayoutUnit content_size) { 260 LayoutUnit content_size) {
263 if (constraint_space.IsFixedSizeBlock()) 261 if (constraint_space.IsFixedSizeBlock())
264 return constraint_space.AvailableSize().block_size; 262 return constraint_space.AvailableSize().block_size;
265 263
266 LayoutUnit extent = 264 LayoutUnit extent =
267 ResolveBlockLength(constraint_space, style, style.logicalHeight(), 265 ResolveBlockLength(constraint_space, style, style.logicalHeight(),
268 content_size, LengthResolveType::kContentSize); 266 content_size, LengthResolveType::kContentSize);
269 if (extent == NGSizeIndefinite) { 267 if (extent == NGSizeIndefinite) {
270 DCHECK_EQ(content_size, NGSizeIndefinite); 268 DCHECK_EQ(content_size, NGSizeIndefinite);
271 return extent; 269 return extent;
272 } 270 }
273 271 Optional<LayoutUnit> max_length;
274 Length max_length = style.logicalMaxHeight(); 272 if (!style.logicalMaxHeight().isMaxSizeNone()) {
275 if (!max_length.isMaxSizeNone()) { 273 max_length =
276 LayoutUnit max = 274 ResolveBlockLength(constraint_space, style, style.logicalMaxHeight(),
277 ResolveBlockLength(constraint_space, style, max_length, content_size, 275 content_size, LengthResolveType::kMaxSize);
278 LengthResolveType::kMaxSize);
279 extent = std::min(extent, max);
280 } 276 }
281 277 Optional<LayoutUnit> min_length =
282 LayoutUnit min =
283 ResolveBlockLength(constraint_space, style, style.logicalMinHeight(), 278 ResolveBlockLength(constraint_space, style, style.logicalMinHeight(),
284 content_size, LengthResolveType::kMinSize); 279 content_size, LengthResolveType::kMinSize);
285 extent = std::max(extent, min); 280 return ConstrainByMinMax(extent, min_length, max_length);
286 return extent;
287 } 281 }
288 282
289 int ResolveUsedColumnCount(int computed_count, 283 int ResolveUsedColumnCount(int computed_count,
290 LayoutUnit computed_size, 284 LayoutUnit computed_size,
291 LayoutUnit used_gap, 285 LayoutUnit used_gap,
292 LayoutUnit available_size) { 286 LayoutUnit available_size) {
293 if (computed_size == NGSizeIndefinite) { 287 if (computed_size == NGSizeIndefinite) {
294 DCHECK(computed_count); 288 DCHECK(computed_count);
295 return computed_count; 289 return computed_count;
296 } 290 }
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
401 if (style.marginStart().isAuto() && style.marginEnd().isAuto()) { 395 if (style.marginStart().isAuto() && style.marginEnd().isAuto()) {
402 margins->inline_start = available_space / 2; 396 margins->inline_start = available_space / 2;
403 margins->inline_end = available_space - margins->inline_start; 397 margins->inline_end = available_space - margins->inline_start;
404 } else if (style.marginStart().isAuto()) { 398 } else if (style.marginStart().isAuto()) {
405 margins->inline_start = available_space; 399 margins->inline_start = available_space;
406 } else if (style.marginEnd().isAuto()) { 400 } else if (style.marginEnd().isAuto()) {
407 margins->inline_end = available_space; 401 margins->inline_end = available_space;
408 } 402 }
409 } 403 }
410 404
405 LayoutUnit ConstrainByMinMax(LayoutUnit length,
406 Optional<LayoutUnit> min,
407 Optional<LayoutUnit> max) {
408 if (max && length > max.value())
409 length = max.value();
410 if (min && length < min.value())
411 length = min.value();
412 return length;
413 }
414
411 } // namespace blink 415 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/layout/ng/ng_length_utils.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698