Класс для пропорционального вписывания и центрирования MovieClip'а (или любого другого DisplayObject) в прямоугольнике заданных размеров
Небольшой класс позволяет пропорционально изменить размеры DisplayObject'а так, чтобы он поместился в отведённую прямоугольную область. Специальным образом обрабатываются объекты классов Video и Loader, для них можно получить оригинальные размеры с помощью специальных свойств. Дополнительно есть простенькая функция для центрирования DisplayObject'ов.
package crisp.routine
{
import flash.display.*;
import flash.media.Video;
public class Fitter
{
public static function resize(displayObject:DisplayObject, maxWidth:Number, maxHeight:Number, originalWidth:Number = NaN, originalHeight:Number = NaN, stretch:Boolean = false):void
{
if (isNaN(originalWidth) && isNaN(originalHeight))
{
if (displayObject is Video)
{
originalWidth = Video(displayObject).videoWidth;
originalHeight = Video(displayObject).videoHeight;
}
else if (displayObject is Loader && Loader(displayObject).content != null)
{
originalWidth = Loader(displayObject).content.width;
originalHeight = Loader(displayObject).content.height;
}
else
{
originalWidth = displayObject.width / displayObject.scaleX;
originalHeight = displayObject.height / displayObject.scaleY;
}
}
if (!stretch)
{
if (maxWidth > originalWidth && maxHeight > originalHeight)
{
displayObject.width = originalWidth;
displayObject.height = originalHeight;
return;
}
}
var originalProportions:Number = originalWidth / originalHeight;
var currentProportions:Number = maxWidth / maxHeight;
if (originalProportions >= currentProportions)
{
displayObject.width = maxWidth;
displayObject.height = maxWidth / originalProportions;
}
else
{
displayObject.height = maxHeight;
displayObject.width = maxHeight * originalProportions;
}
}
public static function center(displayObject:DisplayObject, maxWidth:Number, maxHeight:Number, objectWidth:Number = NaN, objectHeight:Number = NaN, objectIsCentered:Boolean = false):void
{
objectWidth = !isNaN(objectWidth) ? objectWidth : displayObject.width;
objectHeight = !isNaN(objectHeight) ? objectHeight : displayObject.height;
if (objectIsCentered)
{
displayObject.x = maxWidth / 2;
displayObject.y = maxHeight / 2;
}
else
{
displayObject.x = maxWidth / 2 - objectWidth / 2;
displayObject.y = maxHeight / 2 - objectHeight / 2;
}
}
}
}
