package {
import com.adobe.viewsource.ViewSource;
import com.cb.DistortImage;
import com.cb.DistortVO;
import flash.display.Sprite;
import flash.display.StageAlign;
import flash.display.StageScaleMode;
import flash.events.MouseEvent;
import gs.TweenLite;
import gs.easing.Cubic;
import mx.core.BitmapAsset;
[SWF(pageTitle="Image Distortion", backgroundColor="#BBBBBB", frameRate="30", width="350", height="300")]
public class ImageDistortion extends Sprite
{
[Embed(source="/assets/glacier.jpg")]
private var Background: Class;
private var _background:BitmapAsset = new Background();
private var _image:Sprite;
private var _d:DistortImage;
private var _dVO:DistortVO;
private var _tl:Sprite;
private var _tr:Sprite;
private var _bl:Sprite;
private var _br:Sprite;
public function ImageDistortion()
{
ViewSource.addMenuItem(this, "srcview/index.html");
stage.align = StageAlign.TOP_LEFT;
stage.scaleMode = StageScaleMode.NO_SCALE;
_image = new Sprite();
_image.addChild(_background);
this.addChild(_image);
_d = new DistortImage( _image, 2, 2 );
_image.removeChild(_background);
_dVO = new DistortVO();
_dVO.data = _image;
_tl = buildMarker();
_tl.x = _image.x + 25;
_tl.y = _image.y + 50;
this.addChild(_tl);
_tr = buildMarker();
_tr.x = _image.x + _image.width + 25;
_tr.y = _image.y + 50;
this.addChild(_tr);
_bl = buildMarker();
_bl.x = _image.x + _image.width + 25;
_bl.y = _image.y + _image.height + 50;
this.addChild(_bl);
_br = buildMarker();
_br.x = _image.x + 25;
_br.y = _image.y + _image.height + 50;
this.addChild(_br);
clickHandler();
}
private function buildMarker():Sprite
{
var result:Sprite = new Sprite();
result.graphics.beginFill(0xFF0000, 0.7);
result.graphics.drawRect(-5,-5,10,10);
result.buttonMode = true;
result.useHandCursor = true;
result.addEventListener(MouseEvent.MOUSE_DOWN, downHandler, false, 0, true);
result.addEventListener(MouseEvent.MOUSE_UP, upHandler, false, 0, true);
result.addEventListener(MouseEvent.CLICK, clickHandler, false, 0, true);
return result;
}
private function downHandler(event:MouseEvent):void
{
(event.currentTarget as Sprite).startDrag();
}
private function upHandler(event:MouseEvent):void
{
(event.currentTarget as Sprite).stopDrag();
}
private function clickHandler(event:MouseEvent = null):void
{
TweenLite.to(_dVO, 0.5, {x0:_tl.x, y0:_tl.y, x1:_tr.x, y1:_tr.y, x2:_bl.x, y2:_bl.y, x3:_br.x, y3:_br.y, onUpdate:applyMatrix, onUpdateParams:[_dVO], ease:Cubic.easeOut});
}
private function applyMatrix($dVO:DistortVO):void
{
_d.setTransform($dVO.x0, $dVO.y0, $dVO.x1, $dVO.y1, $dVO.x2, $dVO.y2 ,$dVO.x3, $dVO.y3);
}
}
}