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

Side by Side Diff: third_party/WebKit/Source/core/layout/LayoutGrid.cpp

Issue 2030803003: [css-grid] Get rid of AvailableSpaceType enum (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 6 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/LayoutGrid.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 /* 1 /*
2 * Copyright (C) 2011 Apple Inc. All rights reserved. 2 * Copyright (C) 2011 Apple Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions 5 * modification, are permitted provided that the following conditions
6 * are met: 6 * are met:
7 * 1. Redistributions of source code must retain the above copyright 7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer. 8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright 9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the 10 * notice, this list of conditions and the following disclaimer in the
(...skipping 342 matching lines...) Expand 10 before | Expand all | Expand 10 after
353 353
354 return logicalHeight; 354 return logicalHeight;
355 } 355 }
356 356
357 void LayoutGrid::computeTrackSizesForDirection(GridTrackSizingDirection directio n, GridSizingData& sizingData, LayoutUnit freeSpace) 357 void LayoutGrid::computeTrackSizesForDirection(GridTrackSizingDirection directio n, GridSizingData& sizingData, LayoutUnit freeSpace)
358 { 358 {
359 sizingData.freeSpaceForDirection(direction) = freeSpace - guttersSize(direct ion, direction == ForRows ? gridRowCount() : gridColumnCount()); 359 sizingData.freeSpaceForDirection(direction) = freeSpace - guttersSize(direct ion, direction == ForRows ? gridRowCount() : gridColumnCount());
360 sizingData.sizingOperation = GridSizingData::TrackSizing; 360 sizingData.sizingOperation = GridSizingData::TrackSizing;
361 361
362 LayoutUnit baseSizes, growthLimits; 362 LayoutUnit baseSizes, growthLimits;
363 computeUsedBreadthOfGridTracks(direction, sizingData, baseSizes, growthLimit s, AvailableSpaceDefinite); 363 computeUsedBreadthOfGridTracks(direction, sizingData, baseSizes, growthLimit s);
364 ASSERT(tracksAreWiderThanMinTrackBreadth(direction, sizingData)); 364 ASSERT(tracksAreWiderThanMinTrackBreadth(direction, sizingData));
365 } 365 }
366 366
367 void LayoutGrid::layoutBlock(bool relayoutChildren) 367 void LayoutGrid::layoutBlock(bool relayoutChildren)
368 { 368 {
369 ASSERT(needsLayout()); 369 ASSERT(needsLayout());
370 370
371 if (!relayoutChildren && simplifiedLayout()) 371 if (!relayoutChildren && simplifiedLayout())
372 return; 372 return;
373 373
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
444 return valueForLength(trackGap, LayoutUnit()) * (span - 1); 444 return valueForLength(trackGap, LayoutUnit()) * (span - 1);
445 } 445 }
446 446
447 void LayoutGrid::computeIntrinsicLogicalWidths(LayoutUnit& minLogicalWidth, Layo utUnit& maxLogicalWidth) const 447 void LayoutGrid::computeIntrinsicLogicalWidths(LayoutUnit& minLogicalWidth, Layo utUnit& maxLogicalWidth) const
448 { 448 {
449 const_cast<LayoutGrid*>(this)->placeItemsOnGrid(); 449 const_cast<LayoutGrid*>(this)->placeItemsOnGrid();
450 450
451 GridSizingData sizingData(gridColumnCount(), gridRowCount()); 451 GridSizingData sizingData(gridColumnCount(), gridRowCount());
452 sizingData.freeSpaceForDirection(ForColumns) = LayoutUnit(); 452 sizingData.freeSpaceForDirection(ForColumns) = LayoutUnit();
453 sizingData.sizingOperation = GridSizingData::IntrinsicSizeComputation; 453 sizingData.sizingOperation = GridSizingData::IntrinsicSizeComputation;
454 const_cast<LayoutGrid*>(this)->computeUsedBreadthOfGridTracks(ForColumns, si zingData, minLogicalWidth, maxLogicalWidth, AvailableSpaceIndefinite); 454 const_cast<LayoutGrid*>(this)->computeUsedBreadthOfGridTracks(ForColumns, si zingData, minLogicalWidth, maxLogicalWidth);
455 455
456 LayoutUnit totalGuttersSize = guttersSize(ForColumns, sizingData.columnTrack s.size()); 456 LayoutUnit totalGuttersSize = guttersSize(ForColumns, sizingData.columnTrack s.size());
457 minLogicalWidth += totalGuttersSize; 457 minLogicalWidth += totalGuttersSize;
458 maxLogicalWidth += totalGuttersSize; 458 maxLogicalWidth += totalGuttersSize;
459 459
460 LayoutUnit scrollbarWidth = LayoutUnit(intrinsicScrollbarLogicalWidth()); 460 LayoutUnit scrollbarWidth = LayoutUnit(intrinsicScrollbarLogicalWidth());
461 minLogicalWidth += scrollbarWidth; 461 minLogicalWidth += scrollbarWidth;
462 maxLogicalWidth += scrollbarWidth; 462 maxLogicalWidth += scrollbarWidth;
463 } 463 }
464 464
465 void LayoutGrid::computeIntrinsicLogicalHeight(GridSizingData& sizingData) 465 void LayoutGrid::computeIntrinsicLogicalHeight(GridSizingData& sizingData)
466 { 466 {
467 ASSERT(tracksAreWiderThanMinTrackBreadth(ForColumns, sizingData)); 467 ASSERT(tracksAreWiderThanMinTrackBreadth(ForColumns, sizingData));
468 sizingData.freeSpaceForDirection(ForRows) = LayoutUnit(); 468 sizingData.freeSpaceForDirection(ForRows) = LayoutUnit();
469 sizingData.sizingOperation = GridSizingData::IntrinsicSizeComputation; 469 sizingData.sizingOperation = GridSizingData::IntrinsicSizeComputation;
470 computeUsedBreadthOfGridTracks(ForRows, sizingData, m_minContentHeight, m_ma xContentHeight, AvailableSpaceIndefinite); 470 computeUsedBreadthOfGridTracks(ForRows, sizingData, m_minContentHeight, m_ma xContentHeight);
471 471
472 LayoutUnit totalGuttersSize = guttersSize(ForRows, gridRowCount()); 472 LayoutUnit totalGuttersSize = guttersSize(ForRows, gridRowCount());
473 m_minContentHeight += totalGuttersSize; 473 m_minContentHeight += totalGuttersSize;
474 m_maxContentHeight += totalGuttersSize; 474 m_maxContentHeight += totalGuttersSize;
475 475
476 ASSERT(tracksAreWiderThanMinTrackBreadth(ForRows, sizingData)); 476 ASSERT(tracksAreWiderThanMinTrackBreadth(ForRows, sizingData));
477 } 477 }
478 478
479 LayoutUnit LayoutGrid::computeIntrinsicLogicalContentHeightUsing(const Length& l ogicalHeightLength, LayoutUnit intrinsicContentHeight, LayoutUnit borderAndPaddi ng) const 479 LayoutUnit LayoutGrid::computeIntrinsicLogicalContentHeightUsing(const Length& l ogicalHeightLength, LayoutUnit intrinsicContentHeight, LayoutUnit borderAndPaddi ng) const
480 { 480 {
(...skipping 14 matching lines...) Expand all
495 return containingBlock()->availableLogicalHeight(ExcludeMarginBorderPadd ing) - borderAndPadding; 495 return containingBlock()->availableLogicalHeight(ExcludeMarginBorderPadd ing) - borderAndPadding;
496 ASSERT_NOT_REACHED(); 496 ASSERT_NOT_REACHED();
497 return LayoutUnit(); 497 return LayoutUnit();
498 } 498 }
499 499
500 static inline double normalizedFlexFraction(const GridTrack& track, double flexF actor) 500 static inline double normalizedFlexFraction(const GridTrack& track, double flexF actor)
501 { 501 {
502 return track.baseSize() / std::max<double>(1, flexFactor); 502 return track.baseSize() / std::max<double>(1, flexFactor);
503 } 503 }
504 504
505 void LayoutGrid::computeUsedBreadthOfGridTracks(GridTrackSizingDirection directi on, GridSizingData& sizingData, LayoutUnit& baseSizesWithoutMaximization, Layout Unit& growthLimitsWithoutMaximization, AvailableSpaceType availableSpaceType) 505 void LayoutGrid::computeUsedBreadthOfGridTracks(GridTrackSizingDirection directi on, GridSizingData& sizingData, LayoutUnit& baseSizesWithoutMaximization, Layout Unit& growthLimitsWithoutMaximization)
506 { 506 {
507 LayoutUnit& freeSpace = sizingData.freeSpaceForDirection(direction); 507 LayoutUnit& freeSpace = sizingData.freeSpaceForDirection(direction);
508 const LayoutUnit initialFreeSpace = freeSpace; 508 const LayoutUnit initialFreeSpace = freeSpace;
509 Vector<GridTrack>& tracks = (direction == ForColumns) ? sizingData.columnTra cks : sizingData.rowTracks; 509 Vector<GridTrack>& tracks = (direction == ForColumns) ? sizingData.columnTra cks : sizingData.rowTracks;
510 Vector<size_t> flexibleSizedTracksIndex; 510 Vector<size_t> flexibleSizedTracksIndex;
511 sizingData.contentSizedTracksIndex.shrink(0); 511 sizingData.contentSizedTracksIndex.shrink(0);
512 512
513 LayoutUnit maxSize = std::max(LayoutUnit(), initialFreeSpace); 513 LayoutUnit maxSize = std::max(LayoutUnit(), initialFreeSpace);
514 // Grid gutters were removed from freeSpace by the caller, but we must use t hem to compute relative (i.e. percentages) sizes. 514 // Grid gutters were removed from freeSpace by the caller, but we must use t hem to compute relative (i.e. percentages) sizes.
515 if (availableSpaceType == AvailableSpaceDefinite) 515 bool hasDefiniteFreeSpace = sizingData.sizingOperation == GridSizingData::Tr ackSizing;
516 if (hasDefiniteFreeSpace)
516 maxSize += guttersSize(direction, direction == ForRows ? gridRowCount() : gridColumnCount()); 517 maxSize += guttersSize(direction, direction == ForRows ? gridRowCount() : gridColumnCount());
517 518
518 // 1. Initialize per Grid track variables. 519 // 1. Initialize per Grid track variables.
519 for (size_t i = 0; i < tracks.size(); ++i) { 520 for (size_t i = 0; i < tracks.size(); ++i) {
520 GridTrack& track = tracks[i]; 521 GridTrack& track = tracks[i];
521 GridTrackSize trackSize = gridTrackSize(direction, i); 522 GridTrackSize trackSize = gridTrackSize(direction, i);
522 const GridLength& minTrackBreadth = trackSize.minTrackBreadth(); 523 const GridLength& minTrackBreadth = trackSize.minTrackBreadth();
523 const GridLength& maxTrackBreadth = trackSize.maxTrackBreadth(); 524 const GridLength& maxTrackBreadth = trackSize.maxTrackBreadth();
524 525
525 track.setBaseSize(computeUsedBreadthOfMinLength(minTrackBreadth, maxSize )); 526 track.setBaseSize(computeUsedBreadthOfMinLength(minTrackBreadth, maxSize ));
(...skipping 12 matching lines...) Expand all
538 539
539 baseSizesWithoutMaximization = growthLimitsWithoutMaximization = LayoutUnit( ); 540 baseSizesWithoutMaximization = growthLimitsWithoutMaximization = LayoutUnit( );
540 541
541 for (const auto& track: tracks) { 542 for (const auto& track: tracks) {
542 ASSERT(!track.infiniteGrowthPotential()); 543 ASSERT(!track.infiniteGrowthPotential());
543 baseSizesWithoutMaximization += track.baseSize(); 544 baseSizesWithoutMaximization += track.baseSize();
544 growthLimitsWithoutMaximization += track.growthLimit(); 545 growthLimitsWithoutMaximization += track.growthLimit();
545 } 546 }
546 freeSpace = initialFreeSpace - baseSizesWithoutMaximization; 547 freeSpace = initialFreeSpace - baseSizesWithoutMaximization;
547 548
548 bool hasDefiniteFreeSpace = availableSpaceType == AvailableSpaceDefinite;
549 if (hasDefiniteFreeSpace && freeSpace <= 0) 549 if (hasDefiniteFreeSpace && freeSpace <= 0)
550 return; 550 return;
551 551
552 // 3. Grow all Grid tracks in GridTracks from their baseSize up to their gro wthLimit value until freeSpace is exhausted. 552 // 3. Grow all Grid tracks in GridTracks from their baseSize up to their gro wthLimit value until freeSpace is exhausted.
553 const size_t tracksSize = tracks.size(); 553 const size_t tracksSize = tracks.size();
554 if (hasDefiniteFreeSpace) { 554 if (hasDefiniteFreeSpace) {
555 Vector<GridTrack*> tracksForDistribution(tracksSize); 555 Vector<GridTrack*> tracksForDistribution(tracksSize);
556 for (size_t i = 0; i < tracksSize; ++i) { 556 for (size_t i = 0; i < tracksSize; ++i) {
557 tracksForDistribution[i] = tracks.data() + i; 557 tracksForDistribution[i] = tracks.data() + i;
558 tracksForDistribution[i]->setPlannedSize(tracksForDistribution[i]->b aseSize()); 558 tracksForDistribution[i]->setPlannedSize(tracksForDistribution[i]->b aseSize());
(...skipping 1696 matching lines...) Expand 10 before | Expand all | Expand 10 after
2255 return LayoutPoint(rowAxisOffset, columnAxisOffsetForChild(child, sizingData )); 2255 return LayoutPoint(rowAxisOffset, columnAxisOffsetForChild(child, sizingData ));
2256 } 2256 }
2257 2257
2258 void LayoutGrid::paintChildren(const PaintInfo& paintInfo, const LayoutPoint& pa intOffset) const 2258 void LayoutGrid::paintChildren(const PaintInfo& paintInfo, const LayoutPoint& pa intOffset) const
2259 { 2259 {
2260 if (!m_gridItemArea.isEmpty()) 2260 if (!m_gridItemArea.isEmpty())
2261 GridPainter(*this).paintChildren(paintInfo, paintOffset); 2261 GridPainter(*this).paintChildren(paintInfo, paintOffset);
2262 } 2262 }
2263 2263
2264 } // namespace blink 2264 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/layout/LayoutGrid.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698