テキストのフォーマットFlash Player 10 以降、Adobe AIR 1.5 以降 TextBlock オブジェクトは、テキスト行を作成するファクトリです。TextBlock のコンテンツは TextElement オブジェクトを使用して割り当てます。ElementFormat オブジェクトは、テキストのフォーマットを処理します。ElementFormat クラスは、ベースライン整列、カーニング、トラッキング、テキスト回転、フォントサイズ、カラーおよび大文字小文字などのプロパティを定義します。これには、FontDescription も含まれます。このプロパティについては、フォントの操作で詳しく説明しています。 ElementFormat オブジェクトの使用ElementFormat オブジェクトのコンストラクターは、FontDescription を含む、多数あるオプションのパラメーターを取ります。また、コンストラクターの外でこれらのプロパティを設定することもできます。次の例は、単純なテキスト行の定義と表示における様々なオブジェクトの関係を示しています。 package { import flash.display.Sprite; import flash.text.*; public class ElementFormatExample extends Sprite { private var tb:TextBlock = new TextBlock(); private var te:TextElement; private var ef:ElementFormat; private var fd:FontDescription = new FontDescription(); private var str:String; private var tl:TextLine; public function ElementFormatExample() { fd.fontName = "Garamond"; ef = new ElementFormat(fd); ef.fontSize = 30; ef.color = 0xFF0000; str = "This is flash text"; te = new TextElement(str, ef); tb.content = te; tl = tb.createTextLine(null,600); addChild(tl); } } } フォントカラーと透明度(アルファ)ElementFormat オブジェクトのcolor プロパティはフォントカラーを設定します。値はカラーの RGB コンポーネントを表す整数です。例えば、赤の場合は 0xFF0000、緑の場合は 0x00FF00 です。デフォルト値は黒(0x000000)です。 alpha プロパティは、エレメント(TextElement と GraphicElement の両方)のアルファ透明度の値を設定します。値はの範囲は 0(完全に透明)から 1(完全に不透明)です。デフォルトは 1 です。alpha が 0 のエレメントは表示されませんが、アクティブです。この値は、継承された任意のアルファ値で乗算できるので、エレメントの透明度が増します。 var ef:ElementFormat = new ElementFormat(); ef.alpha = 0.8; ef.color = 0x999999; ベースライン整列およびシフト行内の最大のテキストのフォントとサイズは、優先ベースラインを決定します。これらの値は、TextBlock.baselineFontDescription および TextBlock.baselineFontSize を設定することにより、オーバーライドできます。優先ベースラインは、テキスト内の複数のベースラインの 1 つに合わせて整列させることができます。これらのベースラインには、アセントライン、ディセントライン、または仮想ボディの上 / 右、中央、下 / 左が含まれます。
ElementFormat オブジェクトでは、3 つのプロパティによってベースラインと整列特性が決定されます。alignmentBaseline プロパティは、TextElement または GraphicElement のメインベースラインを設定します。このベースラインは、エレメントが「スナップする」行で、すべてのテキストの優先ベースラインはこの位置に合わせて整列します。 dominantBaseline プロパティは、エレメントの様々なベースラインのどれを使用するかを決定し、それにより行上のエレメントの縦の位置が決定されます。デフォルト値は TextBaseline.ROMAN ですが、IDEOGRAPHIC_TOP または IDEOGRAPHIC_BOTTOM ベースラインのいずれかが優先されるように設定することもできます。 baselineShift プロパティは、y 軸上、一定のピクセル数分ベースラインを移動します。通常(回転なし)のテキストでは、正の値はベースラインを下方向に、負の値はそれを上方向に移動します。 活字の大文字小文字ElementFormat の TypographicCase プロパティは、大文字、小文字、またはスモールキャピタルなど、テキストの大文字小文字の区別を指定します。 var ef_Upper:ElementFormat = new ElementFormat(); ef_Upper.typographicCase = TypographicCase.UPPERCASE; var ef_SmallCaps:ElementFormat = new ElementFormat(); ef_SmallCaps.typographicCase = TypographicCase.SMALL_CAPS; テキストの回転テキストのブロック、またはテキストのセグメント内の字形を 90 度ずつ回転させることができます。 TextRotation クラスは、テキストブロックまたは字形の回転の設定のために次の定数を定義します。
テキストブロック内のテキスト行を回転させるには、テキスト行を作成する TextBlock.createTextLine() メソッドを呼び出す前に TextBlock.lineRotation プロパティを設定する必要があります。 テキストブロックまたはセグメント内の字形を回転させるには、ElementFormat.textRotation プロパティを文字を回転させる度数に設定します。字形とは、文字を構成するシェイプ、または複数の字形を構成する文字の一部を指します。 例えば「a」1、および「i」の上部の点は、それぞれ字形です。 字形の回転は、行内の文字は回転せずに、行を縦に回転させる一部のアジア系言語で有意義です。 アジア系テキストの回転について詳しくは、東アジア系テキストのジャスティファイを参照してください。 次に、アジア系のテキストの場合に、テキストのブロックおよびその中の字形の両方を回転させる例を示します。 例では日本語のフォントも使用しています。 package { import flash.display.Sprite; import flash.text.*; public class RotationExample extends Sprite { private var tb:TextBlock = new TextBlock(); private var te:TextElement; private var ef:ElementFormat; private var fd:FontDescription = new FontDescription(); private var str:String; private var tl:TextLine; public function RotationExample() { fd.fontName = "MS Mincho"; ef = new ElementFormat(fd); ef.textRotation = TextRotation.AUTO; str = "This is rotated Japanese text"; te = new TextElement(str, ef); tb.lineRotation = TextRotation.ROTATE_90; tb.content = te; tl = tb.createTextLine(null,600); addChild(tl); } } } ElementFormat のロックと複製ElementFormat オブジェクトを任意のタイプの ContentElement に割り当てた場合、その locked プロパティは自動的に true に設定されます。ロックされた ElementFormat オブジェクトを変更しようとすると、IllegalOperationError がスローされます。最善の方法は、TextElement インスタンスに割り当てる前にそのようなオブジェクトを完全に定義することです。 既存の ElementFormat インスタンスを変更する場合は、まずその locked プロパティを確認します。true の場合は、clone() メソッドを使用して、オブジェクトのロックされていないコピーを作成します。このロックされていないオブジェクトのプロパティを変更してから、TextElement インスタンスに割り当てることができます。このオブジェクトから作成された新しい行には新しいフォーマットが適用されます。 この同じオブジェクトから作成された前の行および古いフォーマットは変更されません。 package { import flash.display.Sprite; import flash.text.*; public class ElementFormatCloneExample extends Sprite { private var tb:TextBlock = new TextBlock(); private var te:TextElement; private var ef1:ElementFormat; private var ef2:ElementFormat; private var fd:FontDescription = new FontDescription(); public function ElementFormatCloneExample() { fd.fontName = "Garamond"; ef1 = new ElementFormat(fd); ef1.fontSize = 24; var str:String = "This is flash text"; te = new TextElement(str, ef); tb.content = te; var tx1:TextLine = tb.createTextLine(null,600); addChild(tx1); ef2 = (ef1.locked) ? ef1.clone() : ef1; ef2.fontSize = 32; tb.content.elementFormat = ef2; var tx2:TextLine = tb.createTextLine(null,600); addChild(tx2); } } } |
|