01
Apr
08

Embedding fonts in a Flex application using Embed metadata (redux)

In a previous example, “Embedding fonts in a Flex application using Embed metadata”, we saw how you could embed fonts using the [Embed] metadata with the source attribute.

The following example shows how you can embed system fonts in a Flex application using the [Embed] metadata with the systemFont attribute.

Full code after the jump.

View MXML

<?xml version="1.0" encoding="utf-8"?>
<!-- http://blog.flexexamples.com/2008/04/01/embedding-fonts-in-a-flex-application-using-embed-metadata-redux/ -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
        layout="vertical"
        verticalAlign="middle"
        backgroundColor="white">

    <mx:Style>
        .regularFontStyle {
            fontFamily: regularFont;
        }

        .italicFontStyle {
            fontFamily: italicFont;
            fontStyle: italic;
        }
    </mx:Style>

    <mx:Script>
        <![CDATA[
            import mx.controls.Alert;
            import mx.utils.ObjectUtil;

            [Bindable]
            [Embed("bulletWarning.png")]
            private var bulletWarningIcon:Class;

            [Embed(systemFont="Tahoma",
                    fontName="regularFont",
                    mimeType="application/x-font")]
            private var font1:Class;

            [Embed(systemFont="Tahoma",
                    fontName="italicFont",
                    fontStyle="italic",
                    advancedAntiAliasing="true",
                    mimeType="application/x-font")]
            private var font2:Class;

            private function displayEmbeddedFont(name:String):void {
                var font:Object = systemManager.embeddedFontList[name];
                Alert.show(ObjectUtil.toString(font), name + ":");
            }
        ]]>
    </mx:Script>

    <mx:Form>
        <mx:FormItem label="regularFont:" direction="horizontal">
            <mx:Label id="lbl1"
                    text="The quick brown fox jumped over the lazy dog."
                    styleName="regularFontStyle" />
            <mx:Image source="{bulletWarningIcon}"
                    click="displayEmbeddedFont('regularFont');" />
        </mx:FormItem>
        <mx:FormItem label="italicFont:" direction="horizontal">
            <mx:Label id="lbl2"
                    text="The quick brown fox jumped over the lazy dog."
                    styleName="italicFontStyle" />
            <mx:Image source="{bulletWarningIcon}"
                    click="displayEmbeddedFont('italicFont');" />
        </mx:FormItem>
    </mx:Form>

</mx:Application>

View source is enabled in the following example.


3 Responses to “Embedding fonts in a Flex application using Embed metadata (redux)”


  1. 1 Yoav Apr 10th, 2008 at 5:49 am

    Thanks for the explanation.
    My problem with system font embedding is that the system font becomes antialised - which means it doesn’t looks so sharp as it could. As far as I understand fontAntiAliasType doesn’t apply to system fonts. So what can be done?

  2. 2 André Aug 21st, 2008 at 3:32 pm

    That would be an interesting answer. I’m searching my a.. off right now to find a solution to get the font sharper. But I need the embedding to animate everything properly :-/

  3. 3 André Aug 21st, 2008 at 4:27 pm

    Ah, found the solution :-) This thread http://blog.flexexamples.com/2007/10/24/setting-a-fonts-anti-alias-type-sharpness-thickness-and-grid-fit-type-in-flex/#more-252 is it…

    Just use advancedAntiAliasing = true and fontGridFitType = pixel, that’s it to get the embbed font sharp…

Leave a Reply

This blog is terrible at eating HTML tags. If you plan on posting code/XML, please escape your "<" characters as "&lt;" and your ">" characters as "&gt;".




Badge Farm

  • Firefox 2
  • Powered by Redoable 1.2
  • Feeds burnt by Feedburner
  • Feed