Changeset 144104 in webkit
- Timestamp:
- Feb 26, 2013 1:58:36 PM (11 years ago)
- Location:
- trunk
- Files:
-
- 2 added
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r144096 r144104 1 2013-02-26 Tony Chang <tony@chromium.org> 2 3 CSS Flexbox: dynamically applied align-items doesn't affect item alignment 4 https://bugs.webkit.org/show_bug.cgi?id=110341 5 6 Reviewed by Ojan Vafai. 7 8 Also fix a typo causing align-self-* classes from not applying. There 9 was only one test that tried to use the align-self classes and it was 10 testing all values behaved the same. 11 12 * css3/flexbox/relayout-align-items-expected.txt: Added. 13 * css3/flexbox/relayout-align-items.html: Added. 14 * css3/flexbox/resources/flexbox.css: 15 (.align-self-auto): 16 (.align-self-flex-start): 17 (.align-self-flex-end): 18 (.align-self-center): 19 (.align-self-baseline): 20 (.align-self-stretch): 21 1 22 2013-02-26 Christian Biesinger <cbiesinger@chromium.org> 2 23 -
trunk/LayoutTests/css3/flexbox/resources/flexbox.css
r132104 r144104 94 94 95 95 .align-self-auto { 96 -webkit-align- items: auto;97 -moz-align- items: auto;96 -webkit-align-self: auto; 97 -moz-align-self: auto; 98 98 } 99 99 .align-self-flex-start { 100 -webkit-align- items: flex-start;101 -moz-align- items: flex-start;100 -webkit-align-self: flex-start; 101 -moz-align-self: flex-start; 102 102 } 103 103 .align-self-flex-end { 104 -webkit-align- items: flex-end;105 -moz-align- items: flex-end;104 -webkit-align-self: flex-end; 105 -moz-align-self: flex-end; 106 106 } 107 107 .align-self-center { 108 -webkit-align- items: center;109 -moz-align- items: center;108 -webkit-align-self: center; 109 -moz-align-self: center; 110 110 } 111 111 .align-self-baseline { 112 -webkit-align- items: baseline;113 -moz-align- items: baseline;112 -webkit-align-self: baseline; 113 -moz-align-self: baseline; 114 114 } 115 115 .align-self-stretch { 116 -webkit-align- items: stretch;117 -moz-align- items: stretch;116 -webkit-align-self: stretch; 117 -moz-align-self: stretch; 118 118 } 119 119 -
trunk/Source/WebCore/ChangeLog
r144103 r144104 1 2013-02-26 Tony Chang <tony@chromium.org> 2 3 CSS Flexbox: dynamically applied align-items doesn't affect item alignment 4 https://bugs.webkit.org/show_bug.cgi?id=110341 5 6 Reviewed by Ojan Vafai. 7 8 If flex items don't change width, we don't lay them out again. This causes problems 9 when an item goes from stretch to non-stretch since we need to relayout to get the 10 smaller height. Fix this by marking flex items that were stretch as needing layout. 11 12 Test: css3/flexbox/relayout-align-items.html 13 14 * rendering/RenderFlexibleBox.cpp: 15 (WebCore::resolveAlignment): Pull out common code for computing flex item style. 16 (WebCore::RenderFlexibleBox::styleDidChange): Mark children as needing layout. 17 (WebCore::RenderFlexibleBox::alignmentForChild): Use resolveAlignment. 18 * rendering/RenderFlexibleBox.h: 19 1 20 2013-02-26 Anders Carlsson <andersca@apple.com> 2 21 -
trunk/Source/WebCore/rendering/RenderFlexibleBox.cpp
r144096 r144104 296 296 } 297 297 298 static EAlignItems resolveAlignment(const RenderStyle* parentStyle, const RenderStyle* childStyle) 299 { 300 EAlignItems align = childStyle->alignSelf(); 301 if (align == AlignAuto) 302 align = parentStyle->alignItems(); 303 return align; 304 } 305 306 void RenderFlexibleBox::styleDidChange(StyleDifference diff, const RenderStyle* oldStyle) 307 { 308 RenderBlock::styleDidChange(diff, oldStyle); 309 310 if (oldStyle && oldStyle->alignItems() == AlignStretch && diff == StyleDifferenceLayout) { 311 // Flex items that were previously stretching need to be relayed out so we can compute new available cross axis space. 312 // This is only necessary for stretching since other alignment values don't change the size of the box. 313 for (RenderBox* child = firstChildBox(); child; child = child->nextSiblingBox()) { 314 EAlignItems previousAlignment = resolveAlignment(oldStyle, child->style()); 315 if (previousAlignment == AlignStretch && previousAlignment != resolveAlignment(style(), child->style())) 316 child->setChildNeedsLayout(true, MarkOnlyThis); 317 } 318 } 319 } 320 298 321 void RenderFlexibleBox::layoutBlock(bool relayoutChildren, LayoutUnit) 299 322 { … … 1060 1083 EAlignItems RenderFlexibleBox::alignmentForChild(RenderBox* child) const 1061 1084 { 1062 EAlignItems align = child->style()->alignSelf(); 1063 if (align == AlignAuto) 1064 align = style()->alignItems(); 1085 EAlignItems align = resolveAlignment(style(), child->style()); 1065 1086 1066 1087 if (align == AlignBaseline && hasOrthogonalFlow(child)) -
trunk/Source/WebCore/rendering/RenderFlexibleBox.h
r143643 r144104 61 61 virtual void computeIntrinsicLogicalWidths(LayoutUnit& minLogicalWidth, LayoutUnit& maxLogicalWidth) const OVERRIDE; 62 62 virtual void computePreferredLogicalWidths() OVERRIDE; 63 64 virtual void styleDidChange(StyleDifference, const RenderStyle* oldStyle); 63 65 64 66 private:
Note: See TracChangeset
for help on using the changeset viewer.