Changeset 141505 in webkit
- Timestamp:
- Jan 31, 2013 4:48:05 PM (11 years ago)
- Location:
- trunk
- Files:
-
- 4 added
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r141503 r141505 1 2013-01-31 Julien Chaffraix <jchaffraix@webkit.org> 2 3 [CSS Grid Layout] Support implicit rows and columns 4 https://bugs.webkit.org/show_bug.cgi?id=103573 5 6 Reviewed by Ojan Vafai. 7 8 * fast/css-grid-layout/implicit-columns-auto-resolution-expected.txt: Added. 9 * fast/css-grid-layout/implicit-columns-auto-resolution.html: Added. 10 * fast/css-grid-layout/implicit-rows-auto-resolution-expected.txt: Added. 11 * fast/css-grid-layout/implicit-rows-auto-resolution.html: Added. 12 1 13 2013-01-31 Joanmarie Diggs <jdiggs@igalia.com> 2 14 -
trunk/Source/WebCore/ChangeLog
r141503 r141505 1 2013-01-31 Julien Chaffraix <jchaffraix@webkit.org> 2 3 [CSS Grid Layout] Support implicit rows and columns 4 https://bugs.webkit.org/show_bug.cgi?id=103573 5 6 Reviewed by Ojan Vafai. 7 8 Tests: fast/css-grid-layout/implicit-columns-auto-resolution.html 9 fast/css-grid-layout/implicit-rows-auto-resolution.html 10 11 This change makes us properly initialize our GridTrack vectors's size 12 so that we can safely query any items during layout. 13 14 * rendering/RenderGrid.cpp: 15 (WebCore::RenderGrid::gridTrackSize): 16 Added this helper function to return the track size from the grid 17 element's columns' / rows' definitions or the default value. 18 19 (WebCore::RenderGrid::maximumIndexInDirection): 20 Added this helper function to get the maximum index in a direction 21 taking grid item's implicit indexes into account. 22 23 (WebCore::RenderGrid::computedUsedBreadthOfGridTracks): 24 Changed the funtion to not append the new tracks as we are properly 25 sized now. 26 27 (WebCore::RenderGrid::resolveContentBasedTrackSizingFunctions): 28 (WebCore::RenderGrid::tracksAreWiderThanMinTrackBreadth): 29 Updated these functions to use the new helper functions. 30 31 (WebCore::RenderGrid::layoutGridItems): 32 Changed this function to size both vectors when initializing them. 33 Also removed an unneeded bounds check as it shouldn't be needed anymore. 34 35 * rendering/RenderGrid.h: 36 Added the new helper functions. 37 38 * rendering/style/GridTrackSize.h: 39 (WebCore::GridTrackSize::GridTrackSize): 40 Added a constructor taking a LengthType. 41 1 42 2013-01-31 Joanmarie Diggs <jdiggs@igalia.com> 2 43 -
trunk/Source/WebCore/rendering/RenderGrid.cpp
r141163 r141505 177 177 Vector<GridTrack>& tracks = (direction == ForColumns) ? columnTracks : rowTracks; 178 178 for (size_t i = 0; i < trackStyles.size(); ++i) { 179 GridTrack track;179 GridTrack& track = tracks[i]; 180 180 const Length& minTrackBreadth = trackStyles[i].minTrackBreadth(); 181 181 const Length& maxTrackBreadth = trackStyles[i].maxTrackBreadth(); … … 187 187 188 188 availableLogicalSpace -= track.m_usedBreadth; 189 190 tracks.append(track);191 189 } 192 190 … … 239 237 } 240 238 239 const GridTrackSize& RenderGrid::gridTrackSize(TrackSizingDirection direction, size_t i) 240 { 241 const Vector<GridTrackSize>& trackStyles = (direction == ForColumns) ? style()->gridColumns() : style()->gridRows(); 242 if (i >= trackStyles.size()) { 243 // FIXME: This should match the default grid sizing (https://webkit.org/b/103333) 244 DEFINE_STATIC_LOCAL(GridTrackSize, defaultAutoSize, (Auto)); 245 return defaultAutoSize; 246 } 247 return trackStyles[i]; 248 } 249 250 size_t RenderGrid::maximumIndexInDirection(TrackSizingDirection direction) const 251 { 252 const Vector<GridTrackSize>& trackStyles = (direction == ForColumns) ? style()->gridColumns() : style()->gridRows(); 253 254 size_t maximumIndex = trackStyles.size(); 255 256 for (RenderBox* child = firstChildBox(); child; child = child->nextSiblingBox()) { 257 GridPosition position = (direction == ForColumns) ? child->style()->gridItemColumn() : child->style()->gridItemRow(); 258 maximumIndex = std::max(maximumIndex, resolveGridPosition(position) + 1); 259 } 260 261 return maximumIndex; 262 } 263 241 264 LayoutUnit RenderGrid::minContentForChild(RenderBox* child, TrackSizingDirection direction, Vector<GridTrack>& columnTracks) 242 265 { … … 285 308 // FIXME: Split the grid tracks once we support spanning or fractions (step 1 and 2 of the algorithm). 286 309 287 const Vector<GridTrackSize>& trackStyles = (direction == ForColumns) ? style()->gridColumns() : style()->gridRows();288 310 Vector<GridTrack>& tracks = (direction == ForColumns) ? columnTracks : rowTracks; 289 311 290 312 for (size_t i = 0; i < tracks.size(); ++i) { 313 const GridTrackSize& trackSize = gridTrackSize(direction, i); 291 314 GridTrack& track = tracks[i]; 292 const Length& minTrackBreadth = trackS tyles[i].minTrackBreadth();315 const Length& minTrackBreadth = trackSize.minTrackBreadth(); 293 316 if (minTrackBreadth.isMinContent() || minTrackBreadth.isMaxContent()) { 294 317 LayoutUnit oldUsedBreadth = track.m_usedBreadth; … … 303 326 } 304 327 305 const Length& maxTrackBreadth = trackS tyles[i].maxTrackBreadth();328 const Length& maxTrackBreadth = trackSize.maxTrackBreadth(); 306 329 if (maxTrackBreadth.isMinContent() || maxTrackBreadth.isMaxContent()) 307 330 resolveContentBasedTrackSizingFunctionsForItems(direction, columnTracks, rowTracks, i, &RenderGrid::minContentForChild, &GridTrack::maxBreadthIfNotInfinite, &GridTrack::growMaxBreadth); … … 365 388 bool RenderGrid::tracksAreWiderThanMinTrackBreadth(TrackSizingDirection direction, const Vector<GridTrack>& tracks) 366 389 { 367 const Vector<GridTrackSize>& trackStyles = (direction == ForColumns) ? style()->gridColumns() : style()->gridRows();368 for (size_t i = 0; i < trackStyles.size(); ++i) {369 const Length& minTrackBreadth = trackS tyles[i].minTrackBreadth();390 for (size_t i = 0; i < tracks.size(); ++i) { 391 const GridTrackSize& trackSize = gridTrackSize(direction, i); 392 const Length& minTrackBreadth = trackSize.minTrackBreadth(); 370 393 if (computeUsedBreadthOfMinLength(direction, minTrackBreadth) > tracks[i].m_usedBreadth) 371 394 return false; … … 377 400 void RenderGrid::layoutGridItems() 378 401 { 379 Vector<GridTrack> columnTracks, rowTracks; 402 Vector<GridTrack> columnTracks(maximumIndexInDirection(ForColumns)); 403 Vector<GridTrack> rowTracks(maximumIndexInDirection(ForRows)); 380 404 computedUsedBreadthOfGridTracks(ForColumns, columnTracks, rowTracks); 381 405 ASSERT(tracksAreWiderThanMinTrackBreadth(ForColumns, columnTracks)); … … 389 413 size_t rowTrack = resolveGridPosition(child->style()->gridItemRow()); 390 414 391 // FIXME: Properly support implicit rows and columns (bug 103573). 392 if (columnTrack < columnTracks.size() && rowTrack < rowTracks.size()) { 393 // Because the grid area cannot be styled, we don't need to adjust 394 // the grid breadth to account for 'box-sizing'. 395 LayoutUnit oldOverrideContainingBlockContentLogicalWidth = child->hasOverrideContainingBlockLogicalWidth() ? child->overrideContainingBlockContentLogicalWidth() : LayoutUnit(); 396 LayoutUnit oldOverrideContainingBlockContentLogicalHeight = child->hasOverrideContainingBlockLogicalHeight() ? child->overrideContainingBlockContentLogicalHeight() : LayoutUnit(); 397 398 if (oldOverrideContainingBlockContentLogicalWidth != columnTracks[columnTrack].m_usedBreadth || oldOverrideContainingBlockContentLogicalHeight != rowTracks[rowTrack].m_usedBreadth) 399 child->setNeedsLayout(true, MarkOnlyThis); 400 401 child->setOverrideContainingBlockContentLogicalWidth(columnTracks[columnTrack].m_usedBreadth); 402 child->setOverrideContainingBlockContentLogicalHeight(rowTracks[rowTrack].m_usedBreadth); 403 404 } 415 // Because the grid area cannot be styled, we don't need to adjust 416 // the grid breadth to account for 'box-sizing'. 417 LayoutUnit oldOverrideContainingBlockContentLogicalWidth = child->hasOverrideContainingBlockLogicalWidth() ? child->overrideContainingBlockContentLogicalWidth() : LayoutUnit(); 418 LayoutUnit oldOverrideContainingBlockContentLogicalHeight = child->hasOverrideContainingBlockLogicalHeight() ? child->overrideContainingBlockContentLogicalHeight() : LayoutUnit(); 419 420 if (oldOverrideContainingBlockContentLogicalWidth != columnTracks[columnTrack].m_usedBreadth || oldOverrideContainingBlockContentLogicalHeight != rowTracks[rowTrack].m_usedBreadth) 421 child->setNeedsLayout(true, MarkOnlyThis); 422 423 child->setOverrideContainingBlockContentLogicalWidth(columnTracks[columnTrack].m_usedBreadth); 424 child->setOverrideContainingBlockContentLogicalHeight(rowTracks[rowTrack].m_usedBreadth); 405 425 406 426 // FIXME: Grid items should stretch to fill their cells. Once we -
trunk/Source/WebCore/rendering/RenderGrid.h
r141163 r141505 63 63 void distributeSpaceToTracks(Vector<GridTrack*>&, Vector<GridTrack*>* tracksForGrowthAboveMaxBreadth, AccumulatorGetter, AccumulatorGrowFunction, LayoutUnit& availableLogicalSpace); 64 64 65 const GridTrackSize& gridTrackSize(TrackSizingDirection, size_t); 66 size_t maximumIndexInDirection(TrackSizingDirection) const; 67 65 68 LayoutUnit minContentForChild(RenderBox*, TrackSizingDirection, Vector<GridTrack>& columnTracks); 66 69 LayoutUnit maxContentForChild(RenderBox*, TrackSizingDirection, Vector<GridTrack>& columnTracks); -
trunk/Source/WebCore/rendering/style/GridTrackSize.h
r141317 r141505 43 43 class GridTrackSize { 44 44 public: 45 GridTrackSize( )45 GridTrackSize(LengthType type = Undefined) 46 46 : m_type(LengthTrackSizing) 47 , m_minTrackBreadth( Undefined)48 , m_maxTrackBreadth( Undefined)47 , m_minTrackBreadth(type) 48 , m_maxTrackBreadth(type) 49 49 { 50 50 }
Note: See TracChangeset
for help on using the changeset viewer.