| パッケージ | flashx.textLayout.compose |
| インターフェイス | public interface ISWFContext |
| 実装者 | TextContainerManager |
| 言語バージョン: | ActionScript 3.0 |
| ランタイムバージョン: | Flash Player 10, AIR 1.5 |
アプリケーションは、次の 2 つの理由により、TextLine 作成の制御にこのインターフェイスを使用します。
- 埋め込みフォントの再利用:アプリケーションで、ロードした SWF ファイル内の埋め込みフォントを使用する場合、ロードした SWF ファイルのコンテキストで TextLine が作成されていれば、アプリケーションはその埋め込みフォントにアクセスできます。
-
既存の TextLine インスタンスの再利用:既存の TextLine インスタンスを再利用することで、再構成に要する時間が短縮されます。TLF は、既存の TexeLine インスタンスを内部的に再利用します。TLF は、TextLine がまだ存在していると認識したときに、
TextBlock.createTextLine()ではなくTextBlock.recreateTextLine()を呼び出すことによって、TextLine を再利用します。
アプリケーション内に、再利用可能な他の TextLine インスタンスがある可能性があります。既存の TextLine インスタンスを手動で再利用するには、次の手順に従います。
-
TextBlock.createTextLineの呼び出しをトラップします。 -
TextBlock.createTextLine()ではなく、存在している TextLine インスタンスを指定してTextBlock.recreateTextLine()を呼び出します。
ただし、TextBlock.recreateTextLine() を使用できるのは、Flash Player 10.1 以降のみであることに注意してください。
関連する API エレメント
| メソッド | 定義元 | ||
|---|---|---|---|
クライアントで制御されるコンテキストでメソッドを呼び出す方法です。 | ISWFContext | ||
callInContext | () | メソッド |
public function callInContext(fn:Function, thisArg:Object, argArray:Array, returns:Boolean = true):*| 言語バージョン: | ActionScript 3.0 |
| ランタイムバージョン: | Flash Player 10, AIR 1.5 |
クライアントで制御されるコンテキストでメソッドを呼び出す方法です。
パラメーター
fn:Function — 呼び出す関数またはメソッド
| |
thisArg:Object — 関数の this ポインター
| |
argArray:Array — 関数の引数
| |
returns:Boolean (default = true) — true の場合、関数は値を返します
|
* — 関数から返されるものすべて(返された場合)
|
関連する API エレメント
EmbeddedFontLineCreator クラスは、ISWFContext を実装してフォントを埋め込みます。他のクラスは、EmbeddedFontLineCreator に基づいて SWF ファイルをロードして、埋め込みフォントにアクセスできます。
package flashx.textLayout.compose.examples {
import flash.display.Sprite;
import flashx.textLayout.compose.ISWFContext;
public class EmbeddedFontLineCreator extends Sprite implements ISWFContext
{
[Embed( source="C:\\Windows\\Fonts\\BirchStd.otf", fontFamily="embeddedBirchStd", cff="embedAsCFF",
unicodeRange="U+0041-U+005A, U+0061-U+007A, U+003F")]
public var embeddedBirchStdFont:Class;
public function callInContext(fn:Function, thisArg:Object, argsArray:Array, returns:Boolean=true):*
{
if (returns)
return fn.apply(thisArg, argsArray);
fn.apply(thisArg, argsArray);
}
}
}
FontConsumer クラスは、EmbeddedFontLineCreator.swf ファイルをまずロードして、ロード関数が正しく完了するのを待ちます。ロードが正しく完了したら、createFlow() というイベントリスナー関数がテキストコンテナとテキストフローを作成します。次に、このイベントリスナーがフローコンポーザーを作成して、ロードされた SWF ファイルをフローコンポーザーの swfContext プロパティに関連付けます。この関連付けにより、ロードされた SWF ファイルのコンテキスト内で、FontConsumer インスタンスがメソッドを呼び出せるようになります。EmbeddedFontLineCreator のコンテキストにアクセスすることにより、FontConsumer インスタンスは、EmbeddedFontLineCreator の埋め込みフォントを使用できるようになります。
package flashx.textLayout.compose.examples {
import flash.display.Loader;
import flash.display.Sprite;
import flash.events.Event;
import flash.net.URLRequest;
import flash.text.engine.FontLookup;
import flashx.textLayout.compose.StandardFlowComposer;
import flashx.textLayout.container.ContainerController;
import flashx.textLayout.conversion.TextConverter;
import flashx.textLayout.elements.Configuration;
import flashx.textLayout.elements.TextFlow;
import flashx.textLayout.formats.TextLayoutFormat;
public class FontConsumer extends Sprite
{
private var fontSWF:Loader = new Loader();
public function FontConsumer()
{
var fontSWFURL:URLRequest = new URLRequest("EmbeddedFontLineCreator.swf");
fontSWF.contentLoaderInfo.addEventListener( Event.COMPLETE, createFlow );
fontSWF.load( fontSWFURL );
}
private function createFlow( event:Event ):void
{
var container:Sprite = new Sprite();
this.addChild( container );
var controller:ContainerController = new ContainerController( container, 600, 700 );
var format:TextLayoutFormat = new TextLayoutFormat();
format.fontFamily = "embeddedBirchStd";
format.fontLookup = FontLookup.EMBEDDED_CFF;
var config:Configuration = new Configuration();
config.textFlowInitialFormat = format;
var flow:TextFlow = TextConverter.importToFlow( "Shall I compare thee to a summer's day?", TextConverter.PLAIN_TEXT_FORMAT, config );
flow.flowComposer = new StandardFlowComposer();
var embeddedFontLineCreator:Class = fontSWF.contentLoaderInfo.applicationDomain.getDefinition( "flashx.textLayout.compose.examples.EmbeddedFontLineCreator" ) as Class;
flow.flowComposer.swfContext = new embeddedFontLineCreator();
flow.flowComposer.addController( controller );
flow.flowComposer.updateAllControllers();
}
}
}
Tue Jun 12 2018, 10:34 AM Z