Hi,
For one I see you are missing;
graphics.clear();
Try that, I don't think you are erasing the old color.
Peace, Mike
PS hehe I was thinking about something else when I responded and forgot the
internal icon is typed IFlexDisplayObject.
On 4/27/07, Paul Whitelock <[EMAIL PROTECTED]> wrote:
Well here's the deal. I've created an simple icon class that draws a
red square like this:
package components {
import mx.skins.ProgrammaticSkin;
public class Icon extends ProgrammaticSkin {
private var iconColor:uint = 0xFF0000;
public function Icon() {
super();
}
public function set color(value:uint):void {
iconColor = value;
invalidateDisplayList();
}
override public function get measuredHeight():Number {
return 16;
}
override public function get measuredWidth():Number {
return 16;
}
override protected function
updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void {
super.updateDisplayList(unscaledWidth, unscaledHeight);
graphics.beginFill(iconColor, 1);
graphics.drawRect(0, 0, unscaledWidth, unscaledHeight);
graphics.endFill();
}
}
}
I can place this icon in a Panel like this:
<mx:Panel id="myPanel" titleIcon="{Icon}" ... >
So far so good -- the red square is drawn in the top left corner of
the title area and it appears that I can call the color setter
function like this:
myPanel.titleIcon.color = 0x00FF00;
But when I do this the icon color never changes. It appears that the
calling invalidateDisplayList() never results in a call to
updateDisplayList().
Any ideas?
Paul
--- In [email protected] <flexcoders%40yahoogroups.com>, Paul J
DeCoursey <[EMAIL PROTECTED]> wrote:
>
> I've been able to get it to work for buttons and the like by extending
> ProgrammaticSkin and passing in the class. I've never even used the
> icon on a TitleWindow to even know how it's supposed to work. It
should
> work, because everything is a class, but it might not know what to do
> with it.
>
> Paul
>
> Michael Schmalle wrote:
> > Hi,
> >
> > The simple answer is no.
> >
> > Why?
> >
> > The titleIcon class is of type Class. This class cannot be subclassed.
> >
> > My advice to you is create a subclass of TitleWindow and create the
> > method
> > you are talking about there.
> >
> > Since you cannot load icons at runtime, you could create a simple
> > iconLibraryModule that held your extra icons and then the method you
> > created
> > in the subclass would then load the icons from the icon library on
demand
> > through some type of string call into the library.
> >
> > Conclusion, there is no way to create an image like component in
> > components
> > with properties of type Class. In my custom window, I wrap the
icon in a
> > UIComponent, this way when I am rendering the icon, I have 2
options. The
> > icon property is the 'source' but not the actual instance that is
> > manipulated in the component UI.
> >
> > Peace, Mike
> >
> > On 4/27/07, Paul Whitelock <[EMAIL PROTECTED]> wrote:
> >>
> >> Would anyone know if there is a way to create an component that
can be
> >> used as an icon for any component that accepts an icon?
> >>
> >> For example, TitleWindow accepts a titleIcon. I would like to create
> >> an AS3 class that I can instantiate and specify for the TitleWindow's
> >> titleIcon. As conditions change in the window, I'd like to be able to
> >> make a function call to the icon class and have it update the icon
> >> displayed by the TitleWindow. The class would programatically create
> >> the icon (i.e., it would not use an embedded asset).
> >>
> >> Ideally the icon component should be able to be used for any
component
> >> that accepts an icon.
> >>
> >> Any idea if this can be done and if so where I should start
looking to
> >> create such a component? Thanks!
> >>
> >> Paul
> >>
> >>
> >>
> >
> >
> >
>
--
Teoti Graphix
http://www.teotigraphix.com
Blog - Flex2Components
http://www.flex2components.com
You can find more by solving the problem then by 'asking the question'.