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

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

Issue 1980103002: Include auto vertical scrollbar in intrinsicScrollbarLogicalWidth. (Closed) Base URL: https://chromium.googlesource.com/chromium/src@master
Patch Set: Restore list box height calculation, fix scrollbar width factor Created 4 years, 6 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 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
130 previousMaxContentFlexFraction = countIntrinsicSizeForAlgorithmChange(ma xPreferredLogicalWidth, child, previousMaxContentFlexFraction); 130 previousMaxContentFlexFraction = countIntrinsicSizeForAlgorithmChange(ma xPreferredLogicalWidth, child, previousMaxContentFlexFraction);
131 } 131 }
132 132
133 maxLogicalWidth = std::max(minLogicalWidth, maxLogicalWidth); 133 maxLogicalWidth = std::max(minLogicalWidth, maxLogicalWidth);
134 134
135 // Due to negative margins, it is possible that we calculated a negative int rinsic width. Make sure that we 135 // Due to negative margins, it is possible that we calculated a negative int rinsic width. Make sure that we
136 // never return a negative width. 136 // never return a negative width.
137 minLogicalWidth = std::max(LayoutUnit(), minLogicalWidth); 137 minLogicalWidth = std::max(LayoutUnit(), minLogicalWidth);
138 maxLogicalWidth = std::max(LayoutUnit(), maxLogicalWidth); 138 maxLogicalWidth = std::max(LayoutUnit(), maxLogicalWidth);
139 139
140 LayoutUnit scrollbarWidth(intrinsicScrollbarLogicalWidth()); 140 LayoutUnit scrollbarWidth(scrollbarLogicalWidth());
141 maxLogicalWidth += scrollbarWidth; 141 maxLogicalWidth += scrollbarWidth;
142 minLogicalWidth += scrollbarWidth; 142 minLogicalWidth += scrollbarWidth;
143 } 143 }
144 144
145 float LayoutFlexibleBox::countIntrinsicSizeForAlgorithmChange(LayoutUnit maxPref erredLogicalWidth, LayoutBox* child, float previousMaxContentFlexFraction) const 145 float LayoutFlexibleBox::countIntrinsicSizeForAlgorithmChange(LayoutUnit maxPref erredLogicalWidth, LayoutBox* child, float previousMaxContentFlexFraction) const
146 { 146 {
147 // Determine whether the new version of the intrinsic size algorithm of the flexbox 147 // Determine whether the new version of the intrinsic size algorithm of the flexbox
148 // spec would produce a different result than our above algorithm. 148 // spec would produce a different result than our above algorithm.
149 // The algorithm produces a different result iff the max-content flex fracti on 149 // The algorithm produces a different result iff the max-content flex fracti on
150 // (as defined in the new algorithm) is not identical for each flex item. 150 // (as defined in the new algorithm) is not identical for each flex item.
(...skipping 638 matching lines...) Expand 10 before | Expand all | Expand 10 after
789 void LayoutFlexibleBox::cacheChildMainSize(const LayoutBox& child) 789 void LayoutFlexibleBox::cacheChildMainSize(const LayoutBox& child)
790 { 790 {
791 ASSERT(!child.needsLayout()); 791 ASSERT(!child.needsLayout());
792 LayoutUnit mainSize; 792 LayoutUnit mainSize;
793 if (hasOrthogonalFlow(child)) { 793 if (hasOrthogonalFlow(child)) {
794 mainSize = child.logicalHeight(); 794 mainSize = child.logicalHeight();
795 } else { 795 } else {
796 // The max preferred logical width includes the intrinsic scrollbar logi cal width, which is only set for 796 // The max preferred logical width includes the intrinsic scrollbar logi cal width, which is only set for
797 // overflow: scroll. To handle overflow: auto, we have to take scrollbar LogicalWidth() into account, and then 797 // overflow: scroll. To handle overflow: auto, we have to take scrollbar LogicalWidth() into account, and then
798 // subtract the intrinsic width again so as to not double-count overflow : scroll scrollbars. 798 // subtract the intrinsic width again so as to not double-count overflow : scroll scrollbars.
799 mainSize = child.maxPreferredLogicalWidth() + child.scrollbarLogicalWidt h() - child.intrinsicScrollbarLogicalWidth(); 799 mainSize = child.maxPreferredLogicalWidth() + child.scrollbarLogicalWidt h() - child.scrollbarLogicalWidth();
800 } 800 }
801 m_intrinsicSizeAlongMainAxis.set(&child, mainSize); 801 m_intrinsicSizeAlongMainAxis.set(&child, mainSize);
802 m_relaidOutChildren.add(&child); 802 m_relaidOutChildren.add(&child);
803 } 803 }
804 804
805 void LayoutFlexibleBox::clearCachedMainSizeForChild(const LayoutBox& child) 805 void LayoutFlexibleBox::clearCachedMainSizeForChild(const LayoutBox& child)
806 { 806 {
807 m_intrinsicSizeAlongMainAxis.remove(&child); 807 m_intrinsicSizeAlongMainAxis.remove(&child);
808 } 808 }
809 809
(...skipping 13 matching lines...) Expand all
823 if (childLayoutType == NeverLayout) 823 if (childLayoutType == NeverLayout)
824 return LayoutUnit(); 824 return LayoutUnit();
825 825
826 if (child.needsLayout() || childLayoutType == ForceLayout || !m_intrinsi cSizeAlongMainAxis.contains(&child)) { 826 if (child.needsLayout() || childLayoutType == ForceLayout || !m_intrinsi cSizeAlongMainAxis.contains(&child)) {
827 child.forceChildLayout(); 827 child.forceChildLayout();
828 cacheChildMainSize(child); 828 cacheChildMainSize(child);
829 } 829 }
830 mainAxisExtent = m_intrinsicSizeAlongMainAxis.get(&child); 830 mainAxisExtent = m_intrinsicSizeAlongMainAxis.get(&child);
831 } else { 831 } else {
832 // We don't need to add scrollbarLogicalWidth here. For overflow: scroll , the preferred width 832 // We don't need to add scrollbarLogicalWidth here. For overflow: scroll , the preferred width
833 // already includes the scrollbar size (via intrinsicScrollbarLogicalWid th()). For overflow: auto, 833 // already includes the scrollbar size (via scrollbarLogicalWidth()). Fo r overflow: auto,
834 // childFlexBaseSizeRequiresLayout returns true and we handle that via t he other branch 834 // childFlexBaseSizeRequiresLayout returns true and we handle that via t he other branch
835 // of this if. 835 // of this if.
836 mainAxisExtent = child.maxPreferredLogicalWidth(); 836 mainAxisExtent = child.maxPreferredLogicalWidth();
837 } 837 }
838 ASSERT(mainAxisExtent - mainAxisBorderAndPaddingExtentForChild(child) >= 0); 838 ASSERT(mainAxisExtent - mainAxisBorderAndPaddingExtentForChild(child) >= 0);
839 return mainAxisExtent - mainAxisBorderAndPaddingExtentForChild(child); 839 return mainAxisExtent - mainAxisBorderAndPaddingExtentForChild(child);
840 } 840 }
841 841
842 void LayoutFlexibleBox::layoutFlexItems(bool relayoutChildren, SubtreeLayoutScop e& layoutScope) 842 void LayoutFlexibleBox::layoutFlexItems(bool relayoutChildren, SubtreeLayoutScop e& layoutScope)
843 { 843 {
(...skipping 1018 matching lines...) Expand 10 before | Expand all | Expand 10 after
1862 ASSERT(child); 1862 ASSERT(child);
1863 LayoutUnit lineCrossAxisExtent = lineContexts[lineNumber].crossAxisE xtent; 1863 LayoutUnit lineCrossAxisExtent = lineContexts[lineNumber].crossAxisE xtent;
1864 LayoutUnit originalOffset = lineContexts[lineNumber].crossAxisOffset - crossAxisStartEdge; 1864 LayoutUnit originalOffset = lineContexts[lineNumber].crossAxisOffset - crossAxisStartEdge;
1865 LayoutUnit newOffset = contentExtent - originalOffset - lineCrossAxi sExtent; 1865 LayoutUnit newOffset = contentExtent - originalOffset - lineCrossAxi sExtent;
1866 adjustAlignmentForChild(*child, newOffset - originalOffset); 1866 adjustAlignmentForChild(*child, newOffset - originalOffset);
1867 } 1867 }
1868 } 1868 }
1869 } 1869 }
1870 1870
1871 } // namespace blink 1871 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698