TextField の余白(2)
2009/04/06 20:58 - AS3.0
TextField を BitmapData に draw するときに余白を断ち切りたい話、前回から続く。
まずは復習の意味もかねて 2pixel の縁取りを裁ち切るにはどうするかについて。
これは簡単ですね。2pixel ってサイズが固定しているんだから。 以下のようにすれば良し。
TextField のインスタンスは fld、BitmapData のインスタンスは bmd とします。 fld.autoSize = TextFieldAutoSize.LEFT; を指定しておくのを忘れずに。
このように、断ち切りたいサイズが分かっているなら BitmapData 生成時は断ち切りたいサイズを差し引いた値を縦横に指定し、BitmapData.draw の第2引数の Matrix の tx、ty で、断ち切りで残したい Rectangle の左上座標を調整すれば良いわけです。
では textField のプロパティで余白の値が検出できるのか否か? 検出できるなら何も問題が無いわけですが、ライブヘルプを当てってみましょう。
flash.text パッケージを見てみると、今回の件に関係ありそうなクラスは TextField と TextLineMetrics のふたつ。
もうひとつ TextExtent ってクラスがありますが、何すかコレ? Air 専用?
私の環境では CS3 でも FlashDevelop + Flex でも解釈できませんが、プロパティを見ると TextLineMetrics とおんなじようなものっぽいんで今回は無視します。
まず TextField クラスですが、サイズに関わるプロパティは以下の4つ。
- width
- height
- textWidth
- textHeight
これらは前回の図1の説明でみたように、今回断ち切りたい余白が含まれたサイズなので利用不可。
TextField のメソッドに getCharBoundaries という一見使えるかもしんないと思わせるものがありますが、これも今回の事例では使えません。getCharBoundaries については「モーションタイポ再び (3)」あたりを参照ください。
じゃあ TextLineMetrics の方はどうなのよ?
このクラスは TextField.getLineMetrics(行番号); で取得します。 ちょっと試してみたんですが、このクラスのプロパティも使えない模様。
TextLineMetrics の width と height は TextField の textWidth と textHeight にそれぞれ一致しました。 また ascent と descent の合計は TextLineMetrics の height、つまり TextField の textHeight に一致します。
うーん、それじゃあダメだなあ。 別の道を模索しなくては
以下 次回。
参考エントリー(getCharBoundaries 関連)