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

Side by Side Diff: third_party/WebKit/Source/core/layout/LayoutFlexibleBox.cpp

Issue 2309493002: Revert of [css-flexbox] align-content should apply even when there's just a single line (patchset #… (Closed)
Patch Set: Created 4 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 | « third_party/WebKit/LayoutTests/css3/flexbox/multiline-align-content.html ('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 Google Inc. All rights reserved. 2 * Copyright (C) 2011 Google 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 are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 1725 matching lines...) Expand 10 before | Expand all | Expand 10 after
1736 setFlowAwareLocationForChild(*child, LayoutPoint(mainAxisOffset, crossAx isOffset + flowAwareMarginBeforeForChild(*child))); 1736 setFlowAwareLocationForChild(*child, LayoutPoint(mainAxisOffset, crossAx isOffset + flowAwareMarginBeforeForChild(*child)));
1737 1737
1738 mainAxisOffset -= flowAwareMarginStartForChild(*child); 1738 mainAxisOffset -= flowAwareMarginStartForChild(*child);
1739 1739
1740 ++seenInFlowPositionedChildren; 1740 ++seenInFlowPositionedChildren;
1741 if (seenInFlowPositionedChildren < numberOfChildrenForJustifyContent) 1741 if (seenInFlowPositionedChildren < numberOfChildrenForJustifyContent)
1742 mainAxisOffset -= justifyContentSpaceBetweenChildren(availableFreeSp ace, distribution, numberOfChildrenForJustifyContent); 1742 mainAxisOffset -= justifyContentSpaceBetweenChildren(availableFreeSp ace, distribution, numberOfChildrenForJustifyContent);
1743 } 1743 }
1744 } 1744 }
1745 1745
1746 static LayoutUnit initialAlignContentOffset(LayoutUnit availableFreeSpace, Conte ntPosition alignContent, ContentDistributionType alignContentDistribution, bool isMultiline, unsigned numberOfLines) 1746 static LayoutUnit initialAlignContentOffset(LayoutUnit availableFreeSpace, Conte ntPosition alignContent, ContentDistributionType alignContentDistribution, unsig ned numberOfLines)
1747 { 1747 {
1748 if (!isMultiline) 1748 if (numberOfLines <= 1)
1749 return LayoutUnit(); 1749 return LayoutUnit();
1750 if (alignContent == ContentPositionFlexEnd) 1750 if (alignContent == ContentPositionFlexEnd)
1751 return availableFreeSpace; 1751 return availableFreeSpace;
1752 if (alignContent == ContentPositionCenter) 1752 if (alignContent == ContentPositionCenter)
1753 return availableFreeSpace / 2; 1753 return availableFreeSpace / 2;
1754 if (alignContentDistribution == ContentDistributionSpaceAround) { 1754 if (alignContentDistribution == ContentDistributionSpaceAround) {
1755 if (availableFreeSpace > 0 && numberOfLines) 1755 if (availableFreeSpace > 0 && numberOfLines)
1756 return availableFreeSpace / (2 * numberOfLines); 1756 return availableFreeSpace / (2 * numberOfLines);
1757 if (availableFreeSpace < 0) 1757 if (availableFreeSpace < 0)
1758 return availableFreeSpace / 2; 1758 return availableFreeSpace / 2;
1759 } 1759 }
1760 return LayoutUnit(); 1760 return LayoutUnit();
1761 } 1761 }
1762 1762
1763 static LayoutUnit alignContentSpaceBetweenChildren(LayoutUnit availableFreeSpace , ContentDistributionType alignContentDistribution, unsigned numberOfLines) 1763 static LayoutUnit alignContentSpaceBetweenChildren(LayoutUnit availableFreeSpace , ContentDistributionType alignContentDistribution, unsigned numberOfLines)
1764 { 1764 {
1765 if (availableFreeSpace > 0 && numberOfLines > 1) { 1765 if (availableFreeSpace > 0 && numberOfLines > 1) {
1766 if (alignContentDistribution == ContentDistributionSpaceBetween) 1766 if (alignContentDistribution == ContentDistributionSpaceBetween)
1767 return availableFreeSpace / (numberOfLines - 1); 1767 return availableFreeSpace / (numberOfLines - 1);
1768 if (alignContentDistribution == ContentDistributionSpaceAround || alignC ontentDistribution == ContentDistributionStretch) 1768 if (alignContentDistribution == ContentDistributionSpaceAround || alignC ontentDistribution == ContentDistributionStretch)
1769 return availableFreeSpace / numberOfLines; 1769 return availableFreeSpace / numberOfLines;
1770 } 1770 }
1771 return LayoutUnit(); 1771 return LayoutUnit();
1772 } 1772 }
1773 1773
1774 void LayoutFlexibleBox::alignFlexLines(Vector<LineContext>& lineContexts) 1774 void LayoutFlexibleBox::alignFlexLines(Vector<LineContext>& lineContexts)
1775 { 1775 {
1776 if (!lineContexts.size())
1777 return;
1778
1779 ContentPosition position = styleRef().resolvedAlignContentPosition(contentAl ignmentNormalBehavior()); 1776 ContentPosition position = styleRef().resolvedAlignContentPosition(contentAl ignmentNormalBehavior());
1780 ContentDistributionType distribution = styleRef().resolvedAlignContentDistri bution(contentAlignmentNormalBehavior()); 1777 ContentDistributionType distribution = styleRef().resolvedAlignContentDistri bution(contentAlignmentNormalBehavior());
1781 1778
1782 // If we have a single line flexbox the line height is all the available spa ce. 1779 // If we have a single line flexbox or a multiline line flexbox with only on e flex line,
1780 // the line height is all the available space.
1783 // For flex-direction: row, this means we need to use the height, so we do t his after calling updateLogicalHeight. 1781 // For flex-direction: row, this means we need to use the height, so we do t his after calling updateLogicalHeight.
1784 if (!isMultiline()) { 1782 if (lineContexts.size() == 1) {
1785 lineContexts[0].crossAxisExtent = crossAxisContentExtent(); 1783 lineContexts[0].crossAxisExtent = crossAxisContentExtent();
1786 return; 1784 return;
1787 } 1785 }
1788 1786
1789 if (position == ContentPositionFlexStart) 1787 if (position == ContentPositionFlexStart)
1790 return; 1788 return;
1791 1789
1792 LayoutUnit availableCrossAxisSpace = crossAxisContentExtent(); 1790 LayoutUnit availableCrossAxisSpace = crossAxisContentExtent();
1793 for (size_t i = 0; i < lineContexts.size(); ++i) 1791 for (size_t i = 0; i < lineContexts.size(); ++i)
1794 availableCrossAxisSpace -= lineContexts[i].crossAxisExtent; 1792 availableCrossAxisSpace -= lineContexts[i].crossAxisExtent;
1795 1793
1796 LayoutBox* child = m_orderIterator.first(); 1794 LayoutBox* child = m_orderIterator.first();
1797 LayoutUnit lineOffset = initialAlignContentOffset(availableCrossAxisSpace, p osition, distribution, isMultiline(), lineContexts.size()); 1795 LayoutUnit lineOffset = initialAlignContentOffset(availableCrossAxisSpace, p osition, distribution, lineContexts.size());
1798 for (unsigned lineNumber = 0; lineNumber < lineContexts.size(); ++lineNumber ) { 1796 for (unsigned lineNumber = 0; lineNumber < lineContexts.size(); ++lineNumber ) {
1799 lineContexts[lineNumber].crossAxisOffset += lineOffset; 1797 lineContexts[lineNumber].crossAxisOffset += lineOffset;
1800 for (size_t childNumber = 0; childNumber < lineContexts[lineNumber].numb erOfChildren; ++childNumber, child = m_orderIterator.next()) 1798 for (size_t childNumber = 0; childNumber < lineContexts[lineNumber].numb erOfChildren; ++childNumber, child = m_orderIterator.next())
1801 adjustAlignmentForChild(*child, lineOffset); 1799 adjustAlignmentForChild(*child, lineOffset);
1802 1800
1803 if (distribution == ContentDistributionStretch && availableCrossAxisSpac e > 0) 1801 if (distribution == ContentDistributionStretch && availableCrossAxisSpac e > 0)
1804 lineContexts[lineNumber].crossAxisExtent += availableCrossAxisSpace / static_cast<unsigned>(lineContexts.size()); 1802 lineContexts[lineNumber].crossAxisExtent += availableCrossAxisSpace / static_cast<unsigned>(lineContexts.size());
1805 1803
1806 lineOffset += alignContentSpaceBetweenChildren(availableCrossAxisSpace, distribution, lineContexts.size()); 1804 lineOffset += alignContentSpaceBetweenChildren(availableCrossAxisSpace, distribution, lineContexts.size());
1807 } 1805 }
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after
1931 DCHECK(child); 1929 DCHECK(child);
1932 LayoutUnit lineCrossAxisExtent = lineContexts[lineNumber].crossAxisE xtent; 1930 LayoutUnit lineCrossAxisExtent = lineContexts[lineNumber].crossAxisE xtent;
1933 LayoutUnit originalOffset = lineContexts[lineNumber].crossAxisOffset - crossAxisStartEdge; 1931 LayoutUnit originalOffset = lineContexts[lineNumber].crossAxisOffset - crossAxisStartEdge;
1934 LayoutUnit newOffset = contentExtent - originalOffset - lineCrossAxi sExtent; 1932 LayoutUnit newOffset = contentExtent - originalOffset - lineCrossAxi sExtent;
1935 adjustAlignmentForChild(*child, newOffset - originalOffset); 1933 adjustAlignmentForChild(*child, newOffset - originalOffset);
1936 } 1934 }
1937 } 1935 }
1938 } 1936 }
1939 1937
1940 } // namespace blink 1938 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/LayoutTests/css3/flexbox/multiline-align-content.html ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698