// ========================================================== // // Gaze.as // Copyright 2011 jasu All Rights Reserved. // license : free // // use: // addChild( new Gaze(true, "http://jasu.tistory.com") ); // // ========================================================== package { import flash.system.System; import flash.display.Sprite; import flash.display.StageDisplayState; import flash.events.Event; import flash.events.MouseEvent; import flash.events.FullScreenEvent; import flash.events.ContextMenuEvent; import flash.text.TextField; import flash.text.TextFormat; import flash.text.TextFieldAutoSize; import flash.text.AntiAliasType; import flash.net.navigateToURL; import flash.net.URLRequest; import flash.geom.Rectangle; import flash.utils.getTimer; public class Gaze extends Sprite { public static const VERSION:String = "0.6.1"; private const EMPTY : String = "empty"; private var _info : Sprite; private var _fpsPrevTxt : TextField; private var _memPrevTxt : TextField; private var _fpsTxt : TextField; private var _memTxt : TextField; private var _fps : int; private var _mem : Number; private var _timer : int; private var _tPrev : int; private var _fullMode : Boolean; private var _url : String; private var _upBtn : Button; private var _downBtn : Button; private var _urlBtn : Button; private var _fullBtn : Button; private var _normalBtn : Button; private var _bgColor:uint = 0x080808; public function Gaze(inFullscreenMode:Boolean=false, inOriginalUrl:String="empty"):void { _fullMode = inFullscreenMode; _url = inOriginalUrl; addEventListener(Event.ADDED_TO_STAGE, onAddedHandler); addEventListener(Event.REMOVED_FROM_STAGE, onRemoveHandler); } private function onAddedHandler(e:Event) : void { _info = new Sprite(); drawInfoBGRect(86, 27); _fpsPrevTxt = getDefaultTextField(); _memPrevTxt = getDefaultTextField(); _fpsTxt = getDefaultTextField(); _memTxt = getDefaultTextField(); _fpsPrevTxt.htmlText = "H FPS - "; _memPrevTxt.htmlText = "H MEMORY - "; _fpsPrevTxt.x = 35; _info.addChild(_fpsPrevTxt); _memPrevTxt.x = 35; _memPrevTxt.y = 11; _info.addChild(_memPrevTxt); _fpsTxt.x = int(_fpsPrevTxt.x+_fpsPrevTxt.width)-1; _fpsTxt.textColor = 0xCC0000; _info.addChild(_fpsTxt); _memTxt.x = int(_memPrevTxt.x+_memPrevTxt.width)-1; _memTxt.y = 11; _memTxt.textColor = 0xCC0000; _info.addChild(_memTxt); ///////////////////////// _upBtn= createButton("+", 16, 0); _info.addChild(_upBtn); _downBtn = createButton("-", 16, 14); _info.addChild(_downBtn); _urlBtn = createButton("U", 0, 0); _info.addChild(_urlBtn); _fullBtn = createButton("F", 0, 14); _normalBtn = createButton("N", 0, 14); _info.addChild(_normalBtn); _info.addChild(_fullBtn); stage.addEventListener(FullScreenEvent.FULL_SCREEN, fullScreenRedraw); stage.addEventListener(Event.ENTER_FRAME, update); setButtonEnabled(_fullBtn, _fullMode); if(_url == EMPTY) setButtonEnabled(_urlBtn, false); addChild(_info); } private function onRemoveHandler(e:Event) : void{ stage.removeEventListener(FullScreenEvent.FULL_SCREEN, fullScreenRedraw); stage.removeEventListener(Event.ENTER_FRAME, update); while(_info.numChildren > 0) _info.removeChildAt(0); _info.graphics.clear(); removeChild(_info); } private function setButtonEnabled(inButton:Button, inValue:Boolean):void { if (inValue) { setBtnEvent(inButton, true); inButton.alpha = 1; }else { setBtnEvent(inButton, false); inButton.alpha = 0.3; if(inButton.type == "F"){ _normalBtn.visible = false; } } } private function update(e:Event) : void{ _timer = getTimer(); if( _timer - 500 > _tPrev ) reset(); _fps++; } private function reset():void{ _tPrev = _timer; _mem = Number( ( System.totalMemory * 0.000001 ).toFixed(2) ); _fpsTxt.text = (_fps << 1 ) + " / " + stage.frameRate+" "; _memTxt.text = String(_mem)+" "; var memMax:int = _memTxt.x + _memTxt.width-26; drawInfoBGRect(memMax, 27); _fps = -1; } private function drawInfoBGRect(inWidth:int, inHeight:int):void{ _info.graphics.clear(); _info.graphics.beginFill(_bgColor); _info.graphics.drawRect( 32, 0, inWidth, inHeight ); _info.graphics.endFill(); } private function getDefaultTextField():TextField{ var tf:TextFormat = new TextFormat("Verdana", 9 ); var txt:TextField = new TextField(); txt.mouseEnabled = false; txt.selectable = false; txt.multiline = false; txt.antiAliasType = AntiAliasType.NORMAL; txt.autoSize = TextFieldAutoSize.LEFT; txt.defaultTextFormat = tf; return txt; } private function createButton(inType:String, inX:int, inY:int):Button { var btn:Button = new Button(inType); setBtnEvent(btn, true); btn.x = inX; btn.y = inY; return btn; } private function setBtnEvent(inButton:Button, inValue:Boolean):void { if (inValue) { inButton.buttonMode = true; inButton.addEventListener(MouseEvent.MOUSE_OVER, onOverButtonHandler); inButton.addEventListener(MouseEvent.MOUSE_OUT, onOutButtonHandler); inButton.addEventListener(MouseEvent.MOUSE_DOWN, onClickButtonHandler); }else { inButton.buttonMode = false; inButton.removeEventListener(MouseEvent.MOUSE_OVER, onOverButtonHandler); inButton.removeEventListener(MouseEvent.MOUSE_OUT, onOutButtonHandler); inButton.removeEventListener(MouseEvent.MOUSE_DOWN, onClickButtonHandler); } } private function onClickButtonHandler(e:MouseEvent):void { var btn:Button = e.currentTarget as Button; switch(btn.type) { case "U" : navigateToURL(new URLRequest(_url), "_blank"); break; case "F" : case "N" : switch(stage.displayState) { case StageDisplayState.NORMAL: stage.displayState = StageDisplayState.FULL_SCREEN; break; case StageDisplayState.FULL_SCREEN: default: stage.displayState = StageDisplayState.NORMAL; break; } break; case "+" : stage.frameRate++; reset(); break; case "-" : stage.frameRate--; reset(); } } private function onOutButtonHandler(e:MouseEvent):void { var btn:Button = e.currentTarget as Button; btn.setOver(false); } private function onOverButtonHandler(e:MouseEvent):void { var btn:Button = e.currentTarget as Button; btn.setOver(true); } private function fullScreenRedraw(e:FullScreenEvent):void { if(e.fullScreen) { _fullBtn.visible = false; _normalBtn.visible = true; }else { _fullBtn.visible = true; _normalBtn.visible = false; } } } } import flash.display.BitmapData; import flash.geom.Rectangle; import flash.geom.Matrix; import flash.display.Graphics; import flash.display.Shape; import flash.display.Sprite; import flash.events.Event; class Button extends Sprite { private var _type:String; private var _overBtn:Shape; private var _outBtn:Shape; private var _bgColor:uint = 0x080808; function Button(inButtonType:String) { _type = inButtonType; _outBtn = getLabelRect(0xC8C8C8, "out"); _overBtn = getLabelRect(0xFF6600, "over"); addChild(_outBtn); addChild(_overBtn); setOver(false); addEventListener(Event.REMOVED_FROM_STAGE, destroy); } public function get type():String{ return _type; } public function setOver(inValue:Boolean):void{ _overBtn.visible = inValue; } private function destroy(e:Event):void{ while(numChildren > 0) removeChildAt(0); } private function getLabelRect(inColor:uint, inType:String):Shape{ var shape:Shape = new Shape(); var w:int = 16; var h:int = 14; var x:uint; var O:uint; var z:uint = 0x00; if(inType == "over"){ x=0xff000000+inColor; O=0xff000000+_bgColor; }else{ x=0xff000000+_bgColor; O=0xff000000+inColor; } var arrTile:Array = new Array(); switch(_type){ case "U" : arrTile[00]=[x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,z]; arrTile[01]=[x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,z]; arrTile[02]=[x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,z]; arrTile[03]=[x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,z]; arrTile[04]=[x,x,x,x,x,O,x,x,x,O,x,x,x,x,x,z]; arrTile[05]=[x,x,x,x,x,O,x,x,x,O,x,x,x,x,x,z]; arrTile[06]=[x,x,x,x,x,O,x,x,x,O,x,x,x,x,x,z]; arrTile[07]=[x,x,x,x,x,O,x,x,x,O,x,x,x,x,x,z]; arrTile[08]=[x,x,x,x,x,x,O,O,O,x,x,x,x,x,x,z]; arrTile[09]=[x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,z]; arrTile[10]=[x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,z]; arrTile[11]=[x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,z]; arrTile[12]=[x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,z]; arrTile[13]=[z,z,z,z,z,z,z,z,z,z,z,z,z,z,z,z]; break; case "F" : arrTile[00]=[x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,z]; arrTile[01]=[x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,z]; arrTile[02]=[x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,z]; arrTile[03]=[x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,z]; arrTile[04]=[x,x,x,x,x,O,O,O,O,O,x,x,x,x,x,z]; arrTile[05]=[x,x,x,x,x,O,x,x,x,x,x,x,x,x,x,z]; arrTile[06]=[x,x,x,x,x,O,O,O,O,x,x,x,x,x,x,z]; arrTile[07]=[x,x,x,x,x,O,x,x,x,x,x,x,x,x,x,z]; arrTile[08]=[x,x,x,x,x,O,x,x,x,x,x,x,x,x,x,z]; arrTile[09]=[x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,z]; arrTile[10]=[x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,z]; arrTile[11]=[x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,z]; arrTile[12]=[x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,z]; arrTile[13]=[z,z,z,z,z,z,z,z,z,z,z,z,z,z,z,z]; break; case "N" : arrTile[00]=[x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,z]; arrTile[01]=[x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,z]; arrTile[02]=[x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,z]; arrTile[03]=[x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,z]; arrTile[04]=[x,x,x,x,x,O,x,x,x,O,x,x,x,x,x,z]; arrTile[05]=[x,x,x,x,x,O,O,x,x,O,x,x,x,x,x,z]; arrTile[06]=[x,x,x,x,x,O,x,O,x,O,x,x,x,x,x,z]; arrTile[07]=[x,x,x,x,x,O,x,x,O,O,x,x,x,x,x,z]; arrTile[08]=[x,x,x,x,x,O,x,x,x,O,x,x,x,x,x,z]; arrTile[09]=[x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,z]; arrTile[10]=[x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,z]; arrTile[11]=[x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,z]; arrTile[12]=[x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,z]; arrTile[13]=[z,z,z,z,z,z,z,z,z,z,z,z,z,z,z,z]; break; case "+" : arrTile[00]=[x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,z]; arrTile[01]=[x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,z]; arrTile[02]=[x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,z]; arrTile[03]=[x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,z]; arrTile[04]=[x,x,x,x,x,x,x,O,x,x,x,x,x,x,x,z]; arrTile[05]=[x,x,x,x,x,x,x,O,x,x,x,x,x,x,x,z]; arrTile[06]=[x,x,x,x,x,O,O,O,O,O,x,x,x,x,x,z]; arrTile[07]=[x,x,x,x,x,x,x,O,x,x,x,x,x,x,x,z]; arrTile[08]=[x,x,x,x,x,x,x,O,x,x,x,x,x,x,x,z]; arrTile[09]=[x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,z]; arrTile[10]=[x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,z]; arrTile[11]=[x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,z]; arrTile[12]=[x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,z]; arrTile[13]=[z,z,z,z,z,z,z,z,z,z,z,z,z,z,z,z]; break; case "-" : arrTile[00]=[x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,z]; arrTile[01]=[x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,z]; arrTile[02]=[x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,z]; arrTile[03]=[x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,z]; arrTile[04]=[x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,z]; arrTile[05]=[x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,z]; arrTile[06]=[x,x,x,x,x,O,O,O,O,O,x,x,x,x,x,z]; arrTile[07]=[x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,z]; arrTile[08]=[x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,z]; arrTile[09]=[x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,z]; arrTile[10]=[x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,z]; arrTile[11]=[x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,z]; arrTile[12]=[x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,z]; arrTile[13]=[z,z,z,z,z,z,z,z,z,z,z,z,z,z,z,z]; break; } drawLabel(shape.graphics, w, h, arrTile); return shape; } private function drawLabel(inGraphics:Graphics=null, inWidth:int=100, inHeight:int=100, inTile:Array=null):void { var row:int = inTile[0].length; var col:int = inTile.length; var bmp:BitmapData = new BitmapData(row, col, true, 0xFFFFFF); for(var i=0; i