背景

  • ドキュメントの行情報構築は O(N) (※ N は文章サイズ)時間を要する。
    文書サイズが大きくなればそれなりの時間を要する。
  • ビュー行情報の構築も同じく O(N) であるが、QFontMetrics を行表示を計算して1行の文字数を決定しなくてはならず、
    ドキュメント行情報構築よりはるかに処理時間を要する。
  • ブロック情報が必要なのは、画面表示時・垂直スクロールバー情報更新時である。

設計

  • ビュー行情報は一度に全部を更新せず、画面に表示するテキスト部分のみ優先的に更新し、残りは遅延評価を行うこととする。
  • ビューは評価済みブロック範囲情報を保持するものとする。
  • 評価済み範囲情報としては、ビューブロックインデックス、テキスト位置に加え、ドキュメントブロックインデックスを保持する。
  • 垂直スクロールバー情報更新時には評価済み範囲はそのブロック数、それ以外はドキュメントブロック数を参照するものとする。
  • 話を単純化するために、ひとつの gap_vector<size_t> でビュー行情報を表すことにする。
    • gap_vector<size_t> の要素はレイアウトされたブロック長を表すものとする。
    • 値が0の場合は未レイアウト状態であることを表す。
    • 要素数が表示ブロック数となる。

レイアウト処理