| OLD | NEW |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 |
| OLD | NEW |