2016/04/15
■ [変愚蛮怒/開発]変愚蛮怒中のフォント変更処理に関する備忘1
変愚蛮怒をデバッグトレースして得た処理の流れ
- Windows標準のメニューバーの定義は、srcフォルダ中のangband.rc(日本語版)及びang_eng.rc(英語版)で行われている。
- メインウィンドウからサブウィンドウ1~7のフォント変更処理のIDは210~217。これらはmain-win.c中でもdefineされている。
- メニューバーのハンドラ処理は、AngbandWndProcが受け取り、uMsgがIDM_WINDOW_FONT_[0-7]ならば、term_change_font()に処理を回す。
- term_change_font()中でWindows標準ダイアログのChooseFontを開きterm_change_font()のローカル変数であるCHOOSEFONT cf;に変更フォント情報を収める。
- ChooseFontがtrueを返したならばさらに以下の処理を行う。
- 各ウィンドウの情報を収めたterm_data構造体をterm_force_font()関数に渡して、フォントファイルからCreateFontIndirect()でフォント情報を読み込み直す。その際フォントの標準的な縦横サイズを受け取って、term_data構造体のfont_wid,font_hgtに収める。
- tile_wid, tile_hgtに先程収めたfont_wid,font_hgtを代入。
- term_getsize()とterm_window_resize()を通じて、現在のコンソールの行、列の数を維持したまま、フォントサイズの変更に伴ってウィンドウサイズをリサイズする。
英語版*bandからの変更
- 英語版*bandは基本的にttfに対応せず、fon形式のみ用いている(変愚蛮怒のプリプロセッサ分岐でグレーアウトさせられている箇所、及びほぼ最新のAngband4.0.4でも現状を確認)
- フォントファイルの指定方法も、ChooseFont()でなくGetOpenFileName()を使っている。
- Angband4.0.4はフォントサイズ変更に伴う、1マスあたりのサイズ変更や、ウィンドウサイズの変更は未実装である。