package
{
import flash.display.DisplayObject;
import flash.display.Graphics;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
public class Resizeable
{
private static var _instance:Resizeable;
private var pane:Sprite;
private var lAnchor:Sprite;
private var rAnchor:Sprite;
private var tAnchor:Sprite;
private var bAnchor:Sprite;
private var tlAnchor:Sprite;
private var trAnchor:Sprite;
private var blAnchor:Sprite;
private var brAnchor:Sprite;
private var host:Sprite;
private var acs:Number = 10;
public function Resizeable()
{
if(Resizeable._instance){
throw new Error("this is a singleton class");
}else{
this.pane = new Sprite();
for(var i:int=1; i<=8; i++){
var anchr:Sprite = new Sprite();
anchr.name = "anchr"+i;
anchr.addEventListener(MouseEvent.MOUSE_OVER, anchorMouseOverHandler);
this.pane.addChild(anchr);
anchr.graphics.clear();
anchr.graphics.lineStyle(1,0xFFFFFF);
anchr.graphics.beginFill(0x000000,1);
anchr.graphics.drawRect(0, 0, acs, acs);
anchr.graphics.endFill();
}
this.pane.addEventListener(Event.ADDED, paneAddedHandler);
// this.lAnchor = new Sprite();
// this.pane.addChild(this.lAnchor);
// this.rAnchor = new Sprite();
// this.pane.addChild(this.rAnchor);
// this.tAnchor = new Sprite();
// this.pane.addChild(this.tAnchor);
// this.bAnchor = new Sprite();
// this.pane.addChild(this.bAnchor);
// this.tlAnchor = new Sprite();
// this.pane.addChild(this.tlAnchor);
// this.trAnchor = new Sprite();
// this.pane.addChild(this.trAnchor);
// this.blAnchor = new Sprite();
// this.pane.addChild(this.blAnchor);
// this.brAnchor = new Sprite();
// this.pane.addChild(this.brAnchor);
}
}
public static function getInstance():Resizeable{
if(!Resizeable._instance){
Resizeable._instance = new Resizeable();
}
return Resizeable._instance;
}
public function init(host:Sprite):void{
host.addEventListener(MouseEvent.MOUSE_DOWN, hostMouseDownHandler);
}
private function anchorMouseOverHandler(e:Event):void{
}
private function paneAddedHandler(e:Event):void{
this.updateResizer();
}
private function updateResizer():void{
var parent:Sprite = this.pane.parent as Sprite;
var w:Number = parent.width;
var h:Number = parent.height;
var g:Graphics = this.pane.graphics;
g.lineStyle(1);
g.beginFill(0xFFFFFFF,0.2);
g.drawRect(0,0,w,h);
g.endFill();
this.pane.x = 0;
this.pane.y = 0;
var anchr:Sprite;
anchr = this.pane.getChildByName("anchr1") as Sprite;
anchr.x = anchr.y = -acs/2;
anchr = this.pane.getChildByName("anchr2") as Sprite;
anchr.x = (w-acs)/2;
anchr.y = -acs/2;
anchr = this.pane.getChildByName("anchr3") as Sprite;
anchr.x = w - acs/2;
anchr.y = -acs/2;
anchr = this.pane.getChildByName("anchr4") as Sprite;
anchr.x = w - acs/2;
anchr.y = (h-acs)/2;
anchr = this.pane.getChildByName("anchr5") as Sprite;
anchr.x = w - acs/2;
anchr.y = h - acs/2;
anchr = this.pane.getChildByName("anchr6") as Sprite;
anchr.x = (w-acs)/2;
anchr.y = h - acs/2;
anchr = this.pane.getChildByName("anchr7") as Sprite;
anchr.x = -acs/2;
anchr.y = h - acs/2;
anchr = this.pane.getChildByName("anchr8") as Sprite;
anchr.x = -acs/2;
anchr.y = (h-acs)/2;
}
private function hostMouseDownHandler(e:MouseEvent):void{
var hst:Sprite = e.currentTarget as Sprite;
if(!this.host){
hst.stage.addEventListener(MouseEvent.MOUSE_DOWN, stageMouseDownHandler);
}
if(hst!=this.host){
this.host = hst;
this.host.addChild(this.pane);
}
}
private function stageMouseDownHandler(e:MouseEvent):void{
var target:Sprite = e.target as Sprite;
if(this.host && !this.ainb(target, this.host)){
this.host.stage.removeEventListener(MouseEvent.MOUSE_DOWN, stageMouseDownHandler);
this.host.removeChild(this.pane);
this.host = null;
}
}
private function ainb(a:DisplayObject, b:DisplayObject):Boolean{
if(!a || !b){return false;}
var p:DisplayObject = a.parent;
while(p!=b && p!=null){
p = p.parent;
}
return p==null?false:true;
}
}
}