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 }