<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>ActionScript Scraps &#187; class</title>
	<atom:link href="http://blog.sitedaniel.com/tag/class/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.sitedaniel.com</link>
	<description>Flash, Flex and AIR development</description>
	<lastBuildDate>Wed, 28 Jul 2010 11:15:35 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>FontControl class &#8211; external font library</title>
		<link>http://blog.sitedaniel.com/2008/10/fontcontrol-class-external-font-library/</link>
		<comments>http://blog.sitedaniel.com/2008/10/fontcontrol-class-external-font-library/#comments</comments>
		<pubDate>Fri, 17 Oct 2008 15:57:32 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[actionscript]]></category>
		<category><![CDATA[as3.0]]></category>
		<category><![CDATA[class]]></category>
		<category><![CDATA[dynamic fonts]]></category>
		<category><![CDATA[fonts]]></category>

		<guid isPermaLink="false">http://blog.sitedaniel.com/?p=103</guid>
		<description><![CDATA[Loading fonts in dynamically in AS3 is so much better than AS2. If you want to have an external library of fonts that you only load as you need then this is the way to go. Create some SWF files that only contain the font combinations that you will need and then load them in [...]]]></description>
			<content:encoded><![CDATA[<p>Loading fonts in dynamically in AS3 is so much better than AS2. If you want to have an external library of fonts that you only load as you need then this is the way to go. Create some SWF files that only contain the font combinations that you will need and then load them in to use using this FontManager class.</p>
<pre class="actionscript">&nbsp;
package com.<span style="color: #006600;">sitedaniel</span>.<span style="color: #0066CC;">text</span>
<span style="color: #66cc66;">&#123;</span>
    <span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">display</span>.<span style="color: #006600;">Loader</span>;
    <span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">events</span>.<span style="color: #006600;">Event</span>;
    <span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">events</span>.<span style="color: #006600;">IOErrorEvent</span>;
    <span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">events</span>.<span style="color: #006600;">EventDispatcher</span>;
    <span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">net</span>.<span style="color: #006600;">URLRequest</span>;
    <span style="color: #0066CC;">import</span> flash.<span style="color: #0066CC;">system</span>.<span style="color: #006600;">ApplicationDomain</span>;
    <span style="color: #0066CC;">import</span> flash.<span style="color: #0066CC;">text</span>.<span style="color: #0066CC;">Font</span>;
&nbsp;
    <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">class</span> FontControl <span style="color: #0066CC;">extends</span> EventDispatcher
    <span style="color: #66cc66;">&#123;</span>
        <span style="color: #0066CC;">public</span> <span style="color: #0066CC;">static</span>  const COMPLETE:<span style="color: #0066CC;">String</span> = <span style="color: #ff0000;">&quot;font_load_complete&quot;</span>;
        <span style="color: #0066CC;">public</span> <span style="color: #0066CC;">static</span>  const <span style="color: #0066CC;">ERROR</span>:<span style="color: #0066CC;">String</span> = <span style="color: #ff0000;">&quot;font_load_error&quot;</span>;
        <span style="color: #0066CC;">public</span> <span style="color: #0066CC;">static</span>  <span style="color: #000000; font-weight: bold;">var</span> FONTS:<span style="color: #0066CC;">Array</span>;
&nbsp;
        <span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> _loader:Loader;
        <span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> _domain:ApplicationDomain;
&nbsp;
        <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> FontControl<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
        <span style="color: #66cc66;">&#125;</span>
        <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> <span style="color: #0066CC;">load</span><span style="color: #66cc66;">&#40;</span>path:<span style="color: #0066CC;">String</span>, fontArr:<span style="color: #0066CC;">Array</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
        <span style="color: #66cc66;">&#123;</span>
            FONTS = fontArr;
            _loader = <span style="color: #000000; font-weight: bold;">new</span> Loader<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
            _loader.<span style="color: #006600;">contentLoaderInfo</span>.<span style="color: #006600;">addEventListener</span><span style="color: #66cc66;">&#40;</span>IOErrorEvent.<span style="color: #006600;">IO_ERROR</span>, _ioErrHdlr<span style="color: #66cc66;">&#41;</span>;
            _loader.<span style="color: #006600;">contentLoaderInfo</span>.<span style="color: #006600;">addEventListener</span><span style="color: #66cc66;">&#40;</span>Event.<span style="color: #006600;">COMPLETE</span>, _loadComplete<span style="color: #66cc66;">&#41;</span>;
            _loader.<span style="color: #0066CC;">load</span><span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> URLRequest<span style="color: #66cc66;">&#40;</span>path<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;
        <span style="color: #66cc66;">&#125;</span>
&nbsp;
        <span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> _loadComplete<span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">e</span>:Event<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
        <span style="color: #66cc66;">&#123;</span>
            _domain = _loader.<span style="color: #006600;">contentLoaderInfo</span>.<span style="color: #006600;">applicationDomain</span>;
            _registerFonts<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
            <span style="color: #000000; font-weight: bold;">var</span> embeddedFonts:<span style="color: #0066CC;">Array</span> = <span style="color: #0066CC;">Font</span>.<span style="color: #006600;">enumerateFonts</span><span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">false</span><span style="color: #66cc66;">&#41;</span>;
        <span style="color: #66cc66;">&#125;</span>
&nbsp;
        <span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> _registerFonts<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
        <span style="color: #66cc66;">&#123;</span>
            <span style="color: #b1b100;">for</span> <span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">var</span> i:uint = <span style="color: #cc66cc;">0</span>; FONTS<span style="color: #66cc66;">&#91;</span>i<span style="color: #66cc66;">&#93;</span>; i++<span style="color: #66cc66;">&#41;</span>
            <span style="color: #66cc66;">&#123;</span>
                <span style="color: #0066CC;">Font</span>.<span style="color: #006600;">registerFont</span><span style="color: #66cc66;">&#40;</span>_domain.<span style="color: #006600;">getDefinition</span><span style="color: #66cc66;">&#40;</span>FONTS<span style="color: #66cc66;">&#91;</span>i<span style="color: #66cc66;">&#93;</span>.<span style="color: #006600;">id</span><span style="color: #66cc66;">&#41;</span> as <span style="color: #000000; font-weight: bold;">Class</span><span style="color: #66cc66;">&#41;</span>;
            <span style="color: #66cc66;">&#125;</span>
            dispatchEvent<span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> Event<span style="color: #66cc66;">&#40;</span>COMPLETE<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;
        <span style="color: #66cc66;">&#125;</span>
&nbsp;
        <span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> _ioErrHdlr<span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">e</span>:IOErrorEvent<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
        <span style="color: #66cc66;">&#123;</span>
            <span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">e</span><span style="color: #66cc66;">&#41;</span>;
            dispatchEvent<span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> Event<span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">ERROR</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;
        <span style="color: #66cc66;">&#125;</span>
    <span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span>
&nbsp;</pre>
<p>Using this font control you can have multiple libraries of fonts that you choose to load at runtime. Generally the library you load is determined by the language and character support that you need. When you call _fontControl.load(...) you can have a switch statement to load in and register different fonts for each language that you need. Of course you need these font SWF files set up correctly. In 'font_hei.swf' that this example is loading in, there are two fonts set up to export with the linkage IDs of 'FontHei' and 'FontMain'. These fonts are 'AdiHaus Bold' and 'Hei' respectively. 'Hei' is a Chinese font and about 3M in size. There is no way I want to load this font if I don't have to.</p>
<p><img src="http://blog.sitedaniel.com/wp-content/uploads/2009/02/picture-5.jpg" alt="" title="Font Properties" width="300" height="200" class="alignnone size-medium wp-image-107" /></p>
<p>Then when you create your FontLoader instance, you pass in the path and an object that reflects these font names and ids:</p>
<pre class="actionscript">&nbsp;
_fontControl = <span style="color: #000000; font-weight: bold;">new</span> FontControl<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
_fontControl.<span style="color: #006600;">addEventListener</span><span style="color: #66cc66;">&#40;</span>FontControl.<span style="color: #006600;">COMPLETE</span>, _fontsLoaded<span style="color: #66cc66;">&#41;</span>;
_fontControl.<span style="color: #0066CC;">load</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;swf/font_hei.swf&quot;</span>, <span style="color: #66cc66;">&#91;</span><span style="color: #66cc66;">&#123;</span><span style="color: #0066CC;">font</span>:<span style="color: #ff0000;">&quot;AdiHaus Bold&quot;</span>, id:<span style="color: #ff0000;">&quot;FontMain&quot;</span><span style="color: #66cc66;">&#125;</span>,
                                         <span style="color: #66cc66;">&#123;</span><span style="color: #0066CC;">font</span>:<span style="color: #ff0000;">&quot;Hei&quot;</span>, id:<span style="color: #ff0000;">&quot;FontHei&quot;</span><span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;</pre>
<p>The 'FontMain' actual font name is 'AdiHaus Bold'.</p>
<p>Then when you want some dynamic text, you can either use the font name that you've just loaded, 'AdiHaus Bold'</p>
<pre class="actionscript">&nbsp;
<span style="color: #000000; font-weight: bold;">var</span> tf:<span style="color: #0066CC;">TextField</span> = <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #0066CC;">TextField</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #000000; font-weight: bold;">var</span> fmt:<span style="color: #0066CC;">TextFormat</span> = <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #0066CC;">TextFormat</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'AdiHaus Bold'</span>, <span style="color: #cc66cc;">30</span>, 0x000000<span style="color: #66cc66;">&#41;</span>;
tf.<span style="color: #0066CC;">autoSize</span>	 = TextFieldAutoSize.<span style="color: #0066CC;">LEFT</span>;
tf.<span style="color: #0066CC;">embedFonts</span> = <span style="color: #000000; font-weight: bold;">true</span>;
tf.<span style="color: #0066CC;">text</span> = <span style="color: #ff0000;">'Lorem Ipsum...'</span>;
tf.<span style="color: #0066CC;">setTextFormat</span><span style="color: #66cc66;">&#40;</span>fmt<span style="color: #66cc66;">&#41;</span>;
<span style="color: #0066CC;">this</span>.<span style="color: #006600;">addChild</span><span style="color: #66cc66;">&#40;</span>tf<span style="color: #66cc66;">&#41;</span>;
&nbsp;</pre>
<p>or use a static variable reference in the font Manager, FontControl.FONTS[1].font</p>
<pre class="actionscript">&nbsp;
<span style="color: #000000; font-weight: bold;">var</span> fmt:<span style="color: #0066CC;">TextFormat</span> = <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #0066CC;">TextFormat</span><span style="color: #66cc66;">&#40;</span>FontControl.<span style="color: #006600;">FONTS</span><span style="color: #66cc66;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#93;</span>.<span style="color: #0066CC;">font</span>, <span style="color: #cc66cc;">30</span>, 0x000000<span style="color: #66cc66;">&#41;</span>;
&nbsp;</pre>
<p>I prefer using this static var method as you can change the font of a complete site just by updating the library that loads in.</p>
<p>UPDATE: 6th Jan 2010 - removed unnecessary use of DynamicEvent class, now just standard Event class</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.sitedaniel.com/2008/10/fontcontrol-class-external-font-library/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
	</channel>
</rss>
