Changeset 135965 in webkit
- Timestamp:
- Nov 27, 2012 6:16:36 PM (11 years ago)
- Location:
- trunk
- Files:
-
- 8 added
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r135964 r135965 1 2012-11-27 Julien Chaffraix <jchaffraix@webkit.org> 2 3 Support proper <percent> / calc() resolution for grid items 4 https://bugs.webkit.org/show_bug.cgi?id=102968 5 6 Reviewed by Ojan Vafai. 7 8 * fast/css-grid-layout/calc-resolution-grid-item-expected.txt: Added. 9 * fast/css-grid-layout/calc-resolution-grid-item.html: Added. 10 * fast/css-grid-layout/percent-resolution-grid-item-expected.txt: Added. 11 * fast/css-grid-layout/percent-resolution-grid-item.html: Added. 12 Test that checks that our override containing block's logical width / height logic 13 works as expected. 14 15 * fast/css-grid-layout/percent-grid-item-in-percent-grid-track-expected.txt: Added. 16 * fast/css-grid-layout/percent-grid-item-in-percent-grid-track.html: Added. 17 * fast/css-grid-layout/percent-grid-item-in-percent-grid-track-in-percent-grid.html: Added. 18 * fast/css-grid-layout/percent-grid-item-in-percent-grid-track-in-percent-grid-expected.txt: Added. 19 Those test cases covers the cases of percentage sized grid items with percentage sized grid tracks 20 inside a fixed or percentage sized grid element. They don't pass yet as we don't support percentage 21 sized grid tracks (see bug 103335). 22 1 23 2012-11-27 Yael Aharon <yael.aharon@intel.com> 2 24 -
trunk/Source/WebCore/ChangeLog
r135963 r135965 1 2012-11-27 Julien Chaffraix <jchaffraix@webkit.org> 2 3 Support proper <percent> / calc() resolution for grid items 4 https://bugs.webkit.org/show_bug.cgi?id=102968 5 6 Reviewed by Ojan Vafai. 7 8 This change introduces a mechanism similar to logical height / width override 9 but for containing block. This is required as we don't have a renderer for the 10 grid area but any <percent> or calc() size should be resolved against the grid 11 area size (which is sized after the grid tracks). 12 13 Tests: fast/css-grid-layout/calc-resolution-grid-item.html 14 fast/css-grid-layout/percent-resolution-grid-item.html 15 fast/css-grid-layout/percent-grid-item-in-percent-grid-track.html 16 fast/css-grid-layout/percent-grid-item-in-percent-grid-track-in-percent-grid.html 17 18 * rendering/RenderBox.cpp: 19 (WebCore::RenderBox::willBeDestroyed): 20 Remove any containing block size override. 21 22 (WebCore::RenderBox::overrideContainingBlockContentLogicalWidth): 23 (WebCore::RenderBox::overrideContainingBlockContentLogicalHeight): 24 (WebCore::RenderBox::hasOverrideContainingBlockLogicalWidth): 25 (WebCore::RenderBox::hasOverrideContainingBlockLogicalHeight): 26 (WebCore::RenderBox::setOverrideContainingBlockContentLogicalWidth): 27 (WebCore::RenderBox::setOverrideContainingBlockContentLogicalHeight): 28 (WebCore::RenderBox::clearContainingBlockOverrideSize): 29 Containing block override size functions. 30 31 (WebCore::RenderBox::containingBlockLogicalWidthForContent): 32 Updated the function to check for any override logical width. 33 34 (WebCore::RenderBox::containingBlockLogicalHeightForContent): 35 New function, similar to RenderBox::containingBlockLogicalWidthForContent. 36 37 (WebCore::RenderBox::perpendicularContainingBlockLogicalHeight): 38 (WebCore::RenderBox::computePercentageLogicalHeight): 39 Updated these function to return overrideContainingBlockContentLogicalHeight as needed. 40 41 (WebCore::RenderBox::computeReplacedLogicalHeightUsing): 42 (WebCore::RenderBox::availableLogicalHeightUsing): 43 Updated these functions to use the new containingBlockLogicalHeightForContent instead 44 of availableLogicalHeight. 45 46 * rendering/RenderBox.h: 47 Added the previous new functions. 48 49 * rendering/RenderGrid.cpp: 50 (WebCore::RenderGrid::layoutGridItems): 51 Updated to override the containing block size so that we properly size our grid items. 52 1 53 2012-11-27 Kent Tamura <tkent@chromium.org> 2 54 -
trunk/Source/WebCore/rendering/RenderBox.cpp
r135851 r135965 69 69 static OverrideSizeMap* gOverrideWidthMap = 0; 70 70 71 // Used by grid elements to properly size their grid items. 72 static OverrideSizeMap* gOverrideContainingBlockLogicalHeightMap = 0; 73 static OverrideSizeMap* gOverrideContainingBlockLogicalWidthMap = 0; 74 71 75 bool RenderBox::s_hadOverflowClip = false; 72 76 … … 134 138 { 135 139 clearOverrideSize(); 140 clearContainingBlockOverrideSize(); 136 141 137 142 RenderBlock::removePercentHeightDescendantIfNeeded(this); … … 739 744 } 740 745 746 LayoutUnit RenderBox::overrideContainingBlockContentLogicalWidth() const 747 { 748 ASSERT(hasOverrideContainingBlockLogicalWidth()); 749 return gOverrideContainingBlockLogicalWidthMap->get(this); 750 } 751 752 LayoutUnit RenderBox::overrideContainingBlockContentLogicalHeight() const 753 { 754 ASSERT(hasOverrideContainingBlockLogicalHeight()); 755 return gOverrideContainingBlockLogicalHeightMap->get(this); 756 } 757 758 bool RenderBox::hasOverrideContainingBlockLogicalWidth() const 759 { 760 return gOverrideContainingBlockLogicalWidthMap && gOverrideContainingBlockLogicalWidthMap->contains(this); 761 } 762 763 bool RenderBox::hasOverrideContainingBlockLogicalHeight() const 764 { 765 return gOverrideContainingBlockLogicalHeightMap && gOverrideContainingBlockLogicalHeightMap->contains(this); 766 } 767 768 void RenderBox::setOverrideContainingBlockContentLogicalWidth(LayoutUnit logicalWidth) 769 { 770 if (!gOverrideContainingBlockLogicalWidthMap) 771 gOverrideContainingBlockLogicalWidthMap = new OverrideSizeMap; 772 gOverrideContainingBlockLogicalWidthMap->set(this, logicalWidth); 773 } 774 775 void RenderBox::setOverrideContainingBlockContentLogicalHeight(LayoutUnit logicalHeight) 776 { 777 if (!gOverrideContainingBlockLogicalHeightMap) 778 gOverrideContainingBlockLogicalHeightMap = new OverrideSizeMap; 779 gOverrideContainingBlockLogicalHeightMap->set(this, logicalHeight); 780 } 781 782 void RenderBox::clearContainingBlockOverrideSize() 783 { 784 if (gOverrideContainingBlockLogicalWidthMap) 785 gOverrideContainingBlockLogicalWidthMap->remove(this); 786 if (gOverrideContainingBlockLogicalHeightMap) 787 gOverrideContainingBlockLogicalHeightMap->remove(this); 788 } 789 741 790 LayoutUnit RenderBox::adjustBorderBoxLogicalWidthForBoxSizing(LayoutUnit width) const 742 791 { … … 1252 1301 LayoutUnit RenderBox::containingBlockLogicalWidthForContent() const 1253 1302 { 1303 if (hasOverrideContainingBlockLogicalWidth()) 1304 return overrideContainingBlockContentLogicalWidth(); 1305 1254 1306 RenderBlock* cb = containingBlock(); 1255 1307 return cb->availableLogicalWidth(); 1256 1308 } 1257 1309 1310 LayoutUnit RenderBox::containingBlockLogicalHeightForContent() const 1311 { 1312 if (hasOverrideContainingBlockLogicalHeight()) 1313 return overrideContainingBlockContentLogicalHeight(); 1314 1315 RenderBlock* cb = containingBlock(); 1316 return cb->availableLogicalHeight(); 1317 } 1318 1258 1319 LayoutUnit RenderBox::containingBlockLogicalWidthForContentInRegion(RenderRegion* region, LayoutUnit offsetFromLogicalTopOfFirstPage) const 1259 1320 { … … 1263 1324 RenderBlock* cb = containingBlock(); 1264 1325 RenderRegion* containingBlockRegion = cb->clampToStartAndEndRegions(region); 1326 // FIXME: It's unclear if a region's content should use the containing block's override logical width. 1327 // If it should, the following line should call containingBlockLogicalWidthForContent. 1265 1328 LayoutUnit result = cb->availableLogicalWidth(); 1266 1329 RenderBoxRegionInfo* boxInfo = cb->renderBoxRegionInfo(containingBlockRegion, offsetFromLogicalTopOfFirstPage - logicalTop()); … … 1286 1349 LayoutUnit RenderBox::perpendicularContainingBlockLogicalHeight() const 1287 1350 { 1351 if (hasOverrideContainingBlockLogicalHeight()) 1352 return overrideContainingBlockContentLogicalHeight(); 1353 1288 1354 RenderBlock* cb = containingBlock(); 1289 1355 if (cb->hasOverrideHeight()) … … 2218 2284 if (isHorizontalWritingMode() != cb->isHorizontalWritingMode()) 2219 2285 availableHeight = containingBlockChild->containingBlockLogicalWidthForContent(); 2286 else if (hasOverrideContainingBlockLogicalHeight()) 2287 availableHeight = overrideContainingBlockContentLogicalHeight(); 2220 2288 else if (cb->isTableCell()) { 2221 2289 if (!skippedAutoHeightContainingBlock) { … … 2364 2432 availableHeight = containingBlockLogicalHeightForPositioned(toRenderBoxModelObject(cb)); 2365 2433 else { 2366 availableHeight = toRenderBox(cb)->availableLogicalHeight();2434 availableHeight = containingBlockLogicalHeightForContent(); 2367 2435 // It is necessary to use the border-box to match WinIE's broken 2368 2436 // box model. This is essential for sizing inside … … 2432 2500 2433 2501 // FIXME: This is wrong if the containingBlock has a perpendicular writing mode. 2434 return containingBlock ()->availableLogicalHeight();2502 return containingBlockLogicalHeightForContent(); 2435 2503 } 2436 2504 -
trunk/Source/WebCore/rendering/RenderBox.h
r135025 r135965 306 306 void clearOverrideLogicalContentWidth(); 307 307 308 LayoutUnit overrideContainingBlockContentLogicalWidth() const; 309 LayoutUnit overrideContainingBlockContentLogicalHeight() const; 310 bool hasOverrideContainingBlockLogicalWidth() const; 311 bool hasOverrideContainingBlockLogicalHeight() const; 312 void setOverrideContainingBlockContentLogicalWidth(LayoutUnit); 313 void setOverrideContainingBlockContentLogicalHeight(LayoutUnit); 314 void clearContainingBlockOverrideSize(); 315 308 316 virtual LayoutSize offsetFromContainer(RenderObject*, const LayoutPoint&, bool* offsetDependsOnPoint = 0) const; 309 317 … … 369 377 370 378 virtual LayoutUnit containingBlockLogicalWidthForContent() const; 379 LayoutUnit containingBlockLogicalHeightForContent() const; 380 371 381 LayoutUnit containingBlockLogicalWidthForContentInRegion(RenderRegion*, LayoutUnit offsetFromLogicalTopOfFirstPage) const; 372 382 LayoutUnit containingBlockAvailableLineWidthInRegion(RenderRegion*, LayoutUnit offsetFromLogicalTopOfFirstPage) const; -
trunk/Source/WebCore/rendering/RenderGrid.cpp
r135164 r135965 162 162 for (RenderBox* child = firstChildBox(); child; child = child->nextSiblingBox()) { 163 163 LayoutPoint childPosition = findChildLogicalPosition(child, columnTracks, rowTracks); 164 165 size_t columnTrack = resolveGridPosition(child->style()->gridItemColumn()); 166 size_t rowTrack = resolveGridPosition(child->style()->gridItemRow()); 167 168 // Because the grid area cannot be styled, we don't need to adjust 169 // the grid breadth to account for 'box-sizing'. 170 child->setOverrideContainingBlockContentLogicalWidth(columnTracks[columnTrack].m_usedBreadth); 171 child->setOverrideContainingBlockContentLogicalHeight(rowTracks[rowTrack].m_usedBreadth); 172 164 173 // FIXME: Grid items should stretch to fill their cells. Once we 165 174 // implement grid-{column,row}-align, we can also shrink to fit. For
Note: See TracChangeset
for help on using the changeset viewer.