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

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

Issue 2150003005: Add grid/flex layout support for <fieldset> (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: updated TestExpectations and fixed legend-after-margin-vertical-writing-mode.html Created 4 years, 5 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
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 865 matching lines...) Expand 10 before | Expand all | Expand 10 after
876 LayoutUnit sumFlexBaseSize; 876 LayoutUnit sumFlexBaseSize;
877 double totalFlexGrow; 877 double totalFlexGrow;
878 double totalFlexShrink; 878 double totalFlexShrink;
879 double totalWeightedFlexShrink; 879 double totalWeightedFlexShrink;
880 LayoutUnit sumHypotheticalMainSize; 880 LayoutUnit sumHypotheticalMainSize;
881 881
882 PaintLayerScrollableArea::PreventRelayoutScope preventRelayoutScope(layoutSc ope); 882 PaintLayerScrollableArea::PreventRelayoutScope preventRelayoutScope(layoutSc ope);
883 883
884 m_orderIterator.first(); 884 m_orderIterator.first();
885 LayoutUnit crossAxisOffset = flowAwareBorderBefore() + flowAwarePaddingBefor e(); 885 LayoutUnit crossAxisOffset = flowAwareBorderBefore() + flowAwarePaddingBefor e();
886 while (computeNextFlexLine(orderedChildren, sumFlexBaseSize, totalFlexGrow, totalFlexShrink, totalWeightedFlexShrink, sumHypotheticalMainSize, relayoutChild ren)) { 886 while (computeNextFlexLine(orderedChildren, sumFlexBaseSize, totalFlexGrow, totalFlexShrink, totalWeightedFlexShrink, sumHypotheticalMainSize, relayoutChild ren, layoutScope)) {
887 LayoutUnit containerMainInnerSize = mainAxisContentExtent(sumHypothetica lMainSize); 887 LayoutUnit containerMainInnerSize = mainAxisContentExtent(sumHypothetica lMainSize);
888 // availableFreeSpace is the initial amount of free space in this flexbo x. 888 // availableFreeSpace is the initial amount of free space in this flexbo x.
889 // remainingFreeSpace starts out at the same value but as we place and l ay out 889 // remainingFreeSpace starts out at the same value but as we place and l ay out
890 // flex items we subtract from it. Note that both values can be negative . 890 // flex items we subtract from it. Note that both values can be negative .
891 LayoutUnit remainingFreeSpace = containerMainInnerSize - sumFlexBaseSize ; 891 LayoutUnit remainingFreeSpace = containerMainInnerSize - sumFlexBaseSize ;
892 FlexSign flexSign = (sumHypotheticalMainSize < containerMainInnerSize) ? PositiveFlexibility : NegativeFlexibility; 892 FlexSign flexSign = (sumHypotheticalMainSize < containerMainInnerSize) ? PositiveFlexibility : NegativeFlexibility;
893 freezeInflexibleItems(flexSign, orderedChildren, remainingFreeSpace, tot alFlexGrow, totalFlexShrink, totalWeightedFlexShrink); 893 freezeInflexibleItems(flexSign, orderedChildren, remainingFreeSpace, tot alFlexGrow, totalFlexShrink, totalWeightedFlexShrink);
894 // The initial free space gets calculated after freezing inflexible item s. https://drafts.csswg.org/css-flexbox/#resolve-flexible-lengths step 3 894 // The initial free space gets calculated after freezing inflexible item s. https://drafts.csswg.org/css-flexbox/#resolve-flexible-lengths step 3
895 const LayoutUnit initialFreeSpace = remainingFreeSpace; 895 const LayoutUnit initialFreeSpace = remainingFreeSpace;
896 while (!resolveFlexibleLengths(flexSign, orderedChildren, initialFreeSpa ce, remainingFreeSpace, totalFlexGrow, totalFlexShrink, totalWeightedFlexShrink) ) { 896 while (!resolveFlexibleLengths(flexSign, orderedChildren, initialFreeSpa ce, remainingFreeSpace, totalFlexGrow, totalFlexShrink, totalWeightedFlexShrink) ) {
(...skipping 296 matching lines...) Expand 10 before | Expand all | Expand 10 after
1193 } 1193 }
1194 1194
1195 if (crossAxisLengthIsDefinite(child, crossMin)) { 1195 if (crossAxisLengthIsDefinite(child, crossMin)) {
1196 LayoutUnit minValue = computeMainSizeFromAspectRatioUsing(child, crossMi n); 1196 LayoutUnit minValue = computeMainSizeFromAspectRatioUsing(child, crossMi n);
1197 childSize = std::max(minValue, childSize); 1197 childSize = std::max(minValue, childSize);
1198 } 1198 }
1199 1199
1200 return childSize; 1200 return childSize;
1201 } 1201 }
1202 1202
1203 bool LayoutFlexibleBox::computeNextFlexLine(OrderedFlexItemList& orderedChildren , LayoutUnit& sumFlexBaseSize, double& totalFlexGrow, double& totalFlexShrink, d ouble& totalWeightedFlexShrink, LayoutUnit& sumHypotheticalMainSize, bool relayo utChildren) 1203 bool LayoutFlexibleBox::computeNextFlexLine(OrderedFlexItemList& orderedChildren , LayoutUnit& sumFlexBaseSize, double& totalFlexGrow, double& totalFlexShrink, d ouble& totalWeightedFlexShrink, LayoutUnit& sumHypotheticalMainSize, bool relayo utChildren, SubtreeLayoutScope& layoutScope)
1204 { 1204 {
1205 orderedChildren.clear(); 1205 orderedChildren.clear();
1206 sumFlexBaseSize = LayoutUnit(); 1206 sumFlexBaseSize = LayoutUnit();
1207 totalFlexGrow = totalFlexShrink = totalWeightedFlexShrink = 0; 1207 totalFlexGrow = totalFlexShrink = totalWeightedFlexShrink = 0;
1208 sumHypotheticalMainSize = LayoutUnit(); 1208 sumHypotheticalMainSize = LayoutUnit();
1209 1209
1210 if (!m_orderIterator.currentChild()) 1210 if (!m_orderIterator.currentChild())
1211 return false; 1211 return false;
1212 1212
1213 LayoutUnit lineBreakLength = mainAxisContentExtent(LayoutUnit::max()); 1213 LayoutUnit lineBreakLength = mainAxisContentExtent(LayoutUnit::max());
1214 1214
1215 bool lineHasInFlowItem = false; 1215 bool lineHasInFlowItem = false;
1216 1216
1217 // Fieldsets need to find their legend and position it inside the border of the object.
1218 // The legend then gets skipped during normal layout.
1219 // It doesn't get included in the normal layout process but is instead skipp ed.
1220 LayoutObject* childToExclude = layoutSpecialExcludedChild(relayoutChildren, layoutScope);
cbiesinger 2016/07/20 01:42:31 Thanks for doing this! I'll take a closer look tom
Gleb Lanbin 2016/07/21 18:25:31 Done.
1221
1217 for (LayoutBox* child = m_orderIterator.currentChild(); child; child = m_ord erIterator.next()) { 1222 for (LayoutBox* child = m_orderIterator.currentChild(); child; child = m_ord erIterator.next()) {
1223
1224 if (childToExclude == child)
1225 continue; // Skip this child, since it will be positioned by the spe cialized subclass (fieldsets runs).
1226
1218 if (child->isOutOfFlowPositioned()) { 1227 if (child->isOutOfFlowPositioned()) {
1219 orderedChildren.append(FlexItem(child)); 1228 orderedChildren.append(FlexItem(child));
1220 continue; 1229 continue;
1221 } 1230 }
1222 1231
1223 ChildLayoutType layoutType = relayoutChildren ? ForceLayout : LayoutIfNe eded; 1232 ChildLayoutType layoutType = relayoutChildren ? ForceLayout : LayoutIfNe eded;
1224 1233
1225 // If this condition is true, then computeMainAxisExtentForChild will ca ll child.intrinsicContentLogicalHeight() 1234 // If this condition is true, then computeMainAxisExtentForChild will ca ll child.intrinsicContentLogicalHeight()
1226 // and child.scrollbarLogicalHeight(), so if the child has intrinsic min /max/preferred size, 1235 // and child.scrollbarLogicalHeight(), so if the child has intrinsic min /max/preferred size,
1227 // run layout on it now to make sure its logical height and scroll bars are up to date. 1236 // run layout on it now to make sure its logical height and scroll bars are up to date.
(...skipping 678 matching lines...) Expand 10 before | Expand all | Expand 10 after
1906 ASSERT(child); 1915 ASSERT(child);
1907 LayoutUnit lineCrossAxisExtent = lineContexts[lineNumber].crossAxisE xtent; 1916 LayoutUnit lineCrossAxisExtent = lineContexts[lineNumber].crossAxisE xtent;
1908 LayoutUnit originalOffset = lineContexts[lineNumber].crossAxisOffset - crossAxisStartEdge; 1917 LayoutUnit originalOffset = lineContexts[lineNumber].crossAxisOffset - crossAxisStartEdge;
1909 LayoutUnit newOffset = contentExtent - originalOffset - lineCrossAxi sExtent; 1918 LayoutUnit newOffset = contentExtent - originalOffset - lineCrossAxi sExtent;
1910 adjustAlignmentForChild(*child, newOffset - originalOffset); 1919 adjustAlignmentForChild(*child, newOffset - originalOffset);
1911 } 1920 }
1912 } 1921 }
1913 } 1922 }
1914 1923
1915 } // namespace blink 1924 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698