
Код AS3:
<mx:UIComponent xmlns:mx="http://www.adobe.com/2006/mxml"
creationComplete="creationCompleteHandler(event)">
<mx:filters>
<mx:BlurFilter id="blurFilter" blurX="16" blurY="16"/>
</mx:filters>
<mx:Script>
<![CDATA[
import mx.controls.Alert;
import mx.events.FlexEvent;
private var shape:Shape;
private const DARK_COLOR:uint = 0x000000;
private const DARK_ALPHA:Number = 0.7;
private const DARK_BLUR:uint = 16;
// Параметром передается ХМЛ список окон
// координаты и размер
public function setNewRects(rects:XMLList):void
{
shape.graphics.clear();
shape.graphics.lineStyle( 0, DARK_COLOR, 0 );
shape.graphics.beginFill( DARK_COLOR, DARK_ALPHA );
var squareCommands:Vector.<int> = new Vector.<int>();
var squareCoord:Vector.<Number> = new Vector.<Number>();
// 1 - MoveTo, 2 - LineTo
squareCommands.push( 1, 2, 2 ,2, 2)
// Рисуем Большой квадрат, основное затемнение на всё окно, в котором будут резаться окна поменьше
squareCoord.push( 0,0, 750,0, 750,600, 0,600, 0,0);
// Пробегаемся по списку мелких окон
// важно чтоб они были в одном массиве данных с большим квадратом, иначе не будет "вырезки"
for each ( var rect:XML in rects )
{
var _x:int = rect.@x;
var _y:int = rect.@y;
var _width:int = rect.@width;
var _height:int = rect.@height;
squareCommands.push( 1, 2, 2 ,2, 2 );
squareCoord.push( _x, _y,
_x + _width, _y,
_x + _width, _y + _height,
_x, _y + _height,
_x, _y );
}
shape.graphics.drawPath(squareCommands, squareCoord);
shape.graphics.endFill();
}
protected function creationCompleteHandler(event:FlexEvent):void
{
shape = new Shape();
this.addChild(shape);
}
]]>
</mx:Script>
</mx:UIComponent>