[webkit-reviews] review denied: [Bug 69808] Implement -webkit-flex-align for cross axis alignment : [Attachment 110454] Patch

bugzilla-daemon at webkit.org bugzilla-daemon at webkit.org
Mon Oct 10 19:15:28 PDT 2011

Ojan Vafai <ojan at chromium.org> has denied Tony Chang <tony at chromium.org>'s
request for review:
Bug 69808: Implement -webkit-flex-align for cross axis alignment

Attachment 110454: Patch

------- Additional Comments from Ojan Vafai <ojan at chromium.org>
View in context: https://bugs.webkit.org/attachment.cgi?id=110454&action=review

A first pass review. I'd like hyatt to do the final r+ here since I'm unsure
about the baseline related stuff.

> LayoutTests/css3/flexbox/flex-align.html:105
> +  <div data-expected-height="100" data-offset-y="0" style="width:
-webkit-flex(1 0 0); height: 100px;"></div>

Would be good to have a test-case for items with different top/bottom margins.
Specifically, I'd like to see flex-align:stretch and flex-align:baseline with
something like the following:

<div class=flexbox>
  <div style="width: -webkit-flex(1); -webkit-flex-align: stretch; height:
50px; margin: 10px 20px 30px 40px"></div>
  <div style="width: -webkit-flex(1); -webkit-flex-align: stretch; height:
50px; margin: 2px 4px 6px 8px"></div>

> Source/WebCore/rendering/RenderFlexibleBox.cpp:512
> +	       if (isFlowAwareLogicalHeightAuto())
> +		   setFlowAwareLogicalHeight(std::max(flowAwareLogicalHeight(),
flowAwareBorderBefore() + flowAwarePaddingBefore() +
flowAwareMarginBeforeForChild(child) + maxAscent + maxDescent +
flowAwareMarginAfterForChild(child) + flowAwarePaddingAfter() +
flowAwareBorderAfter() + scrollbarLogicalHeight()));
> +	   } else if (isFlowAwareLogicalHeightAuto())
> +	       setFlowAwareLogicalHeight(std::max(flowAwareLogicalHeight(),
flowAwareBorderBefore() + flowAwarePaddingBefore() +
flowAwareMarginBeforeForChild(child) + flowAwareLogicalHeightForChild(child) +
flowAwareMarginAfterForChild(child) + flowAwarePaddingAfter() +
flowAwareBorderAfter() + scrollbarLogicalHeight()));

Can you instead move flowAwareBorderAndPaddingHeight and
flowAwareMarginHeightForChild into helper functions? That would make this a lot
easier to read and avoid code duplication here and above.

> Source/WebCore/rendering/RenderFlexibleBox.cpp:540
> +void RenderFlexibleBox::alignChildrenBlockDirection(FlexOrderIterator&
iterator, LayoutUnit maxAscent, LayoutUnit maxDescent)

You don't use maxDescent. Did you not get a compiler warning?

> Source/WebCore/rendering/RenderFlexibleBox.cpp:544
> +	   LayoutUnit currentChildHeight = flowAwareMarginBeforeForChild(child)
+ flowAwareLogicalHeightForChild(child) + flowAwareMarginAfterForChild(child);

You compute this on line 503 as well. Move into a helper function?
flowAwareLogicalMarginBoxHeightForChild? lol.

> Source/WebCore/rendering/RenderFlexibleBox.cpp:555
> +	   case AlignStart:
> +	       break;

Could you check the flexAlign as the beginning of the function and early
return? Then here you could ASSERT_NOT_REACHED? I guess that's a premature
optimization, but a FIXME at least would be good.

> Source/WebCore/rendering/RenderFlexibleBox.cpp:566
> +	       LayoutUnit ascent = child->firstLineBoxBaseline();
> +	       if (ascent == -1)
> +		   ascent = flowAwareLogicalHeightForChild(child) +
> +	       ascent += flowAwareMarginBeforeForChild(child);

This chunk of code is exactly the same as in
layoutAndPlaceChildrenInlineDirection. Pull it out into a helper function?

More information about the webkit-reviews mailing list