Text Layout Framework 1st step
最近CS5の虎の子であるTLF周りを触っているので軽くメモ。
1.flashX
TLFの実体は flashx.textLayout というパッケージである。ここで気になるのは"flashx"という見慣れないパッケージ。そう、"flash"では無いのだ。これがflash+FP10(X)によるものなのか、flash+mxによるものなのか、 あるいは両方なのか、それとも全く違う理由なのかよくわからないがちょっぴり不思議な感じ。
2.TextFieldとは全くの別物。
TextFieldの流れが
- インスタンスを作る
- テキストを追加
TLFでは
- インスタンスを作る
- テキストを追加
- 表示リストを登録
- 表示を更新する
3.TextFieldライクに使うならTLFTextFieldがおすすめ
fl.text.TLFTextFieldというコンポーネントが存在する。IDE上でTLFを生成すると自動的にこのクラスを使う事になる。TextFieldと親和性の高いAPIを持つ。ひょっとするとflパッケージの中で今後最も使われるクラスになるかもしれない。キラークラス(?)だ!
4.コードの比較
TLF
import flashx.textLayout.elements.*; import flashx.textLayout.container.ContainerController; import flashx.textLayout.edit.EditManager import flash.display.Sprite; var tfw:TextFlow = new TextFlow(); tfw.interactionManager = new EditManager(); tfw.fontSize = 18; var p:ParagraphElement = new ParagraphElement(); tfw.addChild(p) var span:SpanElement = new SpanElement() span.text = "hello world TLF"; p.addChild(span) var sp:Sprite = addChild(new Sprite) as Sprite sp.x = 10 sp.y = 10; tfw.flowComposer.addController(new ContainerController(sp,200,20)) tfw.flowComposer.updateAllControllers();flash.text.TextField;
import flash.text.TextField; import flash.text.TextFormat; import flash.text.TextFieldType; var tf:TextField = addChild(new TextField) as TextField; tf.defaultTextFormat = new TextFormat(null,18) tf.type = TextFieldType.INPUT; tf.text= "hello world TextField" tf.width = 200 tf.x = 10 tf.y = 40;fl.text.TLFTextField;
import fl.text.TLFTextField; var tlf:TLFTextField = addChild(new TLFTextField) as TLFTextField; tlf.textFlow.fontSize = 18 tlf.type = TextFieldType.INPUT; tlf.text= "hello world TLFTextField" tlf.width = 200 tlf.x = 10 tlf.y = 80;
個人的にすきなところ
縦書きは待望の機能だったが、同じくらい嬉しいのが「複数のContainerControllerでもセレクションが途切れない」という超々地味な仕様。さらにhtmlのマークアップも途切れずに表現してくれるのだ。
TextFieldに置き換えて言えば「複数のTextFieldでもセレクションが途切れない、htmlのマークアップも途切れない」と言う事だ。これが如何に重大な事件か、マルチカラムレイアウトをTextFieldを使い力技で実装した事のあるFlasherなら大いに賛同してくれるはずだ。 だが、如何にマークアップを補完したとしても、セレクションに関しては涙をのまざるを得なかった。
しかし、そう、我々はついに手に入れたのだ!途切れる事泣きセレクションを!
という訳で長くなったのでここまで。次回は主要なクラスの紹介です(時間があれば)