-
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
フォントラベルのHighDPI対応 #645
フォントラベルのHighDPI対応 #645
Conversation
選択したフォントをサイズ含めて表示するラベルの文字が、HighDPI環境で小さくなる事象への対応。 フォントサイズの上限値がHighDPI対応してなかっために強制的に小さなフォントで描画されていた。 上限値をHighDPI対応にすることでこの問題を回避する。
共通設定のプロパティシートのタブの一番下が半分くらい切れて表示されているのは一体…。 |
sakura_core/prop/CPropCommon.cpp
Outdated
// 大きすぎるフォントは小さく表示 | ||
if( lfTemp.lfHeight < -16 ){ | ||
lfTemp.lfHeight = -16; | ||
int limitSize = DpiScaleY( 16 ); |
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.
DpiScaleY
の実装はこうなっていて、
inline int DpiScaleY(int y){return CDPI::ScaleY(y);}
CDPI::ScaleY
の実装はこうなっていますが、
static int ScaleY(int y){Init(); return ::MulDiv(y, nDpiY, 96);}
LOGFONT::lfHeight
の値って、
lfHeight = -MulDiv(PointSize, GetDeviceCaps(hDC, LOGPIXELSY), 72);
こういうように設定するようにドキュメントに書かれているので画面座標のDPI対応で使う 96
という数値がフォントの場合にも適用できるか心配です。
しかし 96 とか 72 とか経緯が不明です…。
https://en.wikipedia.org/wiki/Dots_per_inch#Computer_monitor_DPI_standards
に書かれてそうなのですが tl;dr: です…。
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.
こういうように設定するようにドキュメントに書かれているので画面座標のDPI対応で使う 96 という数値がフォントの場合にも適用できるか心配です。
その辺こだわりなかったので純粋に比率で拡大するようにしました。
72とか96とかについては、前にここで書いてます。
#471 (comment)
この数式を使う場合は、引数のnpsを渡して算出してやる形になるのかな、と思います。
lfHeight = -MulDiv(PointSize, GetDeviceCaps(hDC, LOGPIXELSY), 72);
・・・この数式ってポイントサイズ⇒ピクセルサイズの変換式じゃないですかね?
ポイントという単位は 72 が関係する単位だったと思います。
ちょっと調べてみます。
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.
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.
https://opentype.jp/pointdot.htm
1ポイントは1/72インチに相当します。(1/72は72分の1を現します。)
という事なのでフォントの場合は 96 より 72 を使ってあげた方が良いと思います。
テストは
これは気付いていませんでした。 |
しかしキーワードヘルプに使うフォントのラベル表示ですが、指定したフォントでダイアログ内に描画するというのがそもそも ダイアログ内ではどのフォントを選択したかを文言で表示するだけにしておいて、わざわざ指定したフォントで描画まではしなくて良いんじゃないかなぁと思ってしまいます…。 |
表示言語が en というのは、Windows の表示言語が、って事ですかね。
4枚のスクリーンショットのうち、2枚目以降で発生しています。 |
2013年当時・・・ぶっちゃけこの頃は勝手にやってる雰囲気です。 |
Windows の表示言語を English (United States) にして確認しましたがタブが見切れるのは再現しませんでした。スクリーンショットの問題なのか、それとも表示倍率を変えてからサインアウトしていないと起きてしまうとかなんでしょうか…? |
そうです。
いまやると見切れない・・・ |
固定値16ptをlfHeightと直接比較するのをやめ、DPI変換した値で比較する。lfHeightの値は既にDPI変換されているので修正箇所は16ptのほうだけ。
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.
動作確認してみました。問題無いと思います。
…_label フォントラベルのHighDPI対応
概要
#471 で上がってる問題の一つです。
#639 の対応を確認しようとしたら気になったので対応します。
対応の説明
選択したフォントをサイズ含めて表示するラベルの文字が、
HighDPI環境で小さくなる事象への対応です。
このラベルは、指定したフォントサイズに応じて文字が大きくなる仕様なんですが、
ダイアログではラベルサイズを動的に変えたりするのがめんどうなので
一定の大きさを超えたらそれ以上大きくしないようになっています。
フォントサイズの上限値がHighDPI対応してなかっために
強制的に小さなフォントで描画されてしまっていました。
上限値をHighDPI対応にすることでこの問題を回避します。
対応箇所は2か所あります
が、タイプ別設定のほうは該当箇所の表示方法が分かりませんでした。対応前後比較
タイプ別設定の出し方が分かったので追記
(思いっきり見切れてる件はこのPRで対応すべきなんだろうか・・・?)