Kengo Ide

Results 3 issues of Kengo Ide

## やりたいこと ミニマップとは、[設定]→[ミニマップを表示]でビューの右側に表示される、縦長で編集不可のビューのことです。文書の全体像が一目で分かるように極小フォントを使って描画され、マウスクリックひとつで該当箇所までスクロールできるようになっています。 このミニマップ、エディタの編集画面とは大きく機能が異なりますが、プログラム上では編集画面と同じコードを共有して作られています。具体的には CEditView の m_bMiniMap フラグをいろいろな場所で判定してすべての動作を切り替えており、現在は39箇所で判定を行っています。編集画面とミニマップのコードが共有されていることにより、どちらか一方に対しての機能の追加・修正の際にもう一方を壊していないか注意深く確認する必要が生まれているため、これを解決したい課題とみてミニマップを別のクラスに分離できないかを検討したいと思っています。 ## 現在のミニマップのおおまかな仕様 - 文書の内容を極小フォントで描画します。 - 編集画面に表示されている範囲の背景に色が付きます。 - 行番号・ルーラーは表示されません。 - 文字の間隔・行の間隔は0固定です。 - 行の折り返しはしません。 - マウスホイール操作で10行分スクロールします。 - 横方向のスクロールはできません。 - マウスクリックで該当行まで編集画面がスクロールします。 - マウスドラッグに追従して編集画面がスクロールします。 - マウスホバーで該当行以下4行の内容をツールチップに表示します。...

refactoring
research

## 問題内容 #1514 の概要と少し重複しますが、サクラエディタには文字の描画幅をキャッシュする仕組みがあります。キャッシュのメモリ領域としてフォント1つあたり2バイト×65536のメモリを確保しており、メモリ領域の場所は以下の通りです。 - 共通設定フォントのキャッシュは**プロセス間共有メモリ**に置かれます。 - 以下のその他のフォントのキャッシュはエディタプロセスのアドレス空間に確保されます。 - タイプ別設定フォント - 一時設定フォント - 印刷プレビュー用フォント - ミニマップ用フォント 共通設定フォントのキャッシュをプロセス間で共有することで、キャッシュのヒット率の向上とメモリ使用量の削減を狙っているのだと思います。問題ではないかなと思うのは、キャッシュ機構が複数プロセスの同時アクセスを防止する仕組みを利用していないことです。 共有メモリ(=メモリマップトファイル)の同じ位置に複数のプロセスが同時に書き込む操作は安全ではありません。文字幅キャッシュの場合、特定の文字の情報が存在しなかった場合には新たに文字の情報を書き込む操作が行われるので、複数のプロセスが同じ瞬間に同じ文字の情報を参照すると競合してデータが壊れる可能性があります。 あまり起こらなさそうに思える状況ですが、起こらない保証もありませんから、いつかどこかで起きると思って対策した方がいい気がします。 ## 問題のカテゴリ - 仕様の問題

# PR対象 #1938 への対応**案**です。現時点ではレビューに値するものではなく、「こんなことやってます」という軽い進捗共有とお考えください。 - アプリ(サクラエディタ本体) ## カテゴリ - 改善 - 不具合修正 ## PR の背景 ## 仕様・動作説明 ## PR の影響範囲 ## テスト内容 ## 関連 issue, PR ## 参考資料