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

    public class TextAdjust extends Sprite {

        private var textField:TextField=new TextField();
        private var format:TextFormat;
        private var count:int = 1;

        public function TextAdjust() {

            // filter使っわにゃAS3にあらず!
            var filters:Array = new Array;
            filters.push(makeDropShadowFilter());

            // 背景矩形
            var rrect:Shape=new Shape();
            rrect.graphics.lineStyle(0,0x000000);
            rrect.graphics.beginFill(0x00E4B7);
            rrect.graphics.drawRect(0,0,240,120);
            rrect.graphics.endFill();
            rrect.filters = filters;
            addChild(rrect);

            // テキスト作製
            textField.text += 0;
            textField.wordWrap = true;
            textField.autoSize = TextFieldAutoSize.LEFT;
            textField.width = 240;
            textField.height = 120;

            format = makeTextFormat(12, 0x000000);
            textField.setTextFormat(format);
            textField.filters = filters;

            addChild(textField);
            setFontHeight(textField, format, 120);

            //タイマーの追加
            var timer:Timer=new Timer(1000,0);
            timer.addEventListener(TimerEvent.TIMER,onTick);
            timer.start();
        }

        private function onTick(evt:TimerEvent):void {

            if(count >= 200 )
                return;

            textField.text += count;
            ++count;
            setFontHeight(textField, format, 120);

        }

        /**
         * テキストフォーマットの生成
         * @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);
        }

        //ドロップシャドウフィルタの生成
        private function makeDropShadowFilter():BitmapFilter {
            var filter:DropShadowFilter=new DropShadowFilter();
            filter.alpha     =1.0;     //シャドウカラーの透明度
            filter.angle     =45;      //シャドウの角度
            filter.blurX     =5;       //水平方向のぼかし量
            filter.blurY     =5;       //垂直方向のぼかし量
            filter.color     =0x000000;//シャドウのカラー
            filter.distance  =2;       //シャドウのオフセット距離
            filter.hideObject=false;   //シャドウのみの表示
            filter.inner     =false;   //内部シャドウか
            filter.knockout  =false;   //ノックアウト効果の有無
            filter.quality   =BitmapFilterQuality.HIGH;//クォリティ
            filter.strength  =1;       //インプリントやスプレッドの長さ
            return filter;
        }

    }
}