ローカルテスト用 FontLoader
あのハック( http://wonderfl.net/c/d8DH )を使えばローカルでも読み込めることになぜ気が付かなかったのだろう。 wonderflに投稿する時には、importを追加するだけで差し替えられます。悪用厳禁!
♥2 |
Line 157 |
Modified 2011-03-16 02:25:02 |
MIT License
archived:2017-03-20 11:14:48
| (replaced)
ActionScript3 source code
/**
* Copyright o8que ( http://wonderfl.net/user/o8que )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/8Zh5
*/
package {
import flash.display.Sprite;
import flash.events.Event;
//import net.wonderfl.utils.FontLoader;
[SWF(width = "465", height = "465", frameRate = "30")]
public class Main extends Sprite {
public function Main() {
var loader:FontLoader = new FontLoader();
loader.addEventListener(Event.COMPLETE, initialize);
loader.load("Aqua");
}
private function initialize(event:Event):void {
addChild(
new TextBuilder().align(TextBuilder.CENTER).autoSize()
.font("Aqua").fontSize(30).size(465, 465).build("ローカルでも試せる!")
);
}
}
}
/* ------------------------------------------------------------------------------------------------
* FontLoader
* ------------------------------------------------------------------------------------------------
*/
//package {
import flash.display.Loader;
import flash.events.Event;
import flash.events.EventDispatcher;
import flash.net.URLRequest;
import flash.text.Font;
/** フォントの登録が完了した際に送出されます。 */
[Event(name = "complete", type = "flash.events.Event")]
/** ローカルテスト時に net.wonderfl.utils.FontLoader クラスの代わりに使用します。 */
//public
class FontLoader extends EventDispatcher {
private var _fontName:String;
public function FontLoader() { }
/**
* フォントを読み込んで登録します。
* @param fontName
* ["Aqua","Azuki","Cinecaption","Mona","Sazanami","YSHandy","VLGothic","IPAGP","IPAM","UmeUgo","UmePms","Bebas"]
*/
public function load(fontName:String):void {
_fontName = fontName;
var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.INIT, onSWFLoaded);
loader.load(new URLRequest("http://assets.wonderfl.net/static/fonts/" + _fontName + ".swf"));
}
private function onSWFLoaded(event:Event):void {
event.target.removeEventListener(Event.INIT, onSWFLoaded);
var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.INIT, registerFont);
loader.loadBytes(event.target.bytes);
}
private function registerFont(event:Event):void {
event.target.removeEventListener(Event.INIT, registerFont);
Font.registerFont(Class(event.target.applicationDomain.getDefinition("net.wonderfl.fonts." + _fontName + "_font")));
dispatchEvent(new Event(Event.COMPLETE));
}
}
//}
/* ------------------------------------------------------------------------------------------------
* TextBuilder
* ------------------------------------------------------------------------------------------------
*/
//package {
import flash.geom.Point;
import flash.text.AntiAliasType;
import flash.text.GridFitType;
import flash.text.TextField;
import flash.text.TextFieldAutoSize;
import flash.text.TextFormat;
import flash.text.TextFormatAlign;
/** 複雑な設定の flash.text.TextField クラスの生成を単純化します。 */
//public
class TextBuilder {
public static const LEFT:String = "left";
public static const RIGHT:String = "right";
public static const CENTER:String = "center";
private var _align:String;
private var _autoSize:Boolean;
private var _bold:Boolean;
private var _filters:Array;
private var _fontName:String;
private var _sharpness:Number;
private var _thickness:Number;
private var _fontColor:uint;
private var _fontSize:int;
private var _position:Point;
private var _size:Point;
public function TextBuilder() {
_align = TextBuilder.LEFT;
_autoSize = _bold = false;
_filters = [];
_fontName = null;
_sharpness = _thickness = 0;
_fontColor = 0x000000;
_fontSize = 12;
_position = new Point(0, 0);
_size = new Point(100, 100);
}
public function align(value:String):TextBuilder {
_align = value;
return this;
}
public function autoSize(enabled:Boolean = true):TextBuilder {
_autoSize = enabled;
return this;
}
public function bold(enabled:Boolean = true):TextBuilder {
_bold = enabled;
return this;
}
public function filters(value:Array):TextBuilder {
_filters = value;
return this;
}
public function font(name:String, sharpness:Number = 0, thickness:Number = 0):TextBuilder {
_fontName = name;
_sharpness = sharpness;
_thickness = thickness;
return this;
}
public function fontColor(value:uint):TextBuilder {
_fontColor = value;
return this;
}
public function fontSize(value:int):TextBuilder {
_fontSize = value;
return this;
}
public function pos(x:Number, y:Number, relative:Boolean = false):TextBuilder {
_position.x = ((relative) ? _position.x : 0) + x;
_position.y = ((relative) ? _position.y : 0) + y;
return this;
}
public function size(width:Number, height:Number):TextBuilder {
_size.x = width;
_size.y = height;
return this;
}
public function build(text:String):TextField {
var tf:TextField = new TextField();
tf.x = _position.x;
tf.width = _size.x;
tf.height = _size.y;
var format:TextFormat = new TextFormat(_fontName, _fontSize, _fontColor, _bold);
if (_fontName) {
tf.embedFonts = true;
tf.antiAliasType = AntiAliasType.ADVANCED;
tf.gridFitType = (_align == TextBuilder.LEFT) ? GridFitType.PIXEL : GridFitType.SUBPIXEL;
tf.sharpness = _sharpness;
tf.thickness = _thickness;
}
if (_autoSize) {
switch(_align) {
case TextBuilder.LEFT: { tf.autoSize = TextFieldAutoSize.LEFT; break; }
case TextBuilder.RIGHT: { tf.autoSize = TextFieldAutoSize.RIGHT; break; }
case TextBuilder.CENTER: { tf.autoSize = TextFieldAutoSize.CENTER; break; }
}
}else {
switch(_align) {
case TextBuilder.LEFT: { format.align = TextFormatAlign.LEFT; break; }
case TextBuilder.RIGHT: { format.align = TextFormatAlign.RIGHT; break; }
case TextBuilder.CENTER: { format.align = TextFormatAlign.CENTER; break; }
}
}
tf.defaultTextFormat = format;
tf.text = text;
tf.y = _position.y + ((_autoSize) ? Math.max(0, int((_size.y - (tf.textHeight + 4)) / 2)) : 0);
tf.filters = _filters.concat();
tf.mouseEnabled = tf.selectable = false;
return tf;
}
public function clone():TextBuilder {
return new TextBuilder().align(_align).autoSize(_autoSize).bold(_bold).filters(_filters)
.font(_fontName, _sharpness, _thickness).fontColor(_fontColor).fontSize(_fontSize)
.pos(_position.x, _position.y).size(_size.x, _size.y);
}
}
//}