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