measure requires some math, usually. you will never call getExplicitOrMeasuredWidth() on yourself since that just reads the meausredWidht property you are trying to set. If I had a component that drew a circle and a triangle next to it, my measure would look like measuredWidth= circle.getExplicitOrMeasuredWidth() + triangle.getExplicitOrMeasuredWidth(); measuredHeight = Math.max( circle.getExplicitOrMeasuredHeight(), triangle.getExplicitOrMeasuredHeight(); In other situations I know I want to be 100 wide so I just set measuredWidth = 100. You'll have to find a way to know how big you want to be.
________________________________ From: [email protected] [mailto:[EMAIL PROTECTED] On Behalf Of Nate Pearson Sent: Wednesday, March 28, 2007 9:43 AM To: [email protected] Subject: [flexcoders] Re: Custom Component Width when 100%? In my measure function I have: override protected function measure():void{ measuredWidth = getExplicitOrMeasuredWidth() measuredHeight = getExplicitOrMeasuredHeight() } That makes them both zero though. although my updateDisplayList gets called twice my measure function is only called once. How should I be setting my measure function? If we get this worked out I think I'll be good to go, if not ill post the code. Thanks so much for your help Alex. --- In [email protected] <mailto:flexcoders%40yahoogroups.com> , "Alex Harui" <[EMAIL PROTECTED]> wrote: > > In theory, if you started with UIComponent, you need to implement a > measure() method to tell the parent how big you want to be. That parent > will then call setActualSize which should result in your > updateDisplayList being called with non-zero values. Again, if > extending UIComponent, you should be able to draw or add shapes in > updateDisplayList without causing a second call to updateDisplayList > providing that your measure() method returns the same values and nobody > else called invalidateDisplayList. > > It feels like you're not quite following the formula somehwere. You > could post the class code I suppose... > > ________________________________ > > From: [email protected] <mailto:flexcoders%40yahoogroups.com> [mailto:[email protected] <mailto:flexcoders%40yahoogroups.com> ] On > Behalf Of Nate Pearson > Sent: Tuesday, March 27, 2007 4:37 PM > To: [email protected] <mailto:flexcoders%40yahoogroups.com> > Subject: [flexcoders] Re: Custom Component Width when 100%? > > > > Ahhh HA! I was reading the adobe documentation and it turns out that > when you do addchild() it calls updateDisplayList again. This is why > my program wasn't working, I had an infinite loop when I called > addchild. > > I fixed it by adding an if function with a flag. > if (_newBackground){ > ... > } > > Since my updatedisplaylist was being called twice, once with 0 > unscaledWidth and once with an unscaledWidth, I had to add another > condition. > if (_newBackground && unscaledWidth != 0) { > ... > } > > Now I can't seem to get the component to scale with the rest of the > app when the browser window opens. I'm going to start a new thread > for that question. > > -Nate > > --- In [email protected] <mailto:flexcoders%40yahoogroups.com> <mailto:flexcoders%40yahoogroups.com> > , "Nate Pearson" <napearson99@> wrote: > > > > So I think i got unScaledWidth to work during UpdateDisplayList. When > > I debug it seems like it's called twice. Once with 0 unscaledWidth > > and once with the correct unScaledWidth. Should I be worrying about > > this? I didn't override the measure function. Should I? > > > > So to draw in UpdateDisplayList you have to manipulate graphics like > this: > > graphics.lineStyle(0,0x000000, 0); > > graphics.beginFill(0xffffff, 1); > > graphics.drawRect(0,0,unscaledWidth/2,unscaledHeight); > > graphics.endFill(); > > > > But what if I want to draw shapes or UIcomponents? That's why It > > wasn't working for me before, i was drawing like this: > > var shape:Shape = new Shape(); > > shape.graphics.lineStyle(0,0x000000, 0); > > shape.graphics.beginFill(0xffffff, 1); > > shape.graphics.drawRect(0,0,unscaledWidth/2,unscaledHeight); > > shape.graphics.endFill(); > > //When i do the add child my program won't load! > > //addChild(shape); > > > > I watched Ely's component video and it says I can add UIComponents, > > sprites and shapes to UpdateDisplayList. Does anyone know what I'm > > doing wrong? > > > > Thanks! > > > > -Nate > > > > > > --- In [email protected] <mailto:flexcoders%40yahoogroups.com> > <mailto:flexcoders%40yahoogroups.com> , "Alex Harui" <aharui@> wrote: > > > > > > You can always call validateNow() to force validation, but you > shouldn't > > > be drawing in commitProperties in most cases. Most drawing should > be in > > > updateDisplayList > > > > > > ________________________________ > > > > > > From: [email protected] <mailto:flexcoders%40yahoogroups.com> > <mailto:flexcoders%40yahoogroups.com> > [mailto:[email protected] <mailto:flexcoders%40yahoogroups.com> <mailto:flexcoders%40yahoogroups.com> > ] On > > > Behalf Of Nate Pearson > > > Sent: Monday, March 26, 2007 3:53 PM > > > To: [email protected] <mailto:flexcoders%40yahoogroups.com> <mailto:flexcoders%40yahoogroups.com> > > > > Subject: [flexcoders] Re: Custom Component Width when 100%? > > > > > > > > > > > > I can't seem to get the width/height at measure() or > > > updateDisplayList(). Is there a specific function I have to call? > > > > > > Isn't there a way to get the height/width before measure? I'm > drawing > > > during commit properties so I would like to get it then. > > > > > > Thanks for your reply. > > > > > > --- In [email protected] <mailto:flexcoders%40yahoogroups.com> > <mailto:flexcoders%40yahoogroups.com> > <mailto:flexcoders%40yahoogroups.com> > > > , "Alex Harui" <aharui@> wrote: > > > > > > > > It depends on when you ask. Components have a multi-stage > validation > > > > mechanism. Their properties get set in stage1, measured in stage2, > > > > layed out in stage 3. Until measurement, they are zero > width/height > > > > > > > > ________________________________ > > > > > > > > From: [email protected] <mailto:flexcoders%40yahoogroups.com> > <mailto:flexcoders%40yahoogroups.com> > <mailto:flexcoders%40yahoogroups.com> > > > [mailto:[email protected] <mailto:flexcoders%40yahoogroups.com> > <mailto:flexcoders%40yahoogroups.com> > <mailto:flexcoders%40yahoogroups.com> > > > ] On > > > > Behalf Of Nate Pearson > > > > Sent: Monday, March 26, 2007 1:09 PM > > > > To: [email protected] <mailto:flexcoders%40yahoogroups.com> > <mailto:flexcoders%40yahoogroups.com> > <mailto:flexcoders%40yahoogroups.com> > > > > Subject: [flexcoders] Custom Component Width when 100%? > > > > > > > > > > > > > > > > I created a custom component that works great when the width is > > > > specified. However, when I try to set the width to a percent (of > the > > > > parent) it returns 0. How to I reference the parent's width? I > tried > > > > getExplicitOrMeasuredWidth but it didn't work. > > > > > > > > Thanks in advance for the help. > > > > > > > > > >

