テキストコントロール

ここ2週間、VSE用にテキストコントロールを作成していました。
VisualSceneEditorには、C#のコードを書く機能があるのですが、これまではRichTextBoxを張っていただけで、非常に雑なものでした。
せめて、コードの色分けくらいはしたかったのですが、RichTextBoxだと色々面倒(色変えするにはRtfをいじる必要アリ。しかも遅い)、TextBoxはオーバーライドしても表示部分が変えられない等の理由でこれまで放置していました。
また、HyperPageProjectさんのFootyも試してみたのですが、.NET上に張るとどうも上手く動かない。(なんか、表示されない)Controlを継承していないのでビジュアルエディタで扱えないなどなどの理由で腹が立ったので、1からテキストエディタコントロールを作りました。

それほど長いテキストを扱う予定はないので、最初は適当に実装しようと思ったのですが

  • IMEの呼び出しに手間がかかる
  • カーソルを正しい位置うまくに表示できない
  • マウスでの選択なども自分で作成
  • その他色々と細かい振る舞いを自分で作成

しなくてはならなくて、大変でした。
で、いざやってみると描画が重くて使う気にならず、描画画像をキャッシュして差分だけを描画したりと最適化を行って…そこそこ軽くはなったが、他のテキストエディタみたいにさくさく動かない….NETが悪いのか、僕のプログラムが悪いのか。たぶん、僕のプログラムが悪いのだろう…
面度なので適当に切り上げて、キーワードの色変え部分を実装して、コメントアウトや文字列部分の色を変えて、ついでにクラス名の色を変えて…コメントアウトや文字列部分の色替えを正しく行うには、字句解析っぽいことをやらないといけなくて、テキスト入力ごとに全文の解析を行うと微妙に重いので、編集中の行だけ行うようにしたりと…クラス名の色変えも正しくやるにはもっと賢いことをしないと。。。


でもって、VSEに張ってみました。


多少のバグがありますが、結構それっぽく動くようになりました。
ここまでやると、コード補完とかインテリセンスっぽいものをつけたくなりますね〜


テキストエディタなんて、自分で書くもんじゃないです。まぁ、書いちゃったから使うけど。
いや、VisualStudioってホント偉大ですね。