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

Side by Side Diff: Source/core/rendering/RenderGrid.cpp

Issue 554293003: [CSS Grid Layout] RenderGrid methods should take RenderBox references (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Patch for landing Created 6 years, 3 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 | « Source/core/rendering/RenderGrid.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 221 matching lines...) Expand 10 before | Expand all | Expand 10 after
232 } 232 }
233 233
234 RenderBox* newChildBox = toRenderBox(newChild); 234 RenderBox* newChildBox = toRenderBox(newChild);
235 OwnPtr<GridSpan> rowPositions = GridResolvedPosition::resolveGridPositionsFr omStyle(*style(), *newChildBox, ForRows); 235 OwnPtr<GridSpan> rowPositions = GridResolvedPosition::resolveGridPositionsFr omStyle(*style(), *newChildBox, ForRows);
236 OwnPtr<GridSpan> columnPositions = GridResolvedPosition::resolveGridPosition sFromStyle(*style(), *newChildBox, ForColumns); 236 OwnPtr<GridSpan> columnPositions = GridResolvedPosition::resolveGridPosition sFromStyle(*style(), *newChildBox, ForColumns);
237 if (!rowPositions || !columnPositions) { 237 if (!rowPositions || !columnPositions) {
238 // The new child requires the auto-placement algorithm to run so we need to recompute the grid fully. 238 // The new child requires the auto-placement algorithm to run so we need to recompute the grid fully.
239 dirtyGrid(); 239 dirtyGrid();
240 return; 240 return;
241 } else { 241 } else {
242 insertItemIntoGrid(newChildBox, GridCoordinate(*rowPositions, *columnPos itions)); 242 insertItemIntoGrid(*newChildBox, GridCoordinate(*rowPositions, *columnPo sitions));
243 addChildToIndexesMap(newChildBox); 243 addChildToIndexesMap(*newChildBox);
244 } 244 }
245 } 245 }
246 246
247 void RenderGrid::addChildToIndexesMap(RenderBox* child) 247 void RenderGrid::addChildToIndexesMap(RenderBox& child)
248 { 248 {
249 ASSERT(!m_gridItemsIndexesMap.contains(child)); 249 ASSERT(!m_gridItemsIndexesMap.contains(&child));
250 RenderBox* sibling = child->nextSiblingBox(); 250 RenderBox* sibling = child.nextSiblingBox();
251 bool lastSibling = !sibling; 251 bool lastSibling = !sibling;
252 252
253 if (lastSibling) 253 if (lastSibling)
254 sibling = child->previousSiblingBox(); 254 sibling = child.previousSiblingBox();
255 255
256 size_t index = 0; 256 size_t index = 0;
257 if (sibling) 257 if (sibling)
258 index = lastSibling ? m_gridItemsIndexesMap.get(sibling) + 1 : m_gridIte msIndexesMap.get(sibling); 258 index = lastSibling ? m_gridItemsIndexesMap.get(sibling) + 1 : m_gridIte msIndexesMap.get(sibling);
259 259
260 if (sibling && !lastSibling) { 260 if (sibling && !lastSibling) {
261 for (; sibling; sibling = sibling->nextSiblingBox()) 261 for (; sibling; sibling = sibling->nextSiblingBox())
262 m_gridItemsIndexesMap.set(sibling, m_gridItemsIndexesMap.get(sibling ) + 1); 262 m_gridItemsIndexesMap.set(sibling, m_gridItemsIndexesMap.get(sibling ) + 1);
263 } 263 }
264 264
265 m_gridItemsIndexesMap.set(child, index); 265 m_gridItemsIndexesMap.set(&child, index);
266 } 266 }
267 267
268 void RenderGrid::removeChild(RenderObject* child) 268 void RenderGrid::removeChild(RenderObject* child)
269 { 269 {
270 RenderBlock::removeChild(child); 270 RenderBlock::removeChild(child);
271 271
272 if (gridIsDirty()) 272 if (gridIsDirty())
273 return; 273 return;
274 274
275 ASSERT(child->isBox()); 275 ASSERT(child->isBox());
(...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after
478 } else { 478 } else {
479 for (size_t i = 0; i < flexibleSizedTracksIndex.size(); ++i) { 479 for (size_t i = 0; i < flexibleSizedTracksIndex.size(); ++i) {
480 const size_t trackIndex = flexibleSizedTracksIndex[i]; 480 const size_t trackIndex = flexibleSizedTracksIndex[i];
481 const GridTrackSize& trackSize = gridTrackSize(direction, trackIndex ); 481 const GridTrackSize& trackSize = gridTrackSize(direction, trackIndex );
482 normalizedFractionBreadth = std::max(normalizedFractionBreadth, trac ks[trackIndex].m_usedBreadth / trackSize.maxTrackBreadth().flex()); 482 normalizedFractionBreadth = std::max(normalizedFractionBreadth, trac ks[trackIndex].m_usedBreadth / trackSize.maxTrackBreadth().flex());
483 } 483 }
484 484
485 for (size_t i = 0; i < flexibleSizedTracksIndex.size(); ++i) { 485 for (size_t i = 0; i < flexibleSizedTracksIndex.size(); ++i) {
486 GridIterator iterator(m_grid, direction, flexibleSizedTracksIndex[i] ); 486 GridIterator iterator(m_grid, direction, flexibleSizedTracksIndex[i] );
487 while (RenderBox* gridItem = iterator.nextGridItem()) { 487 while (RenderBox* gridItem = iterator.nextGridItem()) {
488 const GridCoordinate coordinate = cachedGridCoordinate(gridItem) ; 488 const GridCoordinate coordinate = cachedGridCoordinate(*gridItem );
489 const GridSpan span = (direction == ForColumns) ? coordinate.col umns : coordinate.rows; 489 const GridSpan span = (direction == ForColumns) ? coordinate.col umns : coordinate.rows;
490 490
491 // Do not include already processed items. 491 // Do not include already processed items.
492 if (i > 0 && span.resolvedInitialPosition.toInt() <= flexibleSiz edTracksIndex[i - 1]) 492 if (i > 0 && span.resolvedInitialPosition.toInt() <= flexibleSiz edTracksIndex[i - 1])
493 continue; 493 continue;
494 494
495 double itemNormalizedFlexBreadth = computeNormalizedFractionBrea dth(tracks, span, direction, maxContentForChild(gridItem, direction, sizingData. columnTracks)); 495 double itemNormalizedFlexBreadth = computeNormalizedFractionBrea dth(tracks, span, direction, maxContentForChild(*gridItem, direction, sizingData .columnTracks));
496 normalizedFractionBreadth = std::max(normalizedFractionBreadth, itemNormalizedFlexBreadth); 496 normalizedFractionBreadth = std::max(normalizedFractionBreadth, itemNormalizedFlexBreadth);
497 } 497 }
498 } 498 }
499 } 499 }
500 500
501 for (size_t i = 0; i < flexibleSizedTracksIndex.size(); ++i) { 501 for (size_t i = 0; i < flexibleSizedTracksIndex.size(); ++i) {
502 const size_t trackIndex = flexibleSizedTracksIndex[i]; 502 const size_t trackIndex = flexibleSizedTracksIndex[i];
503 const GridTrackSize& trackSize = gridTrackSize(direction, trackIndex); 503 const GridTrackSize& trackSize = gridTrackSize(direction, trackIndex);
504 504
505 tracks[trackIndex].m_usedBreadth = std::max<LayoutUnit>(tracks[trackInde x].m_usedBreadth, normalizedFractionBreadth * trackSize.maxTrackBreadth().flex() ); 505 tracks[trackIndex].m_usedBreadth = std::max<LayoutUnit>(tracks[trackInde x].m_usedBreadth, normalizedFractionBreadth * trackSize.maxTrackBreadth().flex() );
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
605 Length logicalSize = direction == ForColumns ? style()->logicalWidth() : style()->logicalHeight(); 605 Length logicalSize = direction == ForColumns ? style()->logicalWidth() : style()->logicalHeight();
606 if (logicalSize.isIntrinsicOrAuto()) { 606 if (logicalSize.isIntrinsicOrAuto()) {
607 DEFINE_STATIC_LOCAL(GridTrackSize, autoTrackSize, (Length(Auto))); 607 DEFINE_STATIC_LOCAL(GridTrackSize, autoTrackSize, (Length(Auto)));
608 return autoTrackSize; 608 return autoTrackSize;
609 } 609 }
610 } 610 }
611 611
612 return trackSize; 612 return trackSize;
613 } 613 }
614 614
615 LayoutUnit RenderGrid::logicalHeightForChild(RenderBox* child, Vector<GridTrack> & columnTracks) 615 LayoutUnit RenderGrid::logicalHeightForChild(RenderBox& child, Vector<GridTrack> & columnTracks)
616 { 616 {
617 SubtreeLayoutScope layoutScope(*child); 617 SubtreeLayoutScope layoutScope(child);
618 LayoutUnit oldOverrideContainingBlockContentLogicalWidth = child->hasOverrid eContainingBlockLogicalWidth() ? child->overrideContainingBlockContentLogicalWid th() : LayoutUnit(); 618 LayoutUnit oldOverrideContainingBlockContentLogicalWidth = child.hasOverride ContainingBlockLogicalWidth() ? child.overrideContainingBlockContentLogicalWidth () : LayoutUnit();
619 LayoutUnit overrideContainingBlockContentLogicalWidth = gridAreaBreadthForCh ild(child, ForColumns, columnTracks); 619 LayoutUnit overrideContainingBlockContentLogicalWidth = gridAreaBreadthForCh ild(child, ForColumns, columnTracks);
620 if (child->style()->logicalHeight().isPercent() || oldOverrideContainingBloc kContentLogicalWidth != overrideContainingBlockContentLogicalWidth) 620 if (child.style()->logicalHeight().isPercent() || oldOverrideContainingBlock ContentLogicalWidth != overrideContainingBlockContentLogicalWidth)
621 layoutScope.setNeedsLayout(child); 621 layoutScope.setNeedsLayout(&child);
622 622
623 child->setOverrideContainingBlockContentLogicalWidth(overrideContainingBlock ContentLogicalWidth); 623 child.setOverrideContainingBlockContentLogicalWidth(overrideContainingBlockC ontentLogicalWidth);
624 // If |child| has a percentage logical height, we shouldn't let it override its intrinsic height, which is 624 // If |child| has a percentage logical height, we shouldn't let it override its intrinsic height, which is
625 // what we are interested in here. Thus we need to set the override logical height to -1 (no possible resolution). 625 // what we are interested in here. Thus we need to set the override logical height to -1 (no possible resolution).
626 child->setOverrideContainingBlockContentLogicalHeight(-1); 626 child.setOverrideContainingBlockContentLogicalHeight(-1);
627 child->layoutIfNeeded(); 627 child.layoutIfNeeded();
628 return child->logicalHeight() + child->marginLogicalHeight(); 628 return child.logicalHeight() + child.marginLogicalHeight();
629 } 629 }
630 630
631 LayoutUnit RenderGrid::minContentForChild(RenderBox* child, GridTrackSizingDirec tion direction, Vector<GridTrack>& columnTracks) 631 LayoutUnit RenderGrid::minContentForChild(RenderBox& child, GridTrackSizingDirec tion direction, Vector<GridTrack>& columnTracks)
632 { 632 {
633 bool hasOrthogonalWritingMode = child->isHorizontalWritingMode() != isHorizo ntalWritingMode(); 633 bool hasOrthogonalWritingMode = child.isHorizontalWritingMode() != isHorizon talWritingMode();
634 // FIXME: Properly support orthogonal writing mode. 634 // FIXME: Properly support orthogonal writing mode.
635 if (hasOrthogonalWritingMode) 635 if (hasOrthogonalWritingMode)
636 return 0; 636 return 0;
637 637
638 if (direction == ForColumns) { 638 if (direction == ForColumns) {
639 // FIXME: It's unclear if we should return the intrinsic width or the pr eferred width. 639 // FIXME: It's unclear if we should return the intrinsic width or the pr eferred width.
640 // See http://lists.w3.org/Archives/Public/www-style/2013Jan/0245.html 640 // See http://lists.w3.org/Archives/Public/www-style/2013Jan/0245.html
641 return child->minPreferredLogicalWidth() + marginIntrinsicLogicalWidthFo rChild(child); 641 return child.minPreferredLogicalWidth() + marginIntrinsicLogicalWidthFor Child(&child);
642 } 642 }
643 643
644 return logicalHeightForChild(child, columnTracks); 644 return logicalHeightForChild(child, columnTracks);
645 } 645 }
646 646
647 LayoutUnit RenderGrid::maxContentForChild(RenderBox* child, GridTrackSizingDirec tion direction, Vector<GridTrack>& columnTracks) 647 LayoutUnit RenderGrid::maxContentForChild(RenderBox& child, GridTrackSizingDirec tion direction, Vector<GridTrack>& columnTracks)
648 { 648 {
649 bool hasOrthogonalWritingMode = child->isHorizontalWritingMode() != isHorizo ntalWritingMode(); 649 bool hasOrthogonalWritingMode = child.isHorizontalWritingMode() != isHorizon talWritingMode();
650 // FIXME: Properly support orthogonal writing mode. 650 // FIXME: Properly support orthogonal writing mode.
651 if (hasOrthogonalWritingMode) 651 if (hasOrthogonalWritingMode)
652 return LayoutUnit(); 652 return LayoutUnit();
653 653
654 if (direction == ForColumns) { 654 if (direction == ForColumns) {
655 // FIXME: It's unclear if we should return the intrinsic width or the pr eferred width. 655 // FIXME: It's unclear if we should return the intrinsic width or the pr eferred width.
656 // See http://lists.w3.org/Archives/Public/www-style/2013Jan/0245.html 656 // See http://lists.w3.org/Archives/Public/www-style/2013Jan/0245.html
657 return child->maxPreferredLogicalWidth() + marginIntrinsicLogicalWidthFo rChild(child); 657 return child.maxPreferredLogicalWidth() + marginIntrinsicLogicalWidthFor Child(&child);
658 } 658 }
659 659
660 return logicalHeightForChild(child, columnTracks); 660 return logicalHeightForChild(child, columnTracks);
661 } 661 }
662 662
663 size_t RenderGrid::gridItemSpan(const RenderBox* child, GridTrackSizingDirection direction) 663 size_t RenderGrid::gridItemSpan(const RenderBox& child, GridTrackSizingDirection direction)
664 { 664 {
665 GridCoordinate childCoordinate = cachedGridCoordinate(child); 665 GridCoordinate childCoordinate = cachedGridCoordinate(child);
666 GridSpan childSpan = (direction == ForRows) ? childCoordinate.rows : childCo ordinate.columns; 666 GridSpan childSpan = (direction == ForRows) ? childCoordinate.rows : childCo ordinate.columns;
667 667
668 return childSpan.resolvedFinalPosition.toInt() - childSpan.resolvedInitialPo sition.toInt() + 1; 668 return childSpan.resolvedFinalPosition.toInt() - childSpan.resolvedInitialPo sition.toInt() + 1;
669 } 669 }
670 670
671 typedef std::pair<RenderBox*, size_t> GridItemWithSpan; 671 typedef std::pair<RenderBox*, size_t> GridItemWithSpan;
672 672
673 // This function sorts by span (.second in the pair) but also places pointers (. first in the pair) to the same object in 673 // This function sorts by span (.second in the pair) but also places pointers (. first in the pair) to the same object in
(...skipping 14 matching lines...) Expand all
688 void RenderGrid::resolveContentBasedTrackSizingFunctions(GridTrackSizingDirectio n direction, GridSizingData& sizingData, LayoutUnit& availableLogicalSpace) 688 void RenderGrid::resolveContentBasedTrackSizingFunctions(GridTrackSizingDirectio n direction, GridSizingData& sizingData, LayoutUnit& availableLogicalSpace)
689 { 689 {
690 // FIXME: Split the grid tracks into groups that doesn't overlap a <flex> gr id track (crbug.com/235258). 690 // FIXME: Split the grid tracks into groups that doesn't overlap a <flex> gr id track (crbug.com/235258).
691 691
692 for (size_t i = 0; i < sizingData.contentSizedTracksIndex.size(); ++i) { 692 for (size_t i = 0; i < sizingData.contentSizedTracksIndex.size(); ++i) {
693 size_t trackIndex = sizingData.contentSizedTracksIndex[i]; 693 size_t trackIndex = sizingData.contentSizedTracksIndex[i];
694 GridIterator iterator(m_grid, direction, trackIndex); 694 GridIterator iterator(m_grid, direction, trackIndex);
695 Vector<GridItemWithSpan> itemsSortedByIncreasingSpan; 695 Vector<GridItemWithSpan> itemsSortedByIncreasingSpan;
696 696
697 while (RenderBox* gridItem = iterator.nextGridItem()) 697 while (RenderBox* gridItem = iterator.nextGridItem())
698 itemsSortedByIncreasingSpan.append(std::make_pair(gridItem, gridItem Span(gridItem, direction))); 698 itemsSortedByIncreasingSpan.append(std::make_pair(gridItem, gridItem Span(*gridItem, direction)));
699 std::stable_sort(itemsSortedByIncreasingSpan.begin(), itemsSortedByIncre asingSpan.end(), gridItemWithSpanSorter); 699 std::stable_sort(itemsSortedByIncreasingSpan.begin(), itemsSortedByIncre asingSpan.end(), gridItemWithSpanSorter);
700 Vector<GridItemWithSpan>::iterator end = std::unique(itemsSortedByIncrea singSpan.begin(), itemsSortedByIncreasingSpan.end(), uniquePointerInPair); 700 Vector<GridItemWithSpan>::iterator end = std::unique(itemsSortedByIncrea singSpan.begin(), itemsSortedByIncreasingSpan.end(), uniquePointerInPair);
701 701
702 for (Vector<GridItemWithSpan>::iterator it = itemsSortedByIncreasingSpan .begin(); it != end; ++it) { 702 for (Vector<GridItemWithSpan>::iterator it = itemsSortedByIncreasingSpan .begin(); it != end; ++it) {
703 RenderBox* gridItem = it->first; 703 RenderBox* gridItem = it->first;
704 resolveContentBasedTrackSizingFunctionsForItems(direction, sizingDat a, gridItem, &GridTrackSize::hasMinOrMaxContentMinTrackBreadth, &RenderGrid::min ContentForChild, &GridTrack::usedBreadth, &GridTrack::growUsedBreadth); 704 resolveContentBasedTrackSizingFunctionsForItems(direction, sizingDat a, *gridItem, &GridTrackSize::hasMinOrMaxContentMinTrackBreadth, &RenderGrid::mi nContentForChild, &GridTrack::usedBreadth, &GridTrack::growUsedBreadth);
705 resolveContentBasedTrackSizingFunctionsForItems(direction, sizingDat a, gridItem, &GridTrackSize::hasMaxContentMinTrackBreadth, &RenderGrid::maxConte ntForChild, &GridTrack::usedBreadth, &GridTrack::growUsedBreadth); 705 resolveContentBasedTrackSizingFunctionsForItems(direction, sizingDat a, *gridItem, &GridTrackSize::hasMaxContentMinTrackBreadth, &RenderGrid::maxCont entForChild, &GridTrack::usedBreadth, &GridTrack::growUsedBreadth);
706 resolveContentBasedTrackSizingFunctionsForItems(direction, sizingDat a, gridItem, &GridTrackSize::hasMinOrMaxContentMaxTrackBreadth, &RenderGrid::min ContentForChild, &GridTrack::maxBreadthIfNotInfinite, &GridTrack::growMaxBreadth ); 706 resolveContentBasedTrackSizingFunctionsForItems(direction, sizingDat a, *gridItem, &GridTrackSize::hasMinOrMaxContentMaxTrackBreadth, &RenderGrid::mi nContentForChild, &GridTrack::maxBreadthIfNotInfinite, &GridTrack::growMaxBreadt h);
707 resolveContentBasedTrackSizingFunctionsForItems(direction, sizingDat a, gridItem, &GridTrackSize::hasMaxContentMaxTrackBreadth, &RenderGrid::maxConte ntForChild, &GridTrack::maxBreadthIfNotInfinite, &GridTrack::growMaxBreadth); 707 resolveContentBasedTrackSizingFunctionsForItems(direction, sizingDat a, *gridItem, &GridTrackSize::hasMaxContentMaxTrackBreadth, &RenderGrid::maxCont entForChild, &GridTrack::maxBreadthIfNotInfinite, &GridTrack::growMaxBreadth);
708 } 708 }
709 709
710 GridTrack& track = (direction == ForColumns) ? sizingData.columnTracks[t rackIndex] : sizingData.rowTracks[trackIndex]; 710 GridTrack& track = (direction == ForColumns) ? sizingData.columnTracks[t rackIndex] : sizingData.rowTracks[trackIndex];
711 if (track.m_maxBreadth == infinity) 711 if (track.m_maxBreadth == infinity)
712 track.m_maxBreadth = track.m_usedBreadth; 712 track.m_maxBreadth = track.m_usedBreadth;
713 } 713 }
714 } 714 }
715 715
716 void RenderGrid::resolveContentBasedTrackSizingFunctionsForItems(GridTrackSizing Direction direction, GridSizingData& sizingData, RenderBox* gridItem, FilterFunc tion filterFunction, SizingFunction sizingFunction, AccumulatorGetter trackGette r, AccumulatorGrowFunction trackGrowthFunction) 716 void RenderGrid::resolveContentBasedTrackSizingFunctionsForItems(GridTrackSizing Direction direction, GridSizingData& sizingData, RenderBox& gridItem, FilterFunc tion filterFunction, SizingFunction sizingFunction, AccumulatorGetter trackGette r, AccumulatorGrowFunction trackGrowthFunction)
717 { 717 {
718 const GridCoordinate coordinate = cachedGridCoordinate(gridItem); 718 const GridCoordinate coordinate = cachedGridCoordinate(gridItem);
719 const GridResolvedPosition initialTrackPosition = (direction == ForColumns) ? coordinate.columns.resolvedInitialPosition : coordinate.rows.resolvedInitialPo sition; 719 const GridResolvedPosition initialTrackPosition = (direction == ForColumns) ? coordinate.columns.resolvedInitialPosition : coordinate.rows.resolvedInitialPo sition;
720 const GridResolvedPosition finalTrackPosition = (direction == ForColumns) ? coordinate.columns.resolvedFinalPosition : coordinate.rows.resolvedFinalPosition ; 720 const GridResolvedPosition finalTrackPosition = (direction == ForColumns) ? coordinate.columns.resolvedFinalPosition : coordinate.rows.resolvedFinalPosition ;
721 721
722 sizingData.filteredTracks.shrink(0); 722 sizingData.filteredTracks.shrink(0);
723 for (GridResolvedPosition trackPosition = initialTrackPosition; trackPositio n <= finalTrackPosition; ++trackPosition) { 723 for (GridResolvedPosition trackPosition = initialTrackPosition; trackPositio n <= finalTrackPosition; ++trackPosition) {
724 const GridTrackSize& trackSize = gridTrackSize(direction, trackPosition. toInt()); 724 const GridTrackSize& trackSize = gridTrackSize(direction, trackPosition. toInt());
725 if (!(trackSize.*filterFunction)()) 725 if (!(trackSize.*filterFunction)())
726 continue; 726 continue;
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
818 for (size_t row = oldRowSize; row < gridRowCount(); ++row) 818 for (size_t row = oldRowSize; row < gridRowCount(); ++row)
819 m_grid[row].grow(gridColumnCount()); 819 m_grid[row].grow(gridColumnCount());
820 } 820 }
821 821
822 if (maximumColumnIndex >= gridColumnCount()) { 822 if (maximumColumnIndex >= gridColumnCount()) {
823 for (size_t row = 0; row < gridRowCount(); ++row) 823 for (size_t row = 0; row < gridRowCount(); ++row)
824 m_grid[row].grow(maximumColumnIndex + 1); 824 m_grid[row].grow(maximumColumnIndex + 1);
825 } 825 }
826 } 826 }
827 827
828 void RenderGrid::insertItemIntoGrid(RenderBox* child, const GridCoordinate& coor dinate) 828 void RenderGrid::insertItemIntoGrid(RenderBox& child, const GridCoordinate& coor dinate)
829 { 829 {
830 ensureGridSize(coordinate.rows.resolvedFinalPosition.toInt(), coordinate.col umns.resolvedFinalPosition.toInt()); 830 ensureGridSize(coordinate.rows.resolvedFinalPosition.toInt(), coordinate.col umns.resolvedFinalPosition.toInt());
831 831
832 for (GridSpan::iterator row = coordinate.rows.begin(); row != coordinate.row s.end(); ++row) { 832 for (GridSpan::iterator row = coordinate.rows.begin(); row != coordinate.row s.end(); ++row) {
833 for (GridSpan::iterator column = coordinate.columns.begin(); column != c oordinate.columns.end(); ++column) 833 for (GridSpan::iterator column = coordinate.columns.begin(); column != c oordinate.columns.end(); ++column)
834 m_grid[row.toInt()][column.toInt()].append(child); 834 m_grid[row.toInt()][column.toInt()].append(&child);
835 } 835 }
836 836
837 RELEASE_ASSERT(!m_gridItemCoordinate.contains(child)); 837 RELEASE_ASSERT(!m_gridItemCoordinate.contains(&child));
838 m_gridItemCoordinate.set(child, coordinate); 838 m_gridItemCoordinate.set(&child, coordinate);
839 } 839 }
840 840
841 void RenderGrid::placeItemsOnGrid() 841 void RenderGrid::placeItemsOnGrid()
842 { 842 {
843 if (!gridIsDirty()) 843 if (!gridIsDirty())
844 return; 844 return;
845 845
846 ASSERT(m_gridItemCoordinate.isEmpty()); 846 ASSERT(m_gridItemCoordinate.isEmpty());
847 847
848 populateExplicitGridAndOrderIterator(); 848 populateExplicitGridAndOrderIterator();
(...skipping 10 matching lines...) Expand all
859 OwnPtr<GridSpan> rowPositions = GridResolvedPosition::resolveGridPositio nsFromStyle(*style(), *child, ForRows); 859 OwnPtr<GridSpan> rowPositions = GridResolvedPosition::resolveGridPositio nsFromStyle(*style(), *child, ForRows);
860 OwnPtr<GridSpan> columnPositions = GridResolvedPosition::resolveGridPosi tionsFromStyle(*style(), *child, ForColumns); 860 OwnPtr<GridSpan> columnPositions = GridResolvedPosition::resolveGridPosi tionsFromStyle(*style(), *child, ForColumns);
861 if (!rowPositions || !columnPositions) { 861 if (!rowPositions || !columnPositions) {
862 GridSpan* majorAxisPositions = (autoPlacementMajorAxisDirection() == ForColumns) ? columnPositions.get() : rowPositions.get(); 862 GridSpan* majorAxisPositions = (autoPlacementMajorAxisDirection() == ForColumns) ? columnPositions.get() : rowPositions.get();
863 if (!majorAxisPositions) 863 if (!majorAxisPositions)
864 autoMajorAxisAutoGridItems.append(child); 864 autoMajorAxisAutoGridItems.append(child);
865 else 865 else
866 specifiedMajorAxisAutoGridItems.append(child); 866 specifiedMajorAxisAutoGridItems.append(child);
867 continue; 867 continue;
868 } 868 }
869 insertItemIntoGrid(child, GridCoordinate(*rowPositions, *columnPositions )); 869 insertItemIntoGrid(*child, GridCoordinate(*rowPositions, *columnPosition s));
870 } 870 }
871 871
872 ASSERT(gridRowCount() >= style()->gridTemplateRows().size()); 872 ASSERT(gridRowCount() >= style()->gridTemplateRows().size());
873 ASSERT(gridColumnCount() >= style()->gridTemplateColumns().size()); 873 ASSERT(gridColumnCount() >= style()->gridTemplateColumns().size());
874 874
875 // FIXME: Implement properly "stack" value in auto-placement algorithm. 875 // FIXME: Implement properly "stack" value in auto-placement algorithm.
876 if (style()->isGridAutoFlowAlgorithmStack()) { 876 if (style()->isGridAutoFlowAlgorithmStack()) {
877 // If we did collect some grid items, they won't be placed thus never la id out. 877 // If we did collect some grid items, they won't be placed thus never la id out.
878 ASSERT(!autoMajorAxisAutoGridItems.size()); 878 ASSERT(!autoMajorAxisAutoGridItems.size());
879 ASSERT(!specifiedMajorAxisAutoGridItems.size()); 879 ASSERT(!specifiedMajorAxisAutoGridItems.size());
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
919 GridSpan positions = GridResolvedPosition::resolveGridPositionsFromA utoPlacementPosition(*style(), *child, ForColumns, GridResolvedPosition(0)); 919 GridSpan positions = GridResolvedPosition::resolveGridPositionsFromA utoPlacementPosition(*style(), *child, ForColumns, GridResolvedPosition(0));
920 maximumColumnIndex = std::max<size_t>(maximumColumnIndex, positions. resolvedFinalPosition.next().toInt()); 920 maximumColumnIndex = std::max<size_t>(maximumColumnIndex, positions. resolvedFinalPosition.next().toInt());
921 } 921 }
922 } 922 }
923 923
924 m_grid.grow(maximumRowIndex); 924 m_grid.grow(maximumRowIndex);
925 for (size_t i = 0; i < m_grid.size(); ++i) 925 for (size_t i = 0; i < m_grid.size(); ++i)
926 m_grid[i].grow(maximumColumnIndex); 926 m_grid[i].grow(maximumColumnIndex);
927 } 927 }
928 928
929 PassOwnPtr<GridCoordinate> RenderGrid::createEmptyGridAreaAtSpecifiedPositionsOu tsideGrid(const RenderBox* gridItem, GridTrackSizingDirection specifiedDirection , const GridSpan& specifiedPositions) const 929 PassOwnPtr<GridCoordinate> RenderGrid::createEmptyGridAreaAtSpecifiedPositionsOu tsideGrid(const RenderBox& gridItem, GridTrackSizingDirection specifiedDirection , const GridSpan& specifiedPositions) const
930 { 930 {
931 GridTrackSizingDirection crossDirection = specifiedDirection == ForColumns ? ForRows : ForColumns; 931 GridTrackSizingDirection crossDirection = specifiedDirection == ForColumns ? ForRows : ForColumns;
932 const size_t endOfCrossDirection = crossDirection == ForColumns ? gridColumn Count() : gridRowCount(); 932 const size_t endOfCrossDirection = crossDirection == ForColumns ? gridColumn Count() : gridRowCount();
933 GridSpan crossDirectionPositions = GridResolvedPosition::resolveGridPosition sFromAutoPlacementPosition(*style(), *gridItem, crossDirection, GridResolvedPosi tion(endOfCrossDirection)); 933 GridSpan crossDirectionPositions = GridResolvedPosition::resolveGridPosition sFromAutoPlacementPosition(*style(), gridItem, crossDirection, GridResolvedPosit ion(endOfCrossDirection));
934 return adoptPtr(new GridCoordinate(specifiedDirection == ForColumns ? crossD irectionPositions : specifiedPositions, specifiedDirection == ForColumns ? speci fiedPositions : crossDirectionPositions)); 934 return adoptPtr(new GridCoordinate(specifiedDirection == ForColumns ? crossD irectionPositions : specifiedPositions, specifiedDirection == ForColumns ? speci fiedPositions : crossDirectionPositions));
935 } 935 }
936 936
937 void RenderGrid::placeSpecifiedMajorAxisItemsOnGrid(const Vector<RenderBox*>& au toGridItems) 937 void RenderGrid::placeSpecifiedMajorAxisItemsOnGrid(const Vector<RenderBox*>& au toGridItems)
938 { 938 {
939 for (size_t i = 0; i < autoGridItems.size(); ++i) { 939 for (size_t i = 0; i < autoGridItems.size(); ++i) {
940 OwnPtr<GridSpan> majorAxisPositions = GridResolvedPosition::resolveGridP ositionsFromStyle(*style(), *autoGridItems[i], autoPlacementMajorAxisDirection() ); 940 OwnPtr<GridSpan> majorAxisPositions = GridResolvedPosition::resolveGridP ositionsFromStyle(*style(), *autoGridItems[i], autoPlacementMajorAxisDirection() );
941 GridSpan minorAxisPositions = GridResolvedPosition::resolveGridPositions FromAutoPlacementPosition(*style(), *autoGridItems[i], autoPlacementMinorAxisDir ection(), GridResolvedPosition(0)); 941 GridSpan minorAxisPositions = GridResolvedPosition::resolveGridPositions FromAutoPlacementPosition(*style(), *autoGridItems[i], autoPlacementMinorAxisDir ection(), GridResolvedPosition(0));
942 942
943 GridIterator iterator(m_grid, autoPlacementMajorAxisDirection(), majorAx isPositions->resolvedInitialPosition.toInt()); 943 GridIterator iterator(m_grid, autoPlacementMajorAxisDirection(), majorAx isPositions->resolvedInitialPosition.toInt());
944 OwnPtr<GridCoordinate> emptyGridArea = iterator.nextEmptyGridArea(majorA xisPositions->integerSpan(), minorAxisPositions.integerSpan()); 944 OwnPtr<GridCoordinate> emptyGridArea = iterator.nextEmptyGridArea(majorA xisPositions->integerSpan(), minorAxisPositions.integerSpan());
945 if (!emptyGridArea) 945 if (!emptyGridArea)
946 emptyGridArea = createEmptyGridAreaAtSpecifiedPositionsOutsideGrid(a utoGridItems[i], autoPlacementMajorAxisDirection(), *majorAxisPositions); 946 emptyGridArea = createEmptyGridAreaAtSpecifiedPositionsOutsideGrid(* autoGridItems[i], autoPlacementMajorAxisDirection(), *majorAxisPositions);
947 insertItemIntoGrid(autoGridItems[i], *emptyGridArea); 947 insertItemIntoGrid(*autoGridItems[i], *emptyGridArea);
948 } 948 }
949 } 949 }
950 950
951 void RenderGrid::placeAutoMajorAxisItemsOnGrid(const Vector<RenderBox*>& autoGri dItems) 951 void RenderGrid::placeAutoMajorAxisItemsOnGrid(const Vector<RenderBox*>& autoGri dItems)
952 { 952 {
953 std::pair<size_t, size_t> autoPlacementCursor = std::make_pair(0, 0); 953 std::pair<size_t, size_t> autoPlacementCursor = std::make_pair(0, 0);
954 bool isGridAutoFlowDense = style()->isGridAutoFlowAlgorithmDense(); 954 bool isGridAutoFlowDense = style()->isGridAutoFlowAlgorithmDense();
955 955
956 for (size_t i = 0; i < autoGridItems.size(); ++i) { 956 for (size_t i = 0; i < autoGridItems.size(); ++i) {
957 placeAutoMajorAxisItemOnGrid(autoGridItems[i], autoPlacementCursor); 957 placeAutoMajorAxisItemOnGrid(*autoGridItems[i], autoPlacementCursor);
958 958
959 // If grid-auto-flow is dense, reset auto-placement cursor. 959 // If grid-auto-flow is dense, reset auto-placement cursor.
960 if (isGridAutoFlowDense) { 960 if (isGridAutoFlowDense) {
961 autoPlacementCursor.first = 0; 961 autoPlacementCursor.first = 0;
962 autoPlacementCursor.second = 0; 962 autoPlacementCursor.second = 0;
963 } 963 }
964 } 964 }
965 } 965 }
966 966
967 void RenderGrid::placeAutoMajorAxisItemOnGrid(RenderBox* gridItem, std::pair<siz e_t, size_t>& autoPlacementCursor) 967 void RenderGrid::placeAutoMajorAxisItemOnGrid(RenderBox& gridItem, std::pair<siz e_t, size_t>& autoPlacementCursor)
968 { 968 {
969 OwnPtr<GridSpan> minorAxisPositions = GridResolvedPosition::resolveGridPosit ionsFromStyle(*style(), *gridItem, autoPlacementMinorAxisDirection()); 969 OwnPtr<GridSpan> minorAxisPositions = GridResolvedPosition::resolveGridPosit ionsFromStyle(*style(), gridItem, autoPlacementMinorAxisDirection());
970 ASSERT(!GridResolvedPosition::resolveGridPositionsFromStyle(*style(), *gridI tem, autoPlacementMajorAxisDirection())); 970 ASSERT(!GridResolvedPosition::resolveGridPositionsFromStyle(*style(), gridIt em, autoPlacementMajorAxisDirection()));
971 GridSpan majorAxisPositions = GridResolvedPosition::resolveGridPositionsFrom AutoPlacementPosition(*style(), *gridItem, autoPlacementMajorAxisDirection(), Gr idResolvedPosition(0)); 971 GridSpan majorAxisPositions = GridResolvedPosition::resolveGridPositionsFrom AutoPlacementPosition(*style(), gridItem, autoPlacementMajorAxisDirection(), Gri dResolvedPosition(0));
972 972
973 const size_t endOfMajorAxis = (autoPlacementMajorAxisDirection() == ForColum ns) ? gridColumnCount() : gridRowCount(); 973 const size_t endOfMajorAxis = (autoPlacementMajorAxisDirection() == ForColum ns) ? gridColumnCount() : gridRowCount();
974 size_t majorAxisAutoPlacementCursor = autoPlacementMajorAxisDirection() == F orColumns ? autoPlacementCursor.second : autoPlacementCursor.first; 974 size_t majorAxisAutoPlacementCursor = autoPlacementMajorAxisDirection() == F orColumns ? autoPlacementCursor.second : autoPlacementCursor.first;
975 size_t minorAxisAutoPlacementCursor = autoPlacementMajorAxisDirection() == F orColumns ? autoPlacementCursor.first : autoPlacementCursor.second; 975 size_t minorAxisAutoPlacementCursor = autoPlacementMajorAxisDirection() == F orColumns ? autoPlacementCursor.first : autoPlacementCursor.second;
976 976
977 OwnPtr<GridCoordinate> emptyGridArea; 977 OwnPtr<GridCoordinate> emptyGridArea;
978 if (minorAxisPositions) { 978 if (minorAxisPositions) {
979 // Move to the next track in major axis if initial position in minor axi s is before auto-placement cursor. 979 // Move to the next track in major axis if initial position in minor axi s is before auto-placement cursor.
980 if (minorAxisPositions->resolvedInitialPosition.toInt() < minorAxisAutoP lacementCursor) 980 if (minorAxisPositions->resolvedInitialPosition.toInt() < minorAxisAutoP lacementCursor)
981 majorAxisAutoPlacementCursor++; 981 majorAxisAutoPlacementCursor++;
982 982
983 if (majorAxisAutoPlacementCursor < endOfMajorAxis) { 983 if (majorAxisAutoPlacementCursor < endOfMajorAxis) {
984 GridIterator iterator(m_grid, autoPlacementMinorAxisDirection(), min orAxisPositions->resolvedInitialPosition.toInt(), majorAxisAutoPlacementCursor); 984 GridIterator iterator(m_grid, autoPlacementMinorAxisDirection(), min orAxisPositions->resolvedInitialPosition.toInt(), majorAxisAutoPlacementCursor);
985 emptyGridArea = iterator.nextEmptyGridArea(minorAxisPositions->integ erSpan(), majorAxisPositions.integerSpan()); 985 emptyGridArea = iterator.nextEmptyGridArea(minorAxisPositions->integ erSpan(), majorAxisPositions.integerSpan());
986 } 986 }
987 987
988 if (!emptyGridArea) 988 if (!emptyGridArea)
989 emptyGridArea = createEmptyGridAreaAtSpecifiedPositionsOutsideGrid(g ridItem, autoPlacementMinorAxisDirection(), *minorAxisPositions); 989 emptyGridArea = createEmptyGridAreaAtSpecifiedPositionsOutsideGrid(g ridItem, autoPlacementMinorAxisDirection(), *minorAxisPositions);
990 } else { 990 } else {
991 GridSpan minorAxisPositions = GridResolvedPosition::resolveGridPositions FromAutoPlacementPosition(*style(), *gridItem, autoPlacementMinorAxisDirection() , GridResolvedPosition(0)); 991 GridSpan minorAxisPositions = GridResolvedPosition::resolveGridPositions FromAutoPlacementPosition(*style(), gridItem, autoPlacementMinorAxisDirection(), GridResolvedPosition(0));
992 992
993 for (size_t majorAxisIndex = majorAxisAutoPlacementCursor; majorAxisInde x < endOfMajorAxis; ++majorAxisIndex) { 993 for (size_t majorAxisIndex = majorAxisAutoPlacementCursor; majorAxisInde x < endOfMajorAxis; ++majorAxisIndex) {
994 GridIterator iterator(m_grid, autoPlacementMajorAxisDirection(), maj orAxisIndex, minorAxisAutoPlacementCursor); 994 GridIterator iterator(m_grid, autoPlacementMajorAxisDirection(), maj orAxisIndex, minorAxisAutoPlacementCursor);
995 emptyGridArea = iterator.nextEmptyGridArea(majorAxisPositions.intege rSpan(), minorAxisPositions.integerSpan()); 995 emptyGridArea = iterator.nextEmptyGridArea(majorAxisPositions.intege rSpan(), minorAxisPositions.integerSpan());
996 996
997 if (emptyGridArea) { 997 if (emptyGridArea) {
998 // Check that it fits in the minor axis direction, as we shouldn 't grow in that direction here (it was already managed in populateExplicitGridAn dOrderIterator()). 998 // Check that it fits in the minor axis direction, as we shouldn 't grow in that direction here (it was already managed in populateExplicitGridAn dOrderIterator()).
999 GridResolvedPosition minorAxisFinalPositionIndex = autoPlacement MinorAxisDirection() == ForColumns ? emptyGridArea->columns.resolvedFinalPositio n : emptyGridArea->rows.resolvedFinalPosition; 999 GridResolvedPosition minorAxisFinalPositionIndex = autoPlacement MinorAxisDirection() == ForColumns ? emptyGridArea->columns.resolvedFinalPositio n : emptyGridArea->rows.resolvedFinalPosition;
1000 const size_t endOfMinorAxis = autoPlacementMinorAxisDirection() == ForColumns ? gridColumnCount() : gridRowCount(); 1000 const size_t endOfMinorAxis = autoPlacementMinorAxisDirection() == ForColumns ? gridColumnCount() : gridRowCount();
1001 if (minorAxisFinalPositionIndex.toInt() < endOfMinorAxis) 1001 if (minorAxisFinalPositionIndex.toInt() < endOfMinorAxis)
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
1051 1051
1052 populateGridPositions(sizingData); 1052 populateGridPositions(sizingData);
1053 m_gridItemsOverflowingGridArea.resize(0); 1053 m_gridItemsOverflowingGridArea.resize(0);
1054 1054
1055 for (RenderBox* child = firstChildBox(); child; child = child->nextSiblingBo x()) { 1055 for (RenderBox* child = firstChildBox(); child; child = child->nextSiblingBo x()) {
1056 // Because the grid area cannot be styled, we don't need to adjust 1056 // Because the grid area cannot be styled, we don't need to adjust
1057 // the grid breadth to account for 'box-sizing'. 1057 // the grid breadth to account for 'box-sizing'.
1058 LayoutUnit oldOverrideContainingBlockContentLogicalWidth = child->hasOve rrideContainingBlockLogicalWidth() ? child->overrideContainingBlockContentLogica lWidth() : LayoutUnit(); 1058 LayoutUnit oldOverrideContainingBlockContentLogicalWidth = child->hasOve rrideContainingBlockLogicalWidth() ? child->overrideContainingBlockContentLogica lWidth() : LayoutUnit();
1059 LayoutUnit oldOverrideContainingBlockContentLogicalHeight = child->hasOv errideContainingBlockLogicalHeight() ? child->overrideContainingBlockContentLogi calHeight() : LayoutUnit(); 1059 LayoutUnit oldOverrideContainingBlockContentLogicalHeight = child->hasOv errideContainingBlockLogicalHeight() ? child->overrideContainingBlockContentLogi calHeight() : LayoutUnit();
1060 1060
1061 LayoutUnit overrideContainingBlockContentLogicalWidth = gridAreaBreadthF orChild(child, ForColumns, sizingData.columnTracks); 1061 LayoutUnit overrideContainingBlockContentLogicalWidth = gridAreaBreadthF orChild(*child, ForColumns, sizingData.columnTracks);
1062 LayoutUnit overrideContainingBlockContentLogicalHeight = gridAreaBreadth ForChild(child, ForRows, sizingData.rowTracks); 1062 LayoutUnit overrideContainingBlockContentLogicalHeight = gridAreaBreadth ForChild(*child, ForRows, sizingData.rowTracks);
1063 1063
1064 SubtreeLayoutScope layoutScope(*child); 1064 SubtreeLayoutScope layoutScope(*child);
1065 if (oldOverrideContainingBlockContentLogicalWidth != overrideContainingB lockContentLogicalWidth || (oldOverrideContainingBlockContentLogicalHeight != ov errideContainingBlockContentLogicalHeight && child->hasRelativeLogicalHeight())) 1065 if (oldOverrideContainingBlockContentLogicalWidth != overrideContainingB lockContentLogicalWidth || (oldOverrideContainingBlockContentLogicalHeight != ov errideContainingBlockContentLogicalHeight && child->hasRelativeLogicalHeight()))
1066 layoutScope.setNeedsLayout(child); 1066 layoutScope.setNeedsLayout(child);
1067 1067
1068 child->setOverrideContainingBlockContentLogicalWidth(overrideContainingB lockContentLogicalWidth); 1068 child->setOverrideContainingBlockContentLogicalWidth(overrideContainingB lockContentLogicalWidth);
1069 child->setOverrideContainingBlockContentLogicalHeight(overrideContaining BlockContentLogicalHeight); 1069 child->setOverrideContainingBlockContentLogicalHeight(overrideContaining BlockContentLogicalHeight);
1070 1070
1071 // FIXME: Grid items should stretch to fill their cells. Once we 1071 // FIXME: Grid items should stretch to fill their cells. Once we
1072 // implement grid-{column,row}-align, we can also shrink to fit. For 1072 // implement grid-{column,row}-align, we can also shrink to fit. For
1073 // now, just size as if we were a regular child. 1073 // now, just size as if we were a regular child.
1074 child->layoutIfNeeded(); 1074 child->layoutIfNeeded();
1075 1075
1076 #if ENABLE(ASSERT) 1076 #if ENABLE(ASSERT)
1077 const GridCoordinate& coordinate = cachedGridCoordinate(child); 1077 const GridCoordinate& coordinate = cachedGridCoordinate(*child);
1078 ASSERT(coordinate.columns.resolvedInitialPosition.toInt() < sizingData.c olumnTracks.size()); 1078 ASSERT(coordinate.columns.resolvedInitialPosition.toInt() < sizingData.c olumnTracks.size());
1079 ASSERT(coordinate.rows.resolvedInitialPosition.toInt() < sizingData.rowT racks.size()); 1079 ASSERT(coordinate.rows.resolvedInitialPosition.toInt() < sizingData.rowT racks.size());
1080 #endif 1080 #endif
1081 child->setLogicalLocation(findChildLogicalPosition(child)); 1081 child->setLogicalLocation(findChildLogicalPosition(*child));
1082 1082
1083 // Keep track of children overflowing their grid area as we might need t o paint them even if the grid-area is 1083 // Keep track of children overflowing their grid area as we might need t o paint them even if the grid-area is
1084 // not visible 1084 // not visible
1085 if (child->logicalHeight() > overrideContainingBlockContentLogicalHeight 1085 if (child->logicalHeight() > overrideContainingBlockContentLogicalHeight
1086 || child->logicalWidth() > overrideContainingBlockContentLogicalWidt h) 1086 || child->logicalWidth() > overrideContainingBlockContentLogicalWidt h)
1087 m_gridItemsOverflowingGridArea.append(child); 1087 m_gridItemsOverflowingGridArea.append(child);
1088 } 1088 }
1089 1089
1090 for (size_t i = 0; i < sizingData.rowTracks.size(); ++i) 1090 for (size_t i = 0; i < sizingData.rowTracks.size(); ++i)
1091 setLogicalHeight(logicalHeight() + sizingData.rowTracks[i].m_usedBreadth ); 1091 setLogicalHeight(logicalHeight() + sizingData.rowTracks[i].m_usedBreadth );
1092 1092
1093 // Min / max logical height is handled by the call to updateLogicalHeight in layoutBlock. 1093 // Min / max logical height is handled by the call to updateLogicalHeight in layoutBlock.
1094 1094
1095 setLogicalHeight(logicalHeight() + borderAndPaddingLogicalHeight()); 1095 setLogicalHeight(logicalHeight() + borderAndPaddingLogicalHeight());
1096 } 1096 }
1097 1097
1098 GridCoordinate RenderGrid::cachedGridCoordinate(const RenderBox* gridItem) const 1098 GridCoordinate RenderGrid::cachedGridCoordinate(const RenderBox& gridItem) const
1099 { 1099 {
1100 ASSERT(m_gridItemCoordinate.contains(gridItem)); 1100 ASSERT(m_gridItemCoordinate.contains(&gridItem));
1101 return m_gridItemCoordinate.get(gridItem); 1101 return m_gridItemCoordinate.get(&gridItem);
1102 } 1102 }
1103 1103
1104 LayoutUnit RenderGrid::gridAreaBreadthForChild(const RenderBox* child, GridTrack SizingDirection direction, const Vector<GridTrack>& tracks) const 1104 LayoutUnit RenderGrid::gridAreaBreadthForChild(const RenderBox& child, GridTrack SizingDirection direction, const Vector<GridTrack>& tracks) const
1105 { 1105 {
1106 const GridCoordinate& coordinate = cachedGridCoordinate(child); 1106 const GridCoordinate& coordinate = cachedGridCoordinate(child);
1107 const GridSpan& span = (direction == ForColumns) ? coordinate.columns : coor dinate.rows; 1107 const GridSpan& span = (direction == ForColumns) ? coordinate.columns : coor dinate.rows;
1108 LayoutUnit gridAreaBreadth = 0; 1108 LayoutUnit gridAreaBreadth = 0;
1109 for (GridSpan::iterator trackPosition = span.begin(); trackPosition != span. end(); ++trackPosition) 1109 for (GridSpan::iterator trackPosition = span.begin(); trackPosition != span. end(); ++trackPosition)
1110 gridAreaBreadth += tracks[trackPosition.toInt()].m_usedBreadth; 1110 gridAreaBreadth += tracks[trackPosition.toInt()].m_usedBreadth;
1111 return gridAreaBreadth; 1111 return gridAreaBreadth;
1112 } 1112 }
1113 1113
1114 void RenderGrid::populateGridPositions(const GridSizingData& sizingData) 1114 void RenderGrid::populateGridPositions(const GridSizingData& sizingData)
1115 { 1115 {
1116 m_columnPositions.resize(sizingData.columnTracks.size() + 1); 1116 m_columnPositions.resize(sizingData.columnTracks.size() + 1);
1117 m_columnPositions[0] = borderAndPaddingStart(); 1117 m_columnPositions[0] = borderAndPaddingStart();
1118 for (size_t i = 0; i < m_columnPositions.size() - 1; ++i) 1118 for (size_t i = 0; i < m_columnPositions.size() - 1; ++i)
1119 m_columnPositions[i + 1] = m_columnPositions[i] + sizingData.columnTrack s[i].m_usedBreadth; 1119 m_columnPositions[i + 1] = m_columnPositions[i] + sizingData.columnTrack s[i].m_usedBreadth;
1120 1120
1121 m_rowPositions.resize(sizingData.rowTracks.size() + 1); 1121 m_rowPositions.resize(sizingData.rowTracks.size() + 1);
1122 m_rowPositions[0] = borderAndPaddingBefore(); 1122 m_rowPositions[0] = borderAndPaddingBefore();
1123 for (size_t i = 0; i < m_rowPositions.size() - 1; ++i) 1123 for (size_t i = 0; i < m_rowPositions.size() - 1; ++i)
1124 m_rowPositions[i + 1] = m_rowPositions[i] + sizingData.rowTracks[i].m_us edBreadth; 1124 m_rowPositions[i + 1] = m_rowPositions[i] + sizingData.rowTracks[i].m_us edBreadth;
1125 } 1125 }
1126 1126
1127 LayoutUnit RenderGrid::startOfColumnForChild(const RenderBox* child) const 1127 LayoutUnit RenderGrid::startOfColumnForChild(const RenderBox& child) const
1128 { 1128 {
1129 const GridCoordinate& coordinate = cachedGridCoordinate(child); 1129 const GridCoordinate& coordinate = cachedGridCoordinate(child);
1130 LayoutUnit startOfColumn = m_columnPositions[coordinate.columns.resolvedInit ialPosition.toInt()]; 1130 LayoutUnit startOfColumn = m_columnPositions[coordinate.columns.resolvedInit ialPosition.toInt()];
1131 // The grid items should be inside the grid container's border box, that's w hy they need to be shifted. 1131 // The grid items should be inside the grid container's border box, that's w hy they need to be shifted.
1132 // FIXME: This should account for the grid item's <overflow-position>. 1132 // FIXME: This should account for the grid item's <overflow-position>.
1133 return startOfColumn + marginStartForChild(child); 1133 return startOfColumn + marginStartForChild(&child);
1134 } 1134 }
1135 1135
1136 LayoutUnit RenderGrid::endOfColumnForChild(const RenderBox* child) const 1136 LayoutUnit RenderGrid::endOfColumnForChild(const RenderBox& child) const
1137 { 1137 {
1138 const GridCoordinate& coordinate = cachedGridCoordinate(child); 1138 const GridCoordinate& coordinate = cachedGridCoordinate(child);
1139 LayoutUnit startOfColumn = m_columnPositions[coordinate.columns.resolvedInit ialPosition.toInt()]; 1139 LayoutUnit startOfColumn = m_columnPositions[coordinate.columns.resolvedInit ialPosition.toInt()];
1140 // The grid items should be inside the grid container's border box, that's w hy they need to be shifted. 1140 // The grid items should be inside the grid container's border box, that's w hy they need to be shifted.
1141 LayoutUnit columnPosition = startOfColumn + marginStartForChild(child); 1141 LayoutUnit columnPosition = startOfColumn + marginStartForChild(&child);
1142 1142
1143 LayoutUnit endOfColumn = m_columnPositions[coordinate.columns.resolvedFinalP osition.next().toInt()]; 1143 LayoutUnit endOfColumn = m_columnPositions[coordinate.columns.resolvedFinalP osition.next().toInt()];
1144 // FIXME: This should account for the grid item's <overflow-position>. 1144 // FIXME: This should account for the grid item's <overflow-position>.
1145 return columnPosition + std::max<LayoutUnit>(0, endOfColumn - m_columnPositi ons[coordinate.columns.resolvedInitialPosition.toInt()] - child->logicalWidth()) ; 1145 return columnPosition + std::max<LayoutUnit>(0, endOfColumn - m_columnPositi ons[coordinate.columns.resolvedInitialPosition.toInt()] - child.logicalWidth());
1146 } 1146 }
1147 1147
1148 LayoutUnit RenderGrid::columnPositionAlignedWithGridContainerStart(const RenderB ox* child) const 1148 LayoutUnit RenderGrid::columnPositionAlignedWithGridContainerStart(const RenderB ox& child) const
1149 { 1149 {
1150 if (style()->isLeftToRightDirection()) 1150 if (style()->isLeftToRightDirection())
1151 return startOfColumnForChild(child); 1151 return startOfColumnForChild(child);
1152 1152
1153 return endOfColumnForChild(child); 1153 return endOfColumnForChild(child);
1154 } 1154 }
1155 1155
1156 LayoutUnit RenderGrid::columnPositionAlignedWithGridContainerEnd(const RenderBox * child) const 1156 LayoutUnit RenderGrid::columnPositionAlignedWithGridContainerEnd(const RenderBox & child) const
1157 { 1157 {
1158 if (!style()->isLeftToRightDirection()) 1158 if (!style()->isLeftToRightDirection())
1159 return startOfColumnForChild(child); 1159 return startOfColumnForChild(child);
1160 1160
1161 return endOfColumnForChild(child); 1161 return endOfColumnForChild(child);
1162 } 1162 }
1163 1163
1164 LayoutUnit RenderGrid::centeredColumnPositionForChild(const RenderBox* child) co nst 1164 LayoutUnit RenderGrid::centeredColumnPositionForChild(const RenderBox& child) co nst
1165 { 1165 {
1166 const GridCoordinate& coordinate = cachedGridCoordinate(child); 1166 const GridCoordinate& coordinate = cachedGridCoordinate(child);
1167 LayoutUnit startOfColumn = m_columnPositions[coordinate.columns.resolvedInit ialPosition.toInt()]; 1167 LayoutUnit startOfColumn = m_columnPositions[coordinate.columns.resolvedInit ialPosition.toInt()];
1168 LayoutUnit endOfColumn = m_columnPositions[coordinate.columns.resolvedFinalP osition.next().toInt()]; 1168 LayoutUnit endOfColumn = m_columnPositions[coordinate.columns.resolvedFinalP osition.next().toInt()];
1169 LayoutUnit columnPosition = startOfColumn + marginStartForChild(child); 1169 LayoutUnit columnPosition = startOfColumn + marginStartForChild(&child);
1170 // FIXME: This should account for the grid item's <overflow-position>. 1170 // FIXME: This should account for the grid item's <overflow-position>.
1171 return columnPosition + std::max<LayoutUnit>(0, endOfColumn - startOfColumn - child->logicalWidth()) / 2; 1171 return columnPosition + std::max<LayoutUnit>(0, endOfColumn - startOfColumn - child.logicalWidth()) / 2;
1172 } 1172 }
1173 1173
1174 static ItemPosition resolveJustification(const RenderStyle* parentStyle, const R enderStyle* childStyle) 1174 static ItemPosition resolveJustification(const RenderStyle* parentStyle, const R enderStyle* childStyle)
1175 { 1175 {
1176 ItemPosition justify = childStyle->justifySelf(); 1176 ItemPosition justify = childStyle->justifySelf();
1177 if (justify == ItemPositionAuto) 1177 if (justify == ItemPositionAuto)
1178 justify = (parentStyle->justifyItems() == ItemPositionAuto) ? ItemPositi onStretch : parentStyle->justifyItems(); 1178 justify = (parentStyle->justifyItems() == ItemPositionAuto) ? ItemPositi onStretch : parentStyle->justifyItems();
1179 1179
1180 return justify; 1180 return justify;
1181 } 1181 }
1182 1182
1183 LayoutUnit RenderGrid::columnPositionForChild(const RenderBox* child) const 1183 LayoutUnit RenderGrid::columnPositionForChild(const RenderBox& child) const
1184 { 1184 {
1185 bool hasOrthogonalWritingMode = child->isHorizontalWritingMode() != isHorizo ntalWritingMode(); 1185 bool hasOrthogonalWritingMode = child.isHorizontalWritingMode() != isHorizon talWritingMode();
1186 1186
1187 switch (resolveJustification(style(), child->style())) { 1187 switch (resolveJustification(style(), child.style())) {
1188 case ItemPositionSelfStart: 1188 case ItemPositionSelfStart:
1189 // For orthogonal writing-modes, this computes to 'start' 1189 // For orthogonal writing-modes, this computes to 'start'
1190 // FIXME: grid track sizing and positioning do not support orthogonal mo des yet. 1190 // FIXME: grid track sizing and positioning do not support orthogonal mo des yet.
1191 if (hasOrthogonalWritingMode) 1191 if (hasOrthogonalWritingMode)
1192 return columnPositionAlignedWithGridContainerStart(child); 1192 return columnPositionAlignedWithGridContainerStart(child);
1193 1193
1194 // self-start is based on the child's direction. That's why we need to c heck against the grid container's direction. 1194 // self-start is based on the child's direction. That's why we need to c heck against the grid container's direction.
1195 if (child->style()->direction() != style()->direction()) 1195 if (child.style()->direction() != style()->direction())
1196 return columnPositionAlignedWithGridContainerEnd(child); 1196 return columnPositionAlignedWithGridContainerEnd(child);
1197 1197
1198 return columnPositionAlignedWithGridContainerStart(child); 1198 return columnPositionAlignedWithGridContainerStart(child);
1199 case ItemPositionSelfEnd: 1199 case ItemPositionSelfEnd:
1200 // For orthogonal writing-modes, this computes to 'start' 1200 // For orthogonal writing-modes, this computes to 'start'
1201 // FIXME: grid track sizing and positioning do not support orthogonal mo des yet. 1201 // FIXME: grid track sizing and positioning do not support orthogonal mo des yet.
1202 if (hasOrthogonalWritingMode) 1202 if (hasOrthogonalWritingMode)
1203 return columnPositionAlignedWithGridContainerEnd(child); 1203 return columnPositionAlignedWithGridContainerEnd(child);
1204 1204
1205 // self-end is based on the child's direction. That's why we need to che ck against the grid container's direction. 1205 // self-end is based on the child's direction. That's why we need to che ck against the grid container's direction.
1206 if (child->style()->direction() != style()->direction()) 1206 if (child.style()->direction() != style()->direction())
1207 return columnPositionAlignedWithGridContainerStart(child); 1207 return columnPositionAlignedWithGridContainerStart(child);
1208 1208
1209 return columnPositionAlignedWithGridContainerEnd(child); 1209 return columnPositionAlignedWithGridContainerEnd(child);
1210 1210
1211 case ItemPositionFlexStart: 1211 case ItemPositionFlexStart:
1212 // Only used in flex layout, for other layout, it's equivalent to 'start '. 1212 // Only used in flex layout, for other layout, it's equivalent to 'start '.
1213 return columnPositionAlignedWithGridContainerStart(child); 1213 return columnPositionAlignedWithGridContainerStart(child);
1214 case ItemPositionFlexEnd: 1214 case ItemPositionFlexEnd:
1215 // Only used in flex layout, for other layout, it's equivalent to 'start '. 1215 // Only used in flex layout, for other layout, it's equivalent to 'start '.
1216 return columnPositionAlignedWithGridContainerEnd(child); 1216 return columnPositionAlignedWithGridContainerEnd(child);
(...skipping 30 matching lines...) Expand all
1247 case ItemPositionBaseline: 1247 case ItemPositionBaseline:
1248 case ItemPositionLastBaseline: 1248 case ItemPositionLastBaseline:
1249 // FIXME: Implement the previous values. For now, we always start align the child. 1249 // FIXME: Implement the previous values. For now, we always start align the child.
1250 return startOfColumnForChild(child); 1250 return startOfColumnForChild(child);
1251 } 1251 }
1252 1252
1253 ASSERT_NOT_REACHED(); 1253 ASSERT_NOT_REACHED();
1254 return 0; 1254 return 0;
1255 } 1255 }
1256 1256
1257 LayoutUnit RenderGrid::endOfRowForChild(const RenderBox* child) const 1257 LayoutUnit RenderGrid::endOfRowForChild(const RenderBox& child) const
1258 { 1258 {
1259 const GridCoordinate& coordinate = cachedGridCoordinate(child); 1259 const GridCoordinate& coordinate = cachedGridCoordinate(child);
1260 1260
1261 LayoutUnit startOfRow = m_rowPositions[coordinate.rows.resolvedInitialPositi on.toInt()]; 1261 LayoutUnit startOfRow = m_rowPositions[coordinate.rows.resolvedInitialPositi on.toInt()];
1262 // The grid items should be inside the grid container's border box, that's w hy they need to be shifted. 1262 // The grid items should be inside the grid container's border box, that's w hy they need to be shifted.
1263 LayoutUnit rowPosition = startOfRow + marginBeforeForChild(child); 1263 LayoutUnit rowPosition = startOfRow + marginBeforeForChild(&child);
1264 1264
1265 LayoutUnit endOfRow = m_rowPositions[coordinate.rows.resolvedFinalPosition.n ext().toInt()]; 1265 LayoutUnit endOfRow = m_rowPositions[coordinate.rows.resolvedFinalPosition.n ext().toInt()];
1266 // FIXME: This should account for the grid item's <overflow-position>. 1266 // FIXME: This should account for the grid item's <overflow-position>.
1267 return rowPosition + std::max<LayoutUnit>(0, endOfRow - startOfRow - child-> logicalHeight()); 1267 return rowPosition + std::max<LayoutUnit>(0, endOfRow - startOfRow - child.l ogicalHeight());
1268 } 1268 }
1269 1269
1270 LayoutUnit RenderGrid::startOfRowForChild(const RenderBox* child) const 1270 LayoutUnit RenderGrid::startOfRowForChild(const RenderBox& child) const
1271 { 1271 {
1272 const GridCoordinate& coordinate = cachedGridCoordinate(child); 1272 const GridCoordinate& coordinate = cachedGridCoordinate(child);
1273 1273
1274 LayoutUnit startOfRow = m_rowPositions[coordinate.rows.resolvedInitialPositi on.toInt()]; 1274 LayoutUnit startOfRow = m_rowPositions[coordinate.rows.resolvedInitialPositi on.toInt()];
1275 // The grid items should be inside the grid container's border box, that's w hy they need to be shifted. 1275 // The grid items should be inside the grid container's border box, that's w hy they need to be shifted.
1276 // FIXME: This should account for the grid item's <overflow-position>. 1276 // FIXME: This should account for the grid item's <overflow-position>.
1277 LayoutUnit rowPosition = startOfRow + marginBeforeForChild(child); 1277 LayoutUnit rowPosition = startOfRow + marginBeforeForChild(&child);
1278 1278
1279 return rowPosition; 1279 return rowPosition;
1280 } 1280 }
1281 1281
1282 LayoutUnit RenderGrid::centeredRowPositionForChild(const RenderBox* child) const 1282 LayoutUnit RenderGrid::centeredRowPositionForChild(const RenderBox& child) const
1283 { 1283 {
1284 const GridCoordinate& coordinate = cachedGridCoordinate(child); 1284 const GridCoordinate& coordinate = cachedGridCoordinate(child);
1285 1285
1286 // The grid items should be inside the grid container's border box, that's w hy they need to be shifted. 1286 // The grid items should be inside the grid container's border box, that's w hy they need to be shifted.
1287 LayoutUnit startOfRow = m_rowPositions[coordinate.rows.resolvedInitialPositi on.toInt()] + marginBeforeForChild(child); 1287 LayoutUnit startOfRow = m_rowPositions[coordinate.rows.resolvedInitialPositi on.toInt()] + marginBeforeForChild(&child);
1288 LayoutUnit endOfRow = m_rowPositions[coordinate.rows.resolvedFinalPosition.n ext().toInt()]; 1288 LayoutUnit endOfRow = m_rowPositions[coordinate.rows.resolvedFinalPosition.n ext().toInt()];
1289 1289
1290 // FIXME: This should account for the grid item's <overflow-position>. 1290 // FIXME: This should account for the grid item's <overflow-position>.
1291 return startOfRow + std::max<LayoutUnit>(0, endOfRow - startOfRow - child->l ogicalHeight()) / 2; 1291 return startOfRow + std::max<LayoutUnit>(0, endOfRow - startOfRow - child.lo gicalHeight()) / 2;
1292 } 1292 }
1293 1293
1294 // FIXME: We should move this logic to the StyleAdjuster or the StyleBuilder. 1294 // FIXME: We should move this logic to the StyleAdjuster or the StyleBuilder.
1295 static ItemPosition resolveAlignment(const RenderStyle* parentStyle, const Rende rStyle* childStyle) 1295 static ItemPosition resolveAlignment(const RenderStyle* parentStyle, const Rende rStyle* childStyle)
1296 { 1296 {
1297 ItemPosition align = childStyle->alignSelf(); 1297 ItemPosition align = childStyle->alignSelf();
1298 // The auto keyword computes to the parent's align-items computed value, or to "stretch", if not set or "auto". 1298 // The auto keyword computes to the parent's align-items computed value, or to "stretch", if not set or "auto".
1299 if (align == ItemPositionAuto) 1299 if (align == ItemPositionAuto)
1300 align = (parentStyle->alignItems() == ItemPositionAuto) ? ItemPositionSt retch : parentStyle->alignItems(); 1300 align = (parentStyle->alignItems() == ItemPositionAuto) ? ItemPositionSt retch : parentStyle->alignItems();
1301 return align; 1301 return align;
1302 } 1302 }
1303 1303
1304 LayoutUnit RenderGrid::rowPositionForChild(const RenderBox* child) const 1304 LayoutUnit RenderGrid::rowPositionForChild(const RenderBox& child) const
1305 { 1305 {
1306 bool hasOrthogonalWritingMode = child->isHorizontalWritingMode() != isHorizo ntalWritingMode(); 1306 bool hasOrthogonalWritingMode = child.isHorizontalWritingMode() != isHorizon talWritingMode();
1307 ItemPosition alignSelf = resolveAlignment(style(), child->style()); 1307 ItemPosition alignSelf = resolveAlignment(style(), child.style());
1308 1308
1309 switch (alignSelf) { 1309 switch (alignSelf) {
1310 case ItemPositionSelfStart: 1310 case ItemPositionSelfStart:
1311 // If orthogonal writing-modes, this computes to 'Start'. 1311 // If orthogonal writing-modes, this computes to 'Start'.
1312 // FIXME: grid track sizing and positioning does not support orthogonal modes yet. 1312 // FIXME: grid track sizing and positioning does not support orthogonal modes yet.
1313 if (hasOrthogonalWritingMode) 1313 if (hasOrthogonalWritingMode)
1314 return startOfRowForChild(child); 1314 return startOfRowForChild(child);
1315 1315
1316 // self-start is based on the child's block axis direction. That's why w e need to check against the grid container's block flow. 1316 // self-start is based on the child's block axis direction. That's why w e need to check against the grid container's block flow.
1317 if (child->style()->writingMode() != style()->writingMode()) 1317 if (child.style()->writingMode() != style()->writingMode())
1318 return endOfRowForChild(child); 1318 return endOfRowForChild(child);
1319 1319
1320 return startOfRowForChild(child); 1320 return startOfRowForChild(child);
1321 case ItemPositionSelfEnd: 1321 case ItemPositionSelfEnd:
1322 // If orthogonal writing-modes, this computes to 'End'. 1322 // If orthogonal writing-modes, this computes to 'End'.
1323 // FIXME: grid track sizing and positioning does not support orthogonal modes yet. 1323 // FIXME: grid track sizing and positioning does not support orthogonal modes yet.
1324 if (hasOrthogonalWritingMode) 1324 if (hasOrthogonalWritingMode)
1325 return endOfRowForChild(child); 1325 return endOfRowForChild(child);
1326 1326
1327 // self-end is based on the child's block axis direction. That's why we need to check against the grid container's block flow. 1327 // self-end is based on the child's block axis direction. That's why we need to check against the grid container's block flow.
1328 if (child->style()->writingMode() != style()->writingMode()) 1328 if (child.style()->writingMode() != style()->writingMode())
1329 return startOfRowForChild(child); 1329 return startOfRowForChild(child);
1330 1330
1331 return endOfRowForChild(child); 1331 return endOfRowForChild(child);
1332 1332
1333 case ItemPositionLeft: 1333 case ItemPositionLeft:
1334 // orthogonal modes make property and inline axes to be parallel, but in any case 1334 // orthogonal modes make property and inline axes to be parallel, but in any case
1335 // this is always equivalent to 'Start'. 1335 // this is always equivalent to 'Start'.
1336 // 1336 //
1337 // self-align's axis is never parallel to the inline axis, except in ort hogonal 1337 // self-align's axis is never parallel to the inline axis, except in ort hogonal
1338 // writing-mode, so this is equivalent to 'Start’. 1338 // writing-mode, so this is equivalent to 'Start’.
(...skipping 27 matching lines...) Expand all
1366 // FIXME: Implement the ItemPositionBaseline value. For now, we always s tart align the child. 1366 // FIXME: Implement the ItemPositionBaseline value. For now, we always s tart align the child.
1367 return startOfRowForChild(child); 1367 return startOfRowForChild(child);
1368 case ItemPositionAuto: 1368 case ItemPositionAuto:
1369 break; 1369 break;
1370 } 1370 }
1371 1371
1372 ASSERT_NOT_REACHED(); 1372 ASSERT_NOT_REACHED();
1373 return 0; 1373 return 0;
1374 } 1374 }
1375 1375
1376 LayoutPoint RenderGrid::findChildLogicalPosition(const RenderBox* child) const 1376 LayoutPoint RenderGrid::findChildLogicalPosition(const RenderBox& child) const
1377 { 1377 {
1378 return LayoutPoint(columnPositionForChild(child), rowPositionForChild(child) ); 1378 return LayoutPoint(columnPositionForChild(child), rowPositionForChild(child) );
1379 } 1379 }
1380 1380
1381 static GridSpan dirtiedGridAreas(const Vector<LayoutUnit>& coordinates, LayoutUn it start, LayoutUnit end) 1381 static GridSpan dirtiedGridAreas(const Vector<LayoutUnit>& coordinates, LayoutUn it start, LayoutUnit end)
1382 { 1382 {
1383 // This function does a binary search over the coordinates. 1383 // This function does a binary search over the coordinates.
1384 // This doesn't work with grid items overflowing their grid areas, but that is managed with m_gridItemsOverflowingGridArea. 1384 // This doesn't work with grid items overflowing their grid areas, but that is managed with m_gridItemsOverflowingGridArea.
1385 1385
1386 size_t startGridAreaIndex = std::upper_bound(coordinates.begin(), coordinate s.end() - 1, start) - coordinates.begin(); 1386 size_t startGridAreaIndex = std::upper_bound(coordinates.begin(), coordinate s.end() - 1, start) - coordinates.begin();
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
1454 if (isOutOfFlowPositioned()) 1454 if (isOutOfFlowPositioned())
1455 return "RenderGrid (positioned)"; 1455 return "RenderGrid (positioned)";
1456 if (isAnonymous()) 1456 if (isAnonymous())
1457 return "RenderGrid (generated)"; 1457 return "RenderGrid (generated)";
1458 if (isRelPositioned()) 1458 if (isRelPositioned())
1459 return "RenderGrid (relative positioned)"; 1459 return "RenderGrid (relative positioned)";
1460 return "RenderGrid"; 1460 return "RenderGrid";
1461 } 1461 }
1462 1462
1463 } // namespace blink 1463 } // namespace blink
OLDNEW
« no previous file with comments | « Source/core/rendering/RenderGrid.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698