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 <[EMAIL PROTECTED]> wrote:
> One way is to block invalidateSize when scaling the child. See
> ListBaseContentHolder
>
>
>
> ________________________________
>