I'm building a Container (SnapinContainer), which in future I'd like to be
able to extend to put anything into. But it's specifically designed to
contain several instances of another container (Snapin), which doesn't
itself extend canvas, but puts its children in a canvas because I'm hiding a
lot of voodoo from less experienced Flex developers who need to be able to
build Snapins with the visual editor in Builder, and I want them to be able
to use styles for layout.

You're right that for now I can make the Snapin class use a subclass of
Canvas with a different measure method, but that doesn't help me use it for
any component, nor does it help if a developer decides for whatever reason
to put a Canvas in their Snapin.

If there were an easy way to call measure() and updateDisplayList() in a
UIComponent I could just emulate the system as it is, and for children of
SnapinContainer simply keep calling them in a loop until I get a stable
answer, and use that.

The problem stems from the fact that I re-order the children of
SnapinContainer based on their size, it's suppose to organise things in the
best way it can to make best use of the visible real estate. But many of its
children will be setActialSized larger than measured because the whole point
of it is to keep things looking neat, and we want them to line up.

-Josh

On Fri, Jun 20, 2008 at 3:16 PM, Alex Harui <[EMAIL PROTECTED]> wrote:

>  What do you need Canvas for?  Can you just use a custom Container with a
> better measure() method?
>
>
>  ------------------------------
>
> *From:* [email protected] [mailto:[EMAIL PROTECTED] *On
> Behalf Of *Josh McDonald
> *Sent:* Thursday, June 19, 2008 9:48 PM
>
> *To:* [email protected]
> *Subject:* Re: [flexcoders] Problems with updateDisplayList() and
> measure() and infinite loops + bug in CanvasLayout?
>
>
>
> The problem is that I'm building a container that can in theory contain
> anything, but will definitely contain things that contain Canvases. I guess
> I'm stuck cooking up a hack... :)
>
> -Josh
>
> On Fri, Jun 20, 2008 at 2:39 PM, Alex Harui <[EMAIL PROTECTED]> wrote:
>
> Sorry, I wasn't clear.  Canvas doesn't factor out centering and you end up
> in an infinite loop.  My recommendation is that you supply a custom
> measure() method that factors out the centering.
>
>
>  ------------------------------
>
> *From:* [email protected] [mailto:[EMAIL PROTECTED] *On
> Behalf Of *Josh McDonald
> *Sent:* Thursday, June 19, 2008 9:32 PM
> *To:* [email protected]
> *Subject:* Re: [flexcoders] Problems with updateDisplayList() and
> measure() and infinite loops + bug in CanvasLayout?
>
>
>
> Actually given it first grows to 160, then goes back to 161, it's waiting
> until the measure() is within one pixel :)
>
> resized to 100 x 50
> resized to 130 x 50
> resized to 145 x 50
> resized to 153 x 50
> resized to 157 x 50
> resized to 159 x 50
> resized to 160 x 50
>
> resized to 400 x 200
> resized to 280 x 109
> resized to 220 x 64
> resized to 190 x 50
> resized to 175 x 50
> resized to 168 x 50
> resized to 164 x 50
> resized to 162 x 50
> resized to 161 x 50
>
>
> -Josh
>
> On Fri, Jun 20, 2008 at 2:30 PM, Josh McDonald <[EMAIL PROTECTED]> wrote:
>
> That what I thought it should do, but it doesn't. Here's a simple test
> case:
>
> <?xml version="1.0" encoding="utf-8"?>
> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml";
> layout="absolute">
>
>     <mx:Canvas backgroundColor="blue" id="container" resize="trace('resized
> to ' + event.target.width + ' x ' + event.target.height)">
>         <mx:Button width="100" height="50" label="Button"/>
>         <mx:Label text="This is text, it's wider than the button!"
> width="160" id="lb" horizontalCenter="0" verticalCenter="0"/>
>     </mx:Canvas>
>
>     <mx:Button click="trace('');container.setActualSize(400,200)"
> label="Mess It up" horizontalCenter="0" verticalCenter="0"/>
>
> </mx:Application>
>
> Unless I'm mistaken, It shows that when the current size is not the correct
> measure size (as it gets bigger on creationComplete, or as it gets smaller
> when you click "mess it up"), you get a loop of updateDisplayList(),
> measure(), etc until updateDisplayList() is followed by a measure() that
> reports the same size that was last passed to updateDisplayList().
>
> -Josh
>
>
>
> On Fri, Jun 20, 2008 at 2:12 PM, Alex Harui <[EMAIL PROTECTED]> wrote:
>
> Measure() should return the bound of the children factoring out centering
> offsets.
>
>
>  ------------------------------
>
> *From:* [email protected] [mailto:[EMAIL PROTECTED] *On
> Behalf Of *Josh McDonald
> *Sent:* Thursday, June 19, 2008 7:21 PM
> *To:* [email protected]
> *Subject:* [flexcoders] Problems with updateDisplayList() and measure()
> and infinite loops + bug in CanvasLayout?
>
>
>
> Hey guys,
>
> I've got a problem with some layout code I'm working on. I'm positioning a
> bunch of components, and their positions are determined by their measured
> size. However they are also being expanded larger that their measured size
> on occasion, which sends me into an infinite loop whenever one of my
> containers contains anything that's centred.
>
> I've figured out that this is due to CanvasLayout.measure() measuring
> children with horizontalCenter / verticalCenter at their current position,
> rather than at 0,0 which would make more sense to me. Not much I can do
> about this. It smells like a bug, but it might be on purpose.
>
> What should I do to combat this problem? I was thinking maybe setting a
> flag on updateDisplayList, that will make the next call to measure() return
> the same size no matter what, but that seems like a hack to me. And if
> there's an occasion where updateDisplayList() isn't followed immediately by
> measure() it'll break, and various other things just make it seem very
> frail.
>
> Has anybody come up against this sort of thing before? How did you tackle
> it?
>
> Cheers,
>
> -Josh
>
> --
> "Therefore, send not to know For whom the bell tolls. It tolls for thee."
>
> :: Josh 'G-Funk' McDonald
> :: 0437 221 380 :: [EMAIL PROTECTED]
>
>
>
>
> --
> "Therefore, send not to know For whom the bell tolls. It tolls for thee."
>
> :: Josh 'G-Funk' McDonald
> :: 0437 221 380 :: [EMAIL PROTECTED]
>
>
>
>
> --
> "Therefore, send not to know For whom the bell tolls. It tolls for thee."
>
> :: Josh 'G-Funk' McDonald
> :: 0437 221 380 :: [EMAIL PROTECTED]
>
>
>
>
> --
> "Therefore, send not to know For whom the bell tolls. It tolls for thee."
>
> :: Josh 'G-Funk' McDonald
> :: 0437 221 380 :: [EMAIL PROTECTED]
>
> 
>



-- 
"Therefore, send not to know For whom the bell tolls. It tolls for thee."

:: Josh 'G-Funk' McDonald
:: 0437 221 380 :: [EMAIL PROTECTED]

Reply via email to