package {
    import flash.display.*;
    import flash.filters.*;
    import flash.text.*;

    /// ボタン
    public class TextButton extends SimpleButton {

        /**
         * コンストラクタ
         * @param w 幅
         * @param h 高さ
         * @param text ボタンに表示する文字列
         */
        public function TextButton( w:uint, h:uint, text:String ) {

            var ew:uint = 15;
            downState = makeRoundRect(w, h, ew, 0x006600, text);
            overState = makeRoundRect(w, h, ew, 0x00ff00, text);
            upState = makeRoundRect(w, h, ew, 0x777777, text);

            var filter:Array = new Array;
            filter.push( new DropShadowFilter() );
            this.filters = filter;

            //当たり判定
            hitTestState = upState;

            //ハンドアイコン 
            useHandCursor = true;

        }

        /**
         * テキストフォーマットの生成
         * @param size サイズ
         * @param color 色
         */
        public static function makeTextFormat(size:uint,color:uint):TextFormat {
            var format:TextFormat=new TextFormat();
            format.font ="_等幅";
            format.size =size;
            format.color=color;
            format.bold =true;
            return format;
        }

        /** 
         * 一定高さ以下にフォントサイズを調整。height以下の高さに
         */
        public static function setFontHeight(label:TextField,format:TextFormat,height:uint):void {
            var i:uint;
            var lastSize:uint = 1;

            for(i = lastSize;; i++ ){
                format.size=i;
                label.setTextFormat(format);
                if (label.textHeight >= height){
                    break;
                }
                lastSize = i;
            }

            format.size = lastSize;
            label.setTextFormat(format);
        }

        /**
         * 角円矩形の作成
         * @param w 幅
         * @param h 高さ
         * @param ew 角の丸まり
         * @param color 色
         */
        private function makeRoundRect(w:uint,h:uint,ew:uint,color:uint,text:String):Sprite {
            var rrect:Sprite=new Sprite();
            rrect.graphics.beginFill(color);         //塗り潰し色
            rrect.graphics.drawRoundRect(0,0,w,h,ew);//XY座標,幅,高さ,角丸幅
            rrect.graphics.endFill();                //塗り潰し終了
            rrect.alpha = 0.8;

            var textHeight:uint = h/4*3;
            var textField:TextField=new TextField();
            textField.text = text;
            textField.y = (h - textHeight)/2;
            textField.width = w;
            textField.height = textHeight;
            textField.selectable = false;
            textField.mouseEnabled = false;
            textField.autoSize = TextFieldAutoSize.CENTER;

            var format:TextFormat = makeTextFormat(12, 0xffffff);
            setFontHeight(textField, format, textHeight);
            textField.setTextFormat(format);

            rrect.addChild(textField);
            return rrect;
        }

    }
}