1  
     8   
     9  import com.sekati.core.CoreObject;
    10  import com.sekati.events.Dispatcher;
    11  import com.sekati.events.Event;
    12  import com.sekati.events.FramePulse;
    13  import com.sekati.geom.Point;
    14  import com.sekati.utils.Delegate;
    15  
    16  
    20  class com.sekati.display.StageDisplay extends CoreObject {
    21  
    22  	private static var _instance:StageDisplay;
    23  	public static var onStageResizeEVENT:String = "onStageResize";
    24  	public static var onStageResizeCompleteEVENT:String = "onStageResizeComplete";
    25  	public static var onStageFullScreenEVENT:String = "onStageFullScreen";
    26  	public static var onStageReadyEVENT:String = "onStageReady";
    27  	private static var _resizeDelayMs:Number = 500;
    28  	private static var _resizeIntervalId:Number;		
    29  
    30  	
    33  	private function StageDisplay() {
    34  		super( );
    35  		Stage.addListener( this );
    36  		FramePulse.$.addFrameListener( this );
    37  	}
    38  
    39  	
    43  	public static function getInstance():StageDisplay {
    44  		if (!_instance) _instance = new StageDisplay( );
    45  		return _instance;
    46  	}
    47  
    48  	
    52  	public static function get $():StageDisplay {
    53  		return StageDisplay.getInstance( );	
    54  	}
    55  
    56  	
    60  	 
    61  	public function onResize():Void {
    62  		if (_resizeIntervalId != null) clearResizeInt( );
    63  		_resizeIntervalId = setInterval( Delegate.create( this, onResizeComplete ), _resizeDelayMs );
    64  		Dispatcher.$.dispatchEvent( new Event( onStageResizeEVENT, _instance, {_width:_width, _height:_height} ) );	
    65  	}
    66  
    67  	
    71  	public function onResizeComplete():Void {
    72  		trace( "@@@ onResizeComplete Fired! (" + _resizeDelayMs + "ms expired since last resize)" );
    73  		Dispatcher.$.dispatchEvent( new Event( onStageResizeCompleteEVENT, _instance, {_width:_width, _height:_height} ) );
    74  		clearResizeInt( );
    75  	}	
    76  
    77  	
    81  	public function onFullScreen(bFull:Boolean):Void {
    82  		trace( "@@@ onFullScreen Fired! (" + bFull + ")" );
    83  		Dispatcher.$.dispatchEvent( new Event( onStageFullScreenEVENT, _instance, {isFullscreen:bFull} ) );
    84  	}
    85  
    86  	
    90  	private function clearResizeInt():Void {
    91  		clearInterval( _resizeIntervalId );
    92  		_resizeIntervalId = null;		
    93  	}
    94  
    95  	
    99  	private function _onEnterFrame():Void {
   100  		if (isReady) {
   101  			FramePulse.$.removeFrameListener( this );
   102  			Dispatcher.$.dispatchEvent( new Event( onStageReadyEVENT, _instance, {isReady:isReady} ) );	
   103  		}
   104  	}	
   105  
   106  	
   110  	public function get isReady():Boolean {
   111  		return (_width > 0 && _height > 0);	
   112  	}
   113  
   114  	
   118  	public function get _width():Number {
   119  		return Stage.width;	
   120  	}
   121  
   122  	
   126  	public function get _height():Number {
   127  		return Stage.height;
   128  	}
   129  
   130  	
   134  	public function get _size():Point {
   135  		return new Point( _width, _height );	
   136  	}
   137  
   138  	
   142  	public function get _centerx():Number {
   143  		return Math.round( _width / 2 );
   144  	}
   145  
   146  	
   150  	public function get _centery():Number {
   151  		return Math.round( _height / 2 );
   152  	}
   153  
   154  	
   158  	public function get _center():Point {
   159  		return new Point( _centerx, _centery );	
   160  	}
   161  
   162  		 
   166  	public function get _fullscreen():Boolean {
   167  		return (Stage["displayState"] == "fullScreen") ? true : false;
   168  	}
   169  
   170  	
   174  	public function set _fullscreen(b:Boolean):Void {
   175  		var state:String = (!b) ? "normal" : "fullScreen";
   176  		Stage["displayState"] = state;
   177  	}
   178  
   179  	
   183  	public function toggleFullScreen():Void {	
   184  		_fullscreen = !_fullscreen;
   185  	}
   186  
   187  	
   191  	public function destroy():Void {
   192  		FramePulse.$.removeFrameListener( this );
   193  		super.destroy( );
   194  	}
   195  }