// ==========================================================
//
// 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|