Hi,

as part of the Jewel Tile Layout improvement, I want to let you know about
an important addition.

until now I had very hard time dealing with width/height of a component in
layout classes when the width or height are a percentage
or not set.

Since that depends on other containers, I found while working on Jewel
DataGrid that I need to make "requestAnimationFrame" calls
until I get the proper measurements.

So I set up a "waitForSize" public property that is available in all Jewel
layouts, since all comes from StyledLayoutBase.
This is false by default, so you need to put to true to use this feature. I
didn't other way to get this measures, I think maybe this could have
some performance hit, for that reason, I let users choose. If you know
something better, let me know :)

If you check that code you'll find that performanceLayout is now using
"checkHostSize()" (if waitForSize is true).The code is this:

/**
* We call requestAnimationFrame until we get width and height
*/
COMPILE::JS
protected function checkHostSize():void {
if(sizeInitialized) return;
if((host.width == 0 && !isNaN(host.percentWidth)) ||
(host.height == 0 && !isNaN(host.percentHeight)))
{
requestAnimationFrame(checkHostSize);
} else
{
sizeInitialized = true;
executeLayout();
}
}

when we get the size, we continue as usual.
As I said before if you left "waitForSize" to false (default), it will work
as always.

For example, new tile horizontal layout is using it in TDJ:

<j:Group className="wrapper" width="100%">
<j:beads>
<j:TileHorizontalLayout localId="tl" waitForSize="true"/>
</j:beads>

Any comment are welcome

Thanks

-- 
Carlos Rovira
http://about.me/carlosrovira

Reply via email to