Figured it out. Scaling needs to happen in layoutContents()
instead of commitCurrentState()
.
Those two function should look like this:
/**
* @private
*/
override protected function commitCurrentState():void
{
super.commitCurrentState();
borderClass = getBorderClassForCurrentState();
if (!(_border is borderClass))
changeFXGSkin = true;
// update borderClass and background
invalidateDisplayList();
}
/**
* @private
*/
override protected function layoutContents(unscaledWidth:Number, unscaledHeight:Number):void
{
super.layoutContents(unscaledWidth, unscaledHeight);
// size the FXG background
if (changeFXGSkin)
{
changeFXGSkin = false;
if (_border)
{
removeChild(_border);
_border = null;
}
if (borderClass)
{
_border = new borderClass();
addChildAt(_border, 0);
}
}
layoutBorder(unscaledWidth, unscaledHeight);
//reduce icon size in "down" state
if(currentState == "down") {
var iconDisplay:DisplayObject = getIconDisplay();
if(iconDisplay) {
setElementSize(iconDisplay, iconDisplay.width *.85, iconDisplay.height *.85);
setElementPosition(iconDisplay, (unscaledWidth - iconDisplay.width) / 2, (unscaledHeight - iconDisplay.height) / 2);
}
}
}