Oct 22, 2008

ルーラーバー 0.3.2008102201

Ruler Bar更新した。結局、今までのやり方はほとんど全部うっちゃって、ピクセル単位で位置合わせするようにした。

ピクセル単位で現在のカーソル位置を取得するには、カーソル位置=長さ0の選択範囲の位置に何かダミーの要素を挿入して、その要素の画面上でのX座標を取得すればいい。ただ、メール本文の編集中にこれをやると、場合によっては再描画とかノードがブツ切りにされまくるとかでかなり怖いことになるんじゃないだろうかという心配があったり、そもそもテキストノードの切断を伴うような処理をやると選択範囲が失われる(=カーソルが一時的に消える)のでその復活のための処理が面倒だったり、といくつかの理由があってこの方法を採るのをずっとためらってた。

でも上手い解決方法を思いついたので、今回この方法に切り替えることにした。

種を明かすと、非表示のフレームを一つ用意しておいて、編集中のメール本文のうちカーソルがある段落の箇所だけをその隠しフレームに複製して、そっちでテキストノードの切断を伴うような処理をやってる。フォントや文字の大きさ、body要素の幅などを合わせてやれば、そこで起こる折り返しは基本的に本物と全く同じ結果になるはずなので。編集されるのは複製の方で、しかもカーソル前後の段落だけ抜き出したものだから、ノードを切り刻んでも再描画のコストは最低限で済んでる……と思う。

エントリを編集します。

wikieditish message: Ready to edit this entry.











拡張機能