クリップボードのエラーをキャッチできるようにしてから、その後一回も発生しないんで、なんでなん?って思いながら折り返しのテストを進めています。もーすぐ終わりそうなんですが、1個気になる点が…。
気になる点
自作エディタは折り返し情報を差分で作ってますって書いたんですが、完全差分じゃないんです。実際は折り返しボタンが押されると、論理行分の折り返し情報を作っています。
例えば、100万行のテキストに対して折り返しボタンを押すと、100万行の基本情報となる折り返し情報を作成しています。
もうちょっと詳しく説明
意味がよくわからないと思うのですが、一旦、論理行のコピーを物理行としているイメージです。そしてコピーした物理行に対して折り返し計算しています。
こうすることで、折り返さない場合は論理行だけみればいいし、折り返している場合、物理行だけみればいいようにしています。ようするに実装都合です。
こーしないとこの行は論理行見て、この行は物理行見てとかしないといけなくなり大変でした。
ん?詳しく説明が…。
詳しく説明が詳しくないのでよーわからんかもしれませんね…。
でも、話を先に進めます。せっかく高速化のために、全行折らないようにしたのに、これでいいのかと思うようになりました。基本的に画面に表示する行だけあればOKなので、見えない行の折り返し情報は完全にゴミになります。
で、どーするのか?
完全差分折り返しを目指そうと思います(結局やるんかい!)実装はややこしくなるのですが、ほんとに画面に表示している行だけを折り返すように修正します。
試してみたら1000万行(1000万行好きやなー)折り返すのに10秒くらいかかるところが、一瞬です。やる価値はあるかと。
こんな感じになる予定です
左が修正前です。右がこれから目指す目標です。ウィンドウのサイズ変更でももっさりしません。めちゃくちゃ速くなりそうです。
おわりに
はい。気になったら止まらないですね。だから完成しないんですが。でもね、折り返しの実装当初は1000万でもサクサク予定だったんですよね。んで、実装できひん!とかなって今の仕様になりました。
もっかいやってみてだめなら今の仕様でいけばいいので。って感じです。
コメント