-
Notifications
You must be signed in to change notification settings - Fork 167
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
印刷ページ設定ダイアログのフォントが巨大化する問題を修正 #1682
印刷ページ設定ダイアログのフォントが巨大化する問題を修正 #1682
Conversation
Kudos, SonarCloud Quality Gate passed! |
✅ Build sakura 1.0.3798 completed (commit b4b5c25606 by @suconbu) |
@@ -185,13 +185,13 @@ BOOL CDialog::OnInitDialog( HWND hwndDlg, WPARAM wParam, LPARAM lParam ) | |||
// Modified by KEITA for WIN64 2003.9.6 | |||
::SetWindowLongPtr( m_hWnd, DWLP_USER, lParam ); | |||
|
|||
m_hFontDialog = UpdateDialogFont( hwndDlg ); | |||
|
|||
/* ダイアログデータの設定 */ | |||
SetData(); | |||
|
|||
SetDialogPosSize(); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
この行もSetData()の前に移動した方が良さそうです。
👆ダイアログの表示位置を調整する処理なので、描画を行う前のほうが良いはずです。
PR趣旨とは関係なさそうなのでスルーでいいです。
LOGFONT lfCreate = lf; | ||
LOGFONT lfDialogFont = {}; | ||
::GetObject( GetDialogFont(), sizeof(LOGFONT), &lfDialogFont ); | ||
lfCreate.lfHeight = lfDialogFont.lfHeight; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ここは -abs(lfDialogFont.lfHeight)
とかにしなくていいんでしたっけ?(自信ない
lfHeightに負数を指定すると対象フォントに指定サイズがなくても近似するサイズを選択してくれる、という仕様があった気がします(正数だと該当サイズがなければ失敗だったような。
自信ないのでコメントのみです。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ここは #1421 反映前のこの箇所と同じやり方としました。
sakura/sakura_core/dlg/CDlgPrintSetting.cpp
Lines 159 to 162 in cb41fc4
m_hFontDlg = (HFONT)::SendMessage( GetHwnd(), WM_GETFONT, 0, 0 ); // ダイアログのフォント | |
LOGFONT lf; | |
::GetObject(m_hFontDlg, sizeof(LOGFONT), &lf); | |
m_nFontHeight = lf.lfHeight; // フォントサイズ |
なお、
https://docs.microsoft.com/en-us/windows/win32/api/wingdi/ns-wingdi-logfonta
こちらによると正/負どちらも近似サイズを選択するというのは共通していますが、
- 正数の場合は「(character) cell height」 ("Â" 等の "^" が置かれる部分を含んだ高さ)
- 負数の場合は「character height」("Â" 等の "^" の部分は除いた高さ)
ということでした。
正負が逆になると寸法が変わることを意味しますので、今回のケースではありのまま代入するのが正解のようです。
レビューありがとうございます。 |
無事動作確認が完了しましたのでマージします。 |
PR の目的
本 PR では #1678 の「再現手順」の操作をした時に起きる以下の問題点を解消します。
カテゴリ
PR の背景
目的に記載の通りです。
PR のメリット
不具合が解消されます。
PR のデメリット (トレードオフとかあれば)
特にありません。
仕様・動作説明
1. 印刷ページ設定ダイアログのフォントが巨大化する
CDialog::OnInitDialog における CDialog::m_hFontDialog の設定タイミングに問題があります。
SetData の先 (CDlgPrintSetting::SetFontName) で参照がされる可能性があったにも関わらず、現状はそれよりも後に初期化がされています。
sakura/sakura_core/dlg/CDialog.cpp
Lines 182 to 197 in 81f08b1
対策内容:
2. ヘッダー/フッター設定のフォント名の描画に、選択されたフォントが適用されていない
CDialog::OnInitDialog における UpdateDialogFont の呼び出しタイミングに問題があります。
SetData の先 (CDlgPrintSetting::SetFontName) で STATIC コントロールに対して専用のフォントが設定される場合があるにも関わらず、その後、UpdateDialogFont -> SetFontRecursive が呼び出されることで、システムフォント相当のフォントで上書き設定されてしまっています。
対策内容:
3. ヘッダー/フッターのフォント名のサイズが大きすぎる
CDlgPrintSetting::OnInitDialog における CDlgPrintSetting::m_nFontHeight の設定タイミングに問題があります。
そのため CDlgPrintSetting::SetFontName (CDialog::OnInitDialog を経由して呼ばれる) におけるフォントハンドル作成時の高さ (LOGFONT::lfHeight) に 0 が指定されてしまいます。
sakura/sakura_core/dlg/CDlgPrintSetting.cpp
Lines 163 to 168 in 81f08b1
sakura/sakura_core/dlg/CDlgPrintSetting.cpp
Lines 910 to 915 in 81f08b1
対策内容:
PR の影響範囲
印刷ページ設定ダイアログの見た目に影響があります。
CDialog::m_hFontDialog の初期化タイミングが変化したことで、CDialog クラスを継承しているダイアログボックスのうち、CDialog::GetDialogFont() を呼び出しているものについて動作が変わる可能性がありますが、それに該当するクラスは CDlgPrintSetting のみでした。
テスト内容
※見た目の判断が必要なため手作業による確認を行います。
効果確認
弊害確認
関連 issue, PR
#1678
#1421
参考資料