Здравствуйте я совсем что то запутался. До этого считал что после применения маски, размеры контейнера имеют размеры маски. Но тут после добавления контента превышающего размеры контейнера. Контейнер имеет размеры равные контенту. Второе путание связано с StageScaleMode.NO_SCALE, до этого считал что достаточно указать в конструкторе главного класса stage.scaleMode = StageScaleMode.NO_SCALE и все контейнеры будут иметь неизменяемые размеры. Все представлено в коде:

Код AS3:
package
{
import flash.display.Shape;
import flash.display.Sprite;
import flash.display.StageScaleMode;
import flash.events.Event;
import flash.geom.Rectangle;
public class TestMask extends Sprite
{
//private
private var __container:Sprite;
private var __mask:Shape;
private var __child:Shape;
private var __container2:Sprite;
private var innerContainer:Sprite;
private var __child2:Shape;
private var __clipRect:Rectangle;
public function TestMask()
{
init();
}
//initialization
private function init():void {
// stage.scaleMode = StageScaleMode.NO_SCALE;
createContainer();
createMask();
createChild();
makeHierarchy();
}
private function makeHierarchy():void {
__container.addChild( __child );
__container.addChild( __mask );
__container.mask = __mask;
addChild( __container );
__clipRect = new Rectangle( 0, 0, 50, 50 );
innerContainer = new Sprite();
innerContainer.scrollRect = __clipRect;
innerContainer.addChild( __child2 );
// innerContainer.height = 50;
__container2.addChild( innerContainer );
addChild( __container2 );
}
//private methods
private function createContainer():void {
__container = new Sprite();
__container.addEventListener( Event.ADDED_TO_STAGE, addedChildListener );
__container2 = new Sprite();
__container2.addEventListener( Event.ADDED_TO_STAGE, addedChildListener2 );
__container2.x = 150;
}
private function createMask():void {
__mask = new Shape();
__mask.graphics.lineStyle( 0, 0x000000, 0 );
__mask.graphics.beginFill( 0x000000, 1 );
__mask.graphics.drawRect( 0, 0, 50, 50 );
__mask.graphics.endFill();
}
private function createChild():void {
__child = new Shape();
__child.graphics.lineStyle( 0, 0xcccccc, 0 );
__child.graphics.beginFill( 0xcccccc, 1 );
__child.graphics.drawRect( 0, 0, 100, 100 );
__child.graphics.endFill();
__child2 = new Shape();
__child2.graphics.lineStyle( 0, 0xcccccc, 0 );
__child2.graphics.beginFill( 0xcccccc, 1 );
__child2.graphics.drawRect( 0, 0, 100, 100 );
__child2.graphics.endFill();
}
//events
private function addedChildListener( e:Event ):void{
graphics.lineStyle( 1, 0xff0000, 1 );
graphics.drawRect( 0, 0, __container.width, __container.height );
graphics.endFill();
}
private function addedChildListener2( e:Event ):void{
__container2.stage.scaleMode = StageScaleMode.NO_SCALE;
innerContainer.height = 50;
graphics.lineStyle( 1, 0xff0000, 1 );
graphics.drawRect( __container2.x, __container2.y, __container2.width, __container2.height );
graphics.endFill();
}
}
}
на данный момент если раскоментить строку stage.scaleMode = с и изменить размеры контейнера, контейнер изменит размер а контент в нем деформируется. Если же не ставить stage.scaleMode = StageScaleMode.NO_SCALE; а добавить __container2.stage.scaleMode = StageScaleMode.NO_SCALE; в обработчик события addedChildListener2() контейнер примет размеры маски. Кто может объяснить в чем дело? Или есть какая информация по данным вопросам. Буду очень благодарен.