フォント共有テスト(Dynamic Embedded Fonts)
必要に迫られて動的にフォントを共有しなければならなくなったので、FontEmbedクラスを作ってみました。で、そのテストも兼ねて。
(日本語のフォントを埋め込んでいますのでローディングに相当時間がかかります・・・)
読み込むフォント共有用のSWFは、ライブラリに埋め込むフォントを登録してリンケージの設定とランタイム共有の設定(自身のフルパスを記入)を行い、Security.allowDomainの引数を”*”にしてあります。
フォント共有テスト(Dynamic Embedded Fonts) – wonderfl build flash online
以下のコードはフォント埋め込みクラスです。
使用方法はwonderflのコードを参照してください。
import flash.events.Event; import flash.events.ProgressEvent; import flash.events.EventDispatcher; import flash.display.Loader; import flash.display.LoaderInfo; import flash.net.URLRequest; import flash.net.URLLoader; import flash.text.TextField; import flash.text.TextFormat; import flash.text.Font; import flash.system.LoaderContext; import flash.system.ApplicationDomain; import flash.system.SecurityDomain; import flash.system.Security; public class FontEmbed extends EventDispatcher { private var _fontClassName:String private var _loader:Loader = new Loader() public var prigress:int public static const FONT_LOADED:String = "font_loaded"; public function FontEmbed(fontPath:String, fontClassName:String) { Security.loadPolicyFile("someDomain/crossdomain.xml"); Security.allowDomain("someDomain"); swfLoad(fontPath); _fontClassName = fontClassName; } //Load FontSwf private function swfLoad(fontPath:String):void{ var context:LoaderContext = new LoaderContext(); context.checkPolicyFile = true; context.securityDomain = SecurityDomain.currentDomain; context.applicationDomain = ApplicationDomain.currentDomain; var req:URLRequest = new URLRequest(fontPath); _loader.contentLoaderInfo.addEventListener(Event.COMPLETE, swfLoadComplete); _loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS,onProgressListener); _loader.load(req, context); } //Progress private function onProgressListener(e:ProgressEvent):void { prigress = e.bytesLoaded/e.bytesTotal*100; } //Load Complete private function swfLoadComplete(e:Event):void { _loader.contentLoaderInfo.removeEventListener(Event.COMPLETE,swfLoadComplete); _loader.contentLoaderInfo.removeEventListener(ProgressEvent.PROGRESS,onProgressListener); // var fontClass:Class = _loader.contentLoaderInfo.applicationDomain.getDefinition(_fontClassName) as Class; try{ Font.registerFont(fontClass); }catch(e:Error){ // Error Msg } dispatchEvent(new Event(FontEmbed.FONT_LOADED)); } //Embeted Font public function embetedFont(txt:TextField, fontname:String, size:Number, fmt:TextFormat):void { var tfmt:TextFormat = fmt tfmt.font = fontname; tfmt.size = size; txt.embedFonts = true; txt.defaultTextFormat = tfmt; } }