フォントの操作

Flash Player 10 以降、Adobe AIR 1.5 以降

FontDescription オブジェクトは、 ElementFormat と一緒に使用し、フォントを特定し、その特性の一部を定義します。これらの特性には、フォント名、太さ、ポスチャー、表現、およびフォントの場所(デバイスか埋め込みか)などがあります。

注意: FTE では、Type 1 のフォントや、Type 3、ATC、sfnt-wrapped CID、Naked CID などのビットマップフォントはサポートされません。

フォント特性の定義(FontDescription オブジェクト)

FontDescription オブジェクトの fontName プロパティは、単一の名前またはカンマで区切った名前のリストである場合があります。 例えば、「Arial, Helvetica, _sans」のようなリストでは、テキスト エンジンは最初に「Arial」を探し、次に「Helvetica」を探します。どちらも見つからない場合は、最後に「_sans」を探します。フォント名のセットには、「_sans」、「_serif」、および「_typewriter」という 3 つの汎用のデバイスフォント名が含まれています。これらのフォントは、再生システム固有のデバイスフォントにマップされます。デバイスフォントを使用するすべてのフォントの記述で、これらのようなデフォルト名を指定すると効果的です。 fontName が指定されていない場合は、デフォルトとして「_serif」が使用されます。

fontPosture プロパティは、デフォルト( FontPosture.NORMAL )またはイタリック( FontPosture.ITALIC )のいずれかに設定できます。 fontWeight プロパティは、デフォルト( FontWeight.NORMAL )またはボールド( FontWeight.BOLD )のいずれかに設定できます。

var fd1:FontDescription = new FontDescription(); 
fd1.fontName = "Arial, Helvetica, _sans"; 
fd1.fontPosture = FontPosture.NORMAL; 
fd1.fontWeight = FontWeight.BOLD;

埋め込みフォントおよびデバイスフォント

FontDescription オブジェクトの fontLookup プロパティは、テキスト エンジンが、テキストのレンダリングのために、デバイスフォントと埋め込みフォントのどちらを探すかを指定します。デバイスフォント( FontLookup.DEVICE )を指定すると、ランタイムは再生システムでフォントを探します。埋め込みフォント( FontLookup.EMBEDDED_CFF )を指定すると、ランタイムは、SWF ファイルで指定された名前の埋め込みフォントを探します。この設定で使用できるのは埋め込み CFF(コンパクトフォントフォーマット)のみです。 指定したフォントが見つからないと、代替のデバイスフォントが使用されます。

デバイスフォントの場合は、SWT ファイルサイズがより小さくなります。埋め込みフォントでは、プラットフォームへの忠実度が高くなります。

var fd1:FontDescription = new FontDescription(); 
fd1.fontLookup = FontLookup.EMBEDDED_CFF; 
fd1.fontName = "Garamond, _serif";

レンダリングモードとヒンティング

CFF(コンパクトフォントフォーマット)レンダリングは、Flash Player 10 および Adobe AIR 1.5 以降で使用できます。テキストの読みやすさを向上し、小さいサイズのフォントを優れた品質で表示できるフォントレンダリング形式です。この設定は、埋め込みフォントのみに適用されます。 FontDescription renderingMode プロパティのデフォルト値はこの設定( RenderingMode.CFF )です。このプロパティを RenderingMode.NORMAL に設定すると、Flash Player 7 以前のバージョンで使用したレンダリングのタイプと一致させることができます。

CFF レンダリングを選択すると、2 番目のプロパティ cffHinting は、フォントの横方向の軸がサブピクセルグリッドに収まる方法を制御します。デフォルト値 CFFHinting.HORIZONTAL_STEM では、CFF ヒンティングを使用します。このプロパティを CFFHinting.NONE に保存すると、ヒンティングが除去されます。これはアニメーションや大きいフォントサイズに適しています。

var fd1:FontDescription = new FontDescription(); 
fd1.renderingMode = RenderingMode.CFF; 
fd1.cffHinting = CFFHinting.HORIZONTAL_STEM;

FontDescription のロックとクローニング

FontDescription オブジェクトを ElementFormat に割り当てると、その locked プロパティは自動的に true に設定されます。ロックされた FontDescription オブジェクトを変更しようとすると、 IllegalOperationError がスローされます。最善の方法は、 ElementFormat インスタンスに割り当てる前にそのようなオブジェクトを完全に定義することです。

既存の FontDescription インスタンスを変更する場合は、まずその locked プロパティを確認します。 true の場合は、 clone() メソッドを使用して、オブジェクトのロックされていないコピーを作成します。 このロックされていないオブジェクトのプロパティを変更してから、 ElementFormat インスタンスに割り当てることができます。この TextElement から作成された新しい行には新しいフォーマットが適用されます。この同じオブジェクトから作成された前の行は変更されません。

package 
{ 
    import flash.display.Sprite; 
    import flash.text.*; 
 
    public class FontDescriptionCloneExample extends Sprite 
    { 
        private var tb:TextBlock = new TextBlock(); 
        private var te:TextElement; 
        private var ef1:ElementFormat; 
        private var ef2:ElementFormat; 
         private var fd1:FontDescription = new FontDescription(); 
        private var fd2:FontDescription; 
 
        public function FontDescriptionCloneExample() 
        { 
            fd1.fontName = "Garamond"; 
            ef1 = new ElementFormat(fd); 
            var str:String = "This is flash text"; 
            te = new TextElement(str, ef); 
            tb.content = te; 
            var tx1:TextLine = tb.createTextLine(null,600); 
            addChild(tx1); 
             
            fd2 = (fd1.locked) ? fd1.clone() : fd1; 
            fd2.fontName = "Arial"; 
            ef2 = (ef1.locked) ? ef1.clone() : ef1; 
            ef2.fontDescription = fd2; 
            tb.content.elementFormat = ef2; 
            var tx2:TextLine = tb.createTextLine(null,600); 
            addChild(tx2); 
        } 
    } 
}