In case Flash no longer exists; a copy of this site is included in the Flashpoint archive's "ultimate" collection.

Dead Code Preservation :: Archived AS3 works from wonderfl.net

テキストを滑らかに表示

Get Adobe Flash player
by umhr 24 Aug 2012
    Embed
/**
 * Copyright umhr ( http://wonderfl.net/user/umhr )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/7Ah9
 */

package 

{

    import flash.display.Sprite;

    import flash.events.Event;

    

    /**

     * ...

     * @author mztm

     */

    [SWF(width = 465, height = 465, backgroundColor = 0xEEEEEE, frameRate = 30)]

    public class WonderflMain extends Sprite 

    {

        

        public function WonderflMain():void 

        {

            if (stage) init();

            else addEventListener(Event.ADDED_TO_STAGE, init);

        }

        

        private function init(e:Event = null):void 

        {

            removeEventListener(Event.ADDED_TO_STAGE, init);

            // entry point

            

            graphics.beginFill(0xEEEEEE);

            graphics.drawRect(0, 0, 465, 465);

            graphics.endFill();

            

            addChild(new Canvas());

            

        }

        

    }

    

}



    import com.bit101.components.Label;

    import com.bit101.components.Style;

    import com.bit101.components.TextArea;

    import flash.display.Bitmap;

    import flash.display.BitmapData;

    import flash.display.PixelSnapping;

    import flash.display.Shape;

    import flash.display.Sprite;

    import flash.events.Event;

    import flash.filters.DropShadowFilter;

    import flash.geom.Matrix;

    import flash.text.TextField;

    import flash.text.TextFormat;

    /**

     * ...

     * @author umhr

     */

    class Canvas extends Sprite

    {

        private var _textArea:TextArea;

        private var _layoutTF:TextField = new TextField();

        private var _normalTF:TextField = new TextField();

        private var _fontChooser:FontChooser;

        private var _bitmap:Bitmap = new Bitmap(new BitmapData(455, 110, true, 0x0), PixelSnapping.NEVER, true);

        public function Canvas()

        {

            init();

        }

        private function init():void

        {

            if (stage) onInit();

            else addEventListener(Event.ADDED_TO_STAGE, onInit);

        }



        private function onInit(event:Event = null):void

        {

            removeEventListener(Event.ADDED_TO_STAGE, onInit);

            // entry point



            Style.embedFonts = false;

            Style.fontName = "_等幅";

            Style.fontSize = 12;



            // 入力欄

            _textArea = new TextArea(this, 5, 5, "TextArea");

            _textArea.width = 455;

            _textArea.height = 40;

            _textArea.textField.type = "input";

            _textArea.addEventListener(Event.CHANGE, change);



            // フォント選択

            _fontChooser = new FontChooser();

            _fontChooser.x = 5;

            _fontChooser.y = 50;

            _fontChooser.addEventListener(Event.CHANGE, change);

            addChild(_fontChooser);

            

            // 流し込み結果

            _layoutTF.defaultTextFormat = new TextFormat(null, 14, null, false);

            _layoutTF.multiline = true;

            _layoutTF.autoSize = "left";

            

            var shape:Shape = new Shape();

            shape.graphics.beginFill(0xFFFFFF);

            shape.graphics.drawRect(0, 0, 455, 115);

            shape.graphics.drawRect(0, 135, 455, 115);

            shape.graphics.endFill();

            shape.x = 5;

            shape.y = 210;

            addChild(shape);

            

            new Label(this, 10, 195, "Normal(TextField)");

            _normalTF.defaultTextFormat = new TextFormat(null, 14, null, false);

            _normalTF.multiline = true;

            _normalTF.autoSize = "left";

            _normalTF.x = 10;

            _normalTF.y = 210;

            addChild(_normalTF);

            

            new Label(this, 10, 330, "Scaling(Bitmap)");

            _bitmap.x = 10;

            _bitmap.y = 345;

            addChild(_bitmap);

            

            _textArea.text = "ABCdefg1234\nあいうえおかきくけこ";

            change(null);

            

            //trace(_fontChooser.scale, Math.sqrt(_fontChooser.scale), 1 / Math.sqrt(_fontChooser.scale), (1 / Math.sqrt(_fontChooser.scale)) * (1 / Math.sqrt(_fontChooser.scale)));

        }



        private function change(event:Event):void

        {

            var scale:Number = _fontChooser.scale;

            

            _normalTF.defaultTextFormat = new TextFormat(_fontChooser.fontName, _fontChooser.fontSize, null, _fontChooser.isBold);

            _normalTF.text = _textArea.text;

            

            _layoutTF.defaultTextFormat = new TextFormat(_fontChooser.fontName, _fontChooser.fontSize * scale, null, _fontChooser.isBold);

            _layoutTF.text = _textArea.text;

            

            var tempBitmapData:BitmapData = new BitmapData(455 * scale, 110 * scale, true, 0x0);

            tempBitmapData.draw(_layoutTF, null, null, null, null, true);

            

            // 半分ずつリサイズしたほうが綺麗に表示される。

            var matrix:Matrix = new Matrix(1 / Math.sqrt(scale), 0, 0, 1 / Math.sqrt(scale));

            var tempBitmap:Bitmap = new Bitmap(new BitmapData(tempBitmapData.width, tempBitmapData.height, true, 0x00000000), PixelSnapping.NEVER, true);

            tempBitmap.bitmapData.draw(tempBitmapData, matrix, null, null, null, true);

            

            _bitmap.bitmapData.fillRect(_bitmap.bitmapData.rect, 0x0);

            _bitmap.bitmapData.draw(tempBitmap, matrix, null, null, null, true);

            

            _normalTF.filters = _fontChooser.isDropShadow?[new DropShadowFilter(4, 45, 0xCC3333)]:[];

            _bitmap.filters = _fontChooser.isDropShadow?[new DropShadowFilter(4, 45, 0xCC3333)]:[];

        }



    }



    

    import com.bit101.components.CheckBox;

    import com.bit101.components.Label;

    import com.bit101.components.List;

    import com.bit101.components.NumericStepper;

    import com.bit101.components.VScrollBar;

    import flash.display.Sprite;

    import flash.events.Event;

    import flash.text.Font;



    /**

     * ...

     * @author umhr

     */

    class FontChooser extends Sprite

    {

        public var fontName:String = "_等幅";

        public var fontSize:Number = 36;

        public var isBold:Boolean;

        public var isDropShadow:Boolean;

        public var scale:Number = 2;

        

        public function FontChooser()

        {

            init();

        }



        private function init():void

        {

            

            var list:com.bit101.components.List = new com.bit101.components.List(this, 0, 0, [ "_等幅", "_typewriter", "_ゴシック", "_sans", "_明朝", "_serif"]);

            list.selectedIndex = 0;

            list.width = 170;

            list.height = 140;

            list.addEventListener(Event.SELECT, list_select);



            var fontList:Array/*Font*/ = Font.enumerateFonts(true);

            var n:int = fontList.length;

            for (var i:int = 0; i < n; i++)

            {

                list.addItem(fontList[i].fontName);

            }



            var numericStepper:NumericStepper = new NumericStepper(this, 220);

            numericStepper.value = fontSize;

            numericStepper.step = 1;

            numericStepper.addEventListener(Event.CHANGE, numericStepper_select);

            new Label(this, 305, 0, "Size");

            

            new CheckBox(this, 220, 30, "Bold", onMouseClick);

            

            var scaleStepper:NumericStepper = new NumericStepper(this, 220, 50);

            scaleStepper.value = scale;

            scaleStepper.step = 0.1;

            scaleStepper.addEventListener(Event.CHANGE, scaleStepper_select);

            new Label(this, 305, 50, "Scale");

            

            new CheckBox(this, 220, 80, "DropShadow", onDropShadowClick);

            

        }

        

        private function onDropShadowClick(event:Event):void 

        {

            var checkBox:CheckBox = event.target as CheckBox;

            isDropShadow = checkBox.selected;

            dispatchEvent(new Event(Event.CHANGE));

        }

        

        private function onMouseClick(event:Event):void 

        {

            var checkBox:CheckBox = event.target as CheckBox;

            isBold = checkBox.selected;

            dispatchEvent(new Event(Event.CHANGE));

        }



        private function scaleStepper_select(event:Event):void

        {

            var numericStepper:NumericStepper = event.target as NumericStepper;

            if(numericStepper){

                scale = numericStepper.value;

                dispatchEvent(new Event(Event.CHANGE));

            }

        }



        private function numericStepper_select(event:Event):void

        {

            var numericStepper:NumericStepper = event.target as NumericStepper;

            if(numericStepper){

                fontSize = numericStepper.value;

                dispatchEvent(new Event(Event.CHANGE));

            }

        }



        private function list_select(event:Event):void

        {

            var list:com.bit101.components.List = (event.target as com.bit101.components.List);



            // 次の指定だとスクロールしてもの選択位置が移動しない。

            //fontName = _list.selectedItem.toString();



            var vScrollBar:VScrollBar = list.getChildAt(1) as VScrollBar;

            var num:int = list.selectedIndex + vScrollBar.value;

            fontName = list.items[num];

            dispatchEvent(new Event(Event.CHANGE));

        }



    }