Yeah, the circle is just an example - really I would be calling another
class which draw a series of circles, lines, textfields, etc. in order
to draw a complex network based on a set of data. The circle was just
to get the concept started of fitting graphics properly inside a Panel
component, thanks.
Am I headed down the right road by passing a reference to the parent
container (the panel in this case) and using that as the argument
required in getBounds()?
Jason Merrill
Bank of America
GT&O L&LD Solutions Design & Development
eTools & Multimedia
Bank of America Flash Platform Developer Community
________________________________
From: [email protected]
[mailto:[EMAIL PROTECTED] On Behalf Of Alex Harui
Sent: Friday, January 18, 2008 12:30 AM
To: [email protected]
Subject: RE: [flexcoders] Drawn objects acting as children to
components?
Thinking about this some more, you can remove commitProperties
if you can determine the bounds some other way besides actually drawing.
For a simple circle, the radius tells all and measure wouldn't call
getBounds() and just set measuredWIdth/Height to 2 * circleRadius +
borderThickness. Then in updateDL, you would actually do the drawing
and use 1/2 the min of unscaledWidht/Height to determine the radius, or
draw an ellipse, or whatever you think is right.
If you are drawing something really complex, then I would draw
it in commitProperties so you can call getBounds during measure. It
sort of depends on whether and how you plan to handling resizing and
aspect ratios.
________________________________
From: [email protected]
[mailto:[EMAIL PROTECTED] On Behalf Of Jim Hayes
Sent: Thursday, January 17, 2008 8:05 PM
To: [email protected]
Subject: RE: [flexcoders] Drawn objects acting as children to
components?
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]
<mailto:flexcoders%40yahoogroups.com> on behalf of Merrill, Jason
Sent: Fri 18/01/2008 01:42
To: [email protected]
<mailto:flexcoders%40yahoogroups.com>
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.
__________________________________________________________