Not quite sure exactly what you're looking for here Jason, but I'm guessing 
it's something like this:
(I've just hacked at your last example since its very late here and I'm tired, 
but hope it helps get you a bit further).
Note your component instance now has width+height set to 100% and there's an 
override of updateDisplayList.
I'm actually really unhappy with the resultant code for a few reasons, so 
please don't take it as an example of good practice in any way.
But, at the end of the day, your circle gets drawn in the middle of the panel 
when the panel resizes, which I think is something along the lines of what you 
wanted to do.



        <mx:Panel id="networkBrowserPanel" width="100%" height="100%" 
layout="absolute" title="Network" >
       <c:NetworkLayout container="{networkBrowserPanel}" width="100%" 
height="100%"
        outerAlpha="1" innerAlpha="1" outerColor="#ffffff" 
innerColor="0x666666"  circleRadius="20" /> 
        </mx:Panel>    


package components
{
 import mx.core.UIComponent;
 import flash.geom.Rectangle;
 
 public class NetworkLayout extends UIComponent
 {
          public var container:UIComponent;
          public var borderThickness:int;
          public var outerColor:uint;
          public var innerColor:uint;
          public var outerAlpha:int;
          public var innerAlpha:int;
          public var circleRadius:int;
  
        public function NetworkLayout()
        {
                super();
        }
  
    override protected function commitProperties():void
    {
                drawCircle();
    }
 
        private function drawCircle():void
        {
           graphics.clear();
           var thisWidth:int = measuredWidth;
           var thisHeight:int = measuredHeight;
           var middleX:int = thisWidth/2;
           var middleY:int = thisHeight/2;
           
           graphics.lineStyle(borderThickness, outerColor, outerAlpha);
           graphics.beginFill(innerColor, innerAlpha)
           graphics.drawCircle(middleX, middleY, circleRadius); 
        }
        
        override protected function updateDisplayList(unscaledWidth:Number, 
unscaledHeight:Number):void 
        {
                        super.updateDisplayList(unscaledWidth, unscaledHeight); 
                
                        measuredWidth = unscaledWidth;
                        measuredHeight = unscaledHeight;                        
                        drawCircle();
        }
   
    override protected function measure():void
    {
        var rect:Rectangle = getBounds(container);
        measuredWidth = rect.width;
        measuredHeight = rect.height;                   
    }
    
 }
}


-----Original Message-----
From: [email protected] on behalf of Merrill, Jason
Sent: Fri 18/01/2008 01:42
To: [email protected]
Subject: RE: [flexcoders] Drawn objects acting as children to components?
 
OK, thanks, I have knocked this down to it's simplest form.  The graphic
appears in the right spot, but it does not respond to changes in the
panel's size change. I'm not sure how to implement that in my component.
I'm passing in a reference to the Panel container, but it's not
responding to it's width and height - I tried adding a listener to the
panel's updateComplete event, but when I reference the panel, I get an
error saying I cannot assign to a null property.  I took that code out,
see the rest below:
 
<mx:Panel id="networkBrowserPanel" width="100%" height="100%"
layout="absolute" title="Network" >
       <c:NetworkLayout container="{networkBrowserPanel}" 
        outerAlpha="1" innerAlpha="1" outerColor="#ffffff"
innerColor="0x666666" circleRadius="20" />
</mx:Panel>    
    
package components
{
 import mx.core.UIComponent;
 import flash.geom.Rectangle;
 
 public class NetworkLayout extends UIComponent
 {
  public var container:UIComponent;
  public var borderThickness:int;
  public var outerColor:uint;
  public var innerColor:uint;
  public var outerAlpha:int;
  public var innerAlpha:int;
  public var circleRadius:int;
  
  public function NetworkLayout()
  {
   super();
  }
  
        override protected function commitProperties():void
        {
   drawCircle();
        }
 
  private function drawCircle():void
  {
   graphics.clear();
   var thisWidth:int = measuredWidth;
   var thisHeight:int = measuredHeight;
   var middleX:int = thisWidth/2;
   var middleY:int = thisHeight/2;
   graphics.lineStyle(borderThickness, outerColor, outerAlpha);
   graphics.beginFill(innerColor, innerAlpha)
   graphics.drawCircle(middleX, middleY, circleRadius); 
  }
  
        override protected function measure():void
        {
         var rect:Rectangle = getBounds(container);
         measuredWidth = rect.width;
   measuredHeight = rect.height;
        }
      
 }
}
 

Jason Merrill 
Bank of America 
GT&O L&LD Solutions Design & Development 
eTools & Multimedia 

Bank of America Flash Platform Developer Community 




______________________________________________________________________
This communication is from Primal Pictures Ltd., a company registered in 
England and Wales with registration No. 02622298 and registered office: 4th 
Floor, Tennyson House, 159-165 Great Portland Street, London, W1W 5PA, UK. VAT 
registration No. 648874577.

This e-mail is confidential and may be privileged. It may be read, copied and 
used only by the intended recipient. If you have received it in error, please 
contact the sender immediately by return e-mail or by telephoning +44(0)20 7637 
1010. Please then delete the e-mail and do not disclose its contents to any 
person.
This email has been scanned for Primal Pictures by the MessageLabs Email 
Security System.
______________________________________________________________________

<<winmail.dat>>

Reply via email to