Josh,

Unfortunately, I also don't agree with the conclusion reached by 
that post. Take a look at the code for UIComponent yourself. It 
ships with Flex 2 or Flex 3. You can also search for addChild in the 
various components that directly inherit from UIComponent in the 
framework, you will see it used often.

Finally, take a look at any of the custom component I, Doug McCune 
of Eli Greenfield have published. You will notice that the majority 
use UIComponent directly.

Labriola

--- In [email protected], "Josh McDonald" <[EMAIL PROTECTED]> 
wrote:
>
> Not according to this post a day or so ago:
> 
> http://www.mail-
archive.com/[EMAIL PROTECTED]/msg93835.html
> 
> Can anybody from Adobe clear this up?
> 
> -J
> 
> On Mon, Jun 2, 2008 at 10:50 AM, Michael Labriola <[EMAIL PROTECTED]> 
wrote:
> 
> >
> > I see a few problems with the code. UIComponent does not have any
> > default implementations for sizing, display, etc. As Josh 
mentions,
> > Container does have these implementations, however, this is 
likely
> > overkill for what you need. However, UIComponent.addChild does 
add
> > things to the display list just fine....
> >
> > That said, your ScaleToFitContentHolder class extends 
UIComponent.
> > UIComponent does not have an implementation of updateDisplayList.
> > updateDisplayList is where a component sizes it's children.
> > Therefore anything you add to that content holder is not going 
to go
> > through the normal flex measurement and sizing process.
> >
> > You also call invalidateSize in your code quite a few times, 
which
> > would make sense, but your measure methods just call the super
> > class.... which sets it to 0 width and height unless you set
> > explicit values in the UIComponent default implementation.
> >
> > So, basically, UIComponent is fine, it will work well if you 
handle
> > these issues. If you want an implementation that handles these
> > things (and potentially does a lot of other stuff you don't need 
or
> > want) you could extend Container or one of its descendants.
> >
> > HTH,
> > Labriola
> >
> > --- In [email protected] <flexcomponents%
40yahoogroups.com>,
> > "Josh McDonald" <dznuts@>
> > wrote:
> >
> > >
> > > My Bad buddy, sorry!
> > >
> > > UIComponent.addChild is an inherited Flash thing, not part of
> > Flex, and when
> > > you use it if it works at all, things don't go into Flex's 
display
> > tree
> > > properly, and all sorts of pain ensues. Try extending Canvas
> > instead of
> > > UIComponent. The magic you need lives in Container.
> > >
> > > -J
> > >
> > >
> > > On Sun, Jun 1, 2008 at 7:31 AM, Richard Rodseth <rrodseth@>
> > wrote:
> > >
> > > > I'd love to wrap up this task. Does anyone have any other
> > suggestions?
> > > >
> > > >
> > > > On Tue, May 27, 2008 at 8:24 PM, Richard Rodseth
> > <rrodseth@<rrodseth%40gmail.com>>
> >
> > > > wrote:
> > > > > I'm afraid I'm still struggling with this. The classes 
below
> > work
> > > > > (more or less) if I supply a large button as "content", 
but if
> > I try a
> > > > > VBox it appears to shrink to nothing. Any ideas? Hopefully 
the
> > > > > formatting survived.
> > > > >
> > > > > <view:ScaleOrCenterView width="100%" height="100%" >
> > > > > <mx:VBox borderStyle="solid" borderColor="red"
> > > > > horizontalScrollPolicy="off" verticalScrollPolicy="off">
> > > > > <mx:Button label="Test" width="400" height="400"/>
> > > > > </mx:VBox>
> > > > > </view:ScaleOrCenterView>
> > > > >
> > > > >
> > > > > [DefaultProperty("content")]
> > > > > public class ScaleOrCenterView extends UIComponent
> > > > > {
> > > > > private var _contentHolder:ScaleToFitContentHolder = new
> > > > > ScaleToFitContentHolder();;
> > > > > private var _content:UIComponent;
> > > > >
> > > > > public function ScaleOrCenterView()
> > > > > {
> > > > > super();
> > > > > }
> > > > >
> > > > > override protected function createChildren():void {
> > > > > super.createChildren();
> > > > > this.addChild(_contentHolder);
> > > > > }
> > > > >
> > > > > [Inspectable]
> > > > > public function set content(value:UIComponent):void {
> > > > > if (_content != null) {
> > > > > _contentHolder.removeChild(_content);
> > > > > }
> > > > > _content = value;
> > > > > if (_content != null) {
> > > > > _contentHolder.addChild(_content);
> > > > > }
> > > > > this.invalidateSize();
> > > > > }
> > > > >
> > > > > override protected function updateDisplayList
> > (unscaledWidth:Number,
> > > > > unscaledHeight:Number):void
> > > > > {
> > > > > super.updateDisplayList(unscaledWidth, unscaledHeight);
> > > > >
> > > > > var contentWidth:Number = 
_content.getExplicitOrMeasuredWidth
> > ();
> > > > > var contentHeight:Number = 
_content.getExplicitOrMeasuredHeight
> > ();
> > > > >
> > > > > var xScale:Number = (unscaledWidth / contentWidth);
> > > > > var yScale:Number = (unscaledHeight / contentHeight);
> > > > >
> > > > > _contentHolder.setActualSize(unscaledWidth, 
unscaledHeight);
> > > > >
> > > > > _contentHolder.allowInvalidateSize = false;
> > > > > if (xScale < 1 || yScale < 1) {
> > > > > _contentHolder.scaleX = xScale
> > > > > _contentHolder.scaleY = yScale
> > > > > } else {
> > > > > _contentHolder.scaleX = 1.0;
> > > > > _contentHolder.scaleY = 1.0;
> > > > > }
> > > > > _contentHolder.allowInvalidateSize = true;
> > > > >
> > > > > }
> > > > >
> > > > > }
> > > > >
> > > > > public class ScaleToFitContentHolder extends UIComponent
> > > > > {
> > > > > public var allowInvalidateSize:Boolean = true;
> > > > >
> > > > > public function ScaleToFitContentHolder()
> > > > > {
> > > > > }
> > > > >
> > > > > override protected function measure():void
> > > > > {
> > > > > super.measure();
> > > > > }
> > > > >
> > > > > override public function invalidateSize():void
> > > > > {
> > > > > if (allowInvalidateSize)
> > > > > super.invalidateSize();
> > > > > }
> > > > >
> > > > > }
> > > > > On Mon, May 26, 2008 at 9:02 PM, Alex Harui 
<aharui@<aharui%
> > 40adobe.com>>
> > > > wrote:
> > > > >> One way is to block invalidateSize when scaling the 
child. See
> > > > >> ListBaseContentHolder
> > > > >>
> > > > >>
> > > > >>
> > > > >> ________________________________
> > > > >>
> > > > >
> > > >
> > > >
> > >
> > >
> > >
> > > --
> > > "Therefore, send not to know For whom the bell tolls. It tolls 
for
> > thee."
> > >
> > > :: Josh 'G-Funk' McDonald
> > > :: 0437 221 380 :: josh@
> > >
> >
> >  
> >
> 
> 
> 
> -- 
> "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