Hatena::Groupactionscript

ConquestArrow.addEventListener();

2008-07-26

[]つくりかけテキストビューコンポーネント「TextView」 02:14 はてなブックマーク - つくりかけテキストビューコンポーネント「TextView」 - ConquestArrow.addEventListener();

1年ぶりぐらいの記事。仕事が変わったのでほとんどAS3に触れてない。このままではただの放置なので、ずっと暖めているものについて。

TextView

f:id:ConquestArrow:20080726012707p:image

つくりかけのテキストビューワ。以下の機能が実装済み。

  1. 行番号表示
  2. 行の折り返し
  3. キーワード色分け
  4. C++風コメント色分け
  5. 引用符文字列色分け(C/C++風)
  6. 背景色設定
  7. フォント設定
  8. フォントカラー指定
  9. タブ・改行文字表示
  10. 全角スペース強調

およそ一般的なテキストエディタの機能のうち描画部分に関してはあるていどできている。

目標と現状

もともとは自分の納得するテキストエディタがないので、じゃあ自分で作ればいいじゃん、という無謀な考えで開発を始めた。目標はテキストエディタコンポーネントとそれを利用したAIR製のテキストエディタを作ることである。TextViewはまずその基本となるテキストビューワ機能の実装を目指したもので、1年以上ちょっとずつ開発して、現時点では機能的にはあるていど出来ている。

ただし、パフォーマンス上の問題が解決せず、ずっと放置状態になっている。

TextViewはもともとはTextFieldの拡張を当初は考えてある程度実装したが、気に入らなかったので1文字を表示するだけのTextFieldインスタンスを作ってBitmap生成の元としてのみ利用している。そのため、文字数の分だけビットマップのコピーが発生し、実用的な速度が得られていない。具体的には、1行スクロールに100 msec単位の実行速度が必要であり、テキストビューワとしてはありえない速度である。

いくつかの最適化とビットマップのキャッシュを取る様な仕組みを導入して速度は10分の1になった。が、バグ入りで、ある特定のタイミングで行の描画が被るという情けない状況に…。あるていどはバグを追いかけたが気力が尽きてそのままになっている。

バグはやる気が復活すればなんとかなりそうだが、その先にもまだ問題が残っている。テキストエディタ化するには文字入力に対応する必要がある。が、Flash PlayerでIMEを弄ることができるのはTextFieldクラスのみであり、アクロバティックな手法をとらざるを得ないことが予想できる。前途は多難である。

ちなみに、FP10(Astro)のFTEはいい感じに内部まで触れるのはとてもいいのだが、やはりIME関連は対応してない…。Flashも所詮シングルバイト圏ソフトなのだなぁと思う今日この頃である。

ゲスト



トラックバック - http://actionscript.g.hatena.ne.jp/ConquestArrow/20080726