Resizeable.as

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;
  }

 }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值