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

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

Issue 855643005: [CSS Grid Layout] Handling overflow on Content Alignment properties. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Applied suggested changes. Created 5 years, 11 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 1084 matching lines...) Expand 10 before | Expand all | Expand 10 after
1095 LayoutUnit availableSpaceForRows = availableLogicalHeight(IncludeMarginBorde rPadding); 1095 LayoutUnit availableSpaceForRows = availableLogicalHeight(IncludeMarginBorde rPadding);
1096 GridSizingData sizingData(gridColumnCount(), gridRowCount()); 1096 GridSizingData sizingData(gridColumnCount(), gridRowCount());
1097 computeUsedBreadthOfGridTracks(ForColumns, sizingData, availableSpaceForColu mns); 1097 computeUsedBreadthOfGridTracks(ForColumns, sizingData, availableSpaceForColu mns);
1098 ASSERT(tracksAreWiderThanMinTrackBreadth(ForColumns, sizingData.columnTracks )); 1098 ASSERT(tracksAreWiderThanMinTrackBreadth(ForColumns, sizingData.columnTracks ));
1099 computeUsedBreadthOfGridTracks(ForRows, sizingData, availableSpaceForRows); 1099 computeUsedBreadthOfGridTracks(ForRows, sizingData, availableSpaceForRows);
1100 ASSERT(tracksAreWiderThanMinTrackBreadth(ForRows, sizingData.rowTracks)); 1100 ASSERT(tracksAreWiderThanMinTrackBreadth(ForRows, sizingData.rowTracks));
1101 1101
1102 populateGridPositions(sizingData, availableSpaceForColumns, availableSpaceFo rRows); 1102 populateGridPositions(sizingData, availableSpaceForColumns, availableSpaceFo rRows);
1103 m_gridItemsOverflowingGridArea.resize(0); 1103 m_gridItemsOverflowingGridArea.resize(0);
1104 1104
1105 LayoutUnit columnOffset = contentPositionAndDistributionColumnOffset(availab leSpaceForColumns, style()->justifyContent(), style()->justifyContentDistributio n(), m_columnPositions.size() - 1); 1105 LayoutUnit columnOffset = contentPositionAndDistributionColumnOffset(availab leSpaceForColumns, style()->justifyContent(), style()->justifyContentDistributio n(), style()->justifyContentOverflowAlignment(), m_columnPositions.size() - 1);
1106 LayoutUnit rowOffset = contentPositionAndDistributionRowOffset(availableSpac eForRows, style()->alignContent(), style()->alignContentDistribution(), m_rowPos itions.size() - 1); 1106 LayoutUnit rowOffset = contentPositionAndDistributionRowOffset(availableSpac eForRows, style()->alignContent(), style()->alignContentDistribution(), style()- >alignContentOverflowAlignment(), m_rowPositions.size() - 1);
1107 LayoutSize contentPositionOffset(columnOffset, rowOffset); 1107 LayoutSize contentPositionOffset(columnOffset, rowOffset);
1108 1108
1109 for (RenderBox* child = firstChildBox(); child; child = child->nextSiblingBo x()) { 1109 for (RenderBox* child = firstChildBox(); child; child = child->nextSiblingBo x()) {
1110 if (child->isOutOfFlowPositioned()) { 1110 if (child->isOutOfFlowPositioned()) {
1111 child->containingBlock()->insertPositionedObject(child); 1111 child->containingBlock()->insertPositionedObject(child);
1112 continue; 1112 continue;
1113 } 1113 }
1114 1114
1115 // Because the grid area cannot be styled, we don't need to adjust 1115 // Because the grid area cannot be styled, we don't need to adjust
1116 // the grid breadth to account for 'box-sizing'. 1116 // the grid breadth to account for 'box-sizing'.
(...skipping 505 matching lines...) Expand 10 before | Expand all | Expand 10 after
1622 static inline LayoutUnit offsetToStartEdge(bool isLeftToRight, LayoutUnit availa bleSpace) 1622 static inline LayoutUnit offsetToStartEdge(bool isLeftToRight, LayoutUnit availa bleSpace)
1623 { 1623 {
1624 return isLeftToRight ? LayoutUnit(0) : availableSpace; 1624 return isLeftToRight ? LayoutUnit(0) : availableSpace;
1625 } 1625 }
1626 1626
1627 static inline LayoutUnit offsetToEndEdge(bool isLeftToRight, LayoutUnit availabl eSpace) 1627 static inline LayoutUnit offsetToEndEdge(bool isLeftToRight, LayoutUnit availabl eSpace)
1628 { 1628 {
1629 return !isLeftToRight ? LayoutUnit(0) : availableSpace; 1629 return !isLeftToRight ? LayoutUnit(0) : availableSpace;
1630 } 1630 }
1631 1631
1632 LayoutUnit RenderGrid::contentPositionAndDistributionColumnOffset(LayoutUnit ava ilableFreeSpace, ContentPosition position, ContentDistributionType distribution, unsigned numberOfGridTracks) const 1632 LayoutUnit RenderGrid::contentPositionAndDistributionColumnOffset(LayoutUnit ava ilableFreeSpace, ContentPosition position, ContentDistributionType distribution, OverflowAlignment overflow, unsigned numberOfGridTracks) const
1633 { 1633 {
1634 if (availableFreeSpace <= 0) 1634 if (overflow == OverflowAlignmentSafe && availableFreeSpace <= 0)
1635 return 0; 1635 return 0;
1636 1636
1637 // FIXME: for the time being, spec states that it will always fallback for G rids, but 1637 // FIXME: for the time being, spec states that it will always fallback for G rids, but
1638 // discussion is ongoing. 1638 // discussion is ongoing.
1639 if (distribution != ContentDistributionDefault && position == ContentPositio nAuto) 1639 if (distribution != ContentDistributionDefault && position == ContentPositio nAuto)
1640 position = resolveContentDistributionFallback(distribution); 1640 position = resolveContentDistributionFallback(distribution);
1641 1641
1642 // FIXME: still pending of implementing support for the <overflow-position> keyword
1643 // in justify-content and aling-content properties.
1644 switch (position) { 1642 switch (position) {
1645 case ContentPositionLeft: 1643 case ContentPositionLeft:
1646 return 0; 1644 return 0;
1647 case ContentPositionRight: 1645 case ContentPositionRight:
1648 return availableFreeSpace; 1646 return availableFreeSpace;
1649 case ContentPositionCenter: 1647 case ContentPositionCenter:
1650 return availableFreeSpace / 2; 1648 return availableFreeSpace / 2;
1651 case ContentPositionFlexEnd: 1649 case ContentPositionFlexEnd:
1652 // Only used in flex layout, for other layout, it's equivalent to 'end'. 1650 // Only used in flex layout, for other layout, it's equivalent to 'end'.
1653 case ContentPositionEnd: 1651 case ContentPositionEnd:
1654 return offsetToEndEdge(style()->isLeftToRightDirection(), availableFreeS pace); 1652 return offsetToEndEdge(style()->isLeftToRightDirection(), availableFreeS pace);
1655 case ContentPositionFlexStart: 1653 case ContentPositionFlexStart:
1656 // Only used in flex layout, for other layout, it's equivalent to 'start '. 1654 // Only used in flex layout, for other layout, it's equivalent to 'start '.
1657 case ContentPositionStart: 1655 case ContentPositionStart:
1658 return offsetToStartEdge(style()->isLeftToRightDirection(), availableFre eSpace); 1656 return offsetToStartEdge(style()->isLeftToRightDirection(), availableFre eSpace);
1659 case ContentPositionBaseline: 1657 case ContentPositionBaseline:
1660 case ContentPositionLastBaseline: 1658 case ContentPositionLastBaseline:
1661 // FIXME: Implement the previous values. For now, we always 'start' alig n. 1659 // FIXME: Implement the previous values. For now, we always 'start' alig n.
1662 // crbug.com/234191 1660 // crbug.com/234191
1663 return offsetToStartEdge(style()->isLeftToRightDirection(), availableFre eSpace); 1661 return offsetToStartEdge(style()->isLeftToRightDirection(), availableFre eSpace);
1664 case ContentPositionAuto: 1662 case ContentPositionAuto:
1665 break; 1663 break;
1666 } 1664 }
1667 1665
1668 ASSERT_NOT_REACHED(); 1666 ASSERT_NOT_REACHED();
1669 return 0; 1667 return 0;
1670 } 1668 }
1671 1669
1672 LayoutUnit RenderGrid::contentPositionAndDistributionRowOffset(LayoutUnit availa bleFreeSpace, ContentPosition position, ContentDistributionType distribution, un signed numberOfGridTracks) const 1670 LayoutUnit RenderGrid::contentPositionAndDistributionRowOffset(LayoutUnit availa bleFreeSpace, ContentPosition position, ContentDistributionType distribution, Ov erflowAlignment overflow, unsigned numberOfGridTracks) const
1673 { 1671 {
1674 if (availableFreeSpace <= 0) 1672 if (overflow == OverflowAlignmentSafe && availableFreeSpace <= 0)
1675 return 0; 1673 return 0;
1676 1674
1677 // FIXME: for the time being, spec states that it will always fallback for G rids, but 1675 // FIXME: for the time being, spec states that it will always fallback for G rids, but
1678 // discussion is ongoing. 1676 // discussion is ongoing.
1679 if (distribution != ContentDistributionDefault && position == ContentPositio nAuto) 1677 if (distribution != ContentDistributionDefault && position == ContentPositio nAuto)
1680 position = resolveContentDistributionFallback(distribution); 1678 position = resolveContentDistributionFallback(distribution);
1681 1679
1682 // FIXME: still pending of implementing support for the <overflow-position> keyword
1683 // in justify-content and align-content properties.
1684 switch (position) { 1680 switch (position) {
1685 case ContentPositionLeft: 1681 case ContentPositionLeft:
1686 // The align-content's axis is always orthogonal to the inline-axis. 1682 // The align-content's axis is always orthogonal to the inline-axis.
1687 return 0; 1683 return 0;
1688 case ContentPositionRight: 1684 case ContentPositionRight:
1689 // The align-content's axis is always orthogonal to the inline-axis. 1685 // The align-content's axis is always orthogonal to the inline-axis.
1690 return 0; 1686 return 0;
1691 case ContentPositionCenter: 1687 case ContentPositionCenter:
1692 return availableFreeSpace / 2; 1688 return availableFreeSpace / 2;
1693 case ContentPositionFlexEnd: 1689 case ContentPositionFlexEnd:
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
1738 if (isOutOfFlowPositioned()) 1734 if (isOutOfFlowPositioned())
1739 return "RenderGrid (positioned)"; 1735 return "RenderGrid (positioned)";
1740 if (isAnonymous()) 1736 if (isAnonymous())
1741 return "RenderGrid (generated)"; 1737 return "RenderGrid (generated)";
1742 if (isRelPositioned()) 1738 if (isRelPositioned())
1743 return "RenderGrid (relative positioned)"; 1739 return "RenderGrid (relative positioned)";
1744 return "RenderGrid"; 1740 return "RenderGrid";
1745 } 1741 }
1746 1742
1747 } // namespace blink 1743 } // 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