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
Windows の保存確認ダイアログのフォントが変 #1100
Comments
どうやら encoding に依存してるらしい。 |
ふむふむ。表示しているのは、gui_w32.c の |
最近だと、UIフォントは |
あ、ちゃんと |
あと関係ないかもですがボタン幅の最少が "Cancel" という文字で測られてるのも気になりますね。 |
この行がうまく行ってないっぽい。 |
変数に |
あw |
もう1か所ありますね diff --git a/src/gui_w32.c b/src/gui_w32.c
index aa0948843..662638ed9 100644
--- a/src/gui_w32.c
+++ b/src/gui_w32.c
@@ -7298,7 +7298,7 @@ gui_mch_dialog(
/* point size */
*p++ = -MulDiv(lfSysmenu.lfHeight, 72,
GetDeviceCaps(hdc, LOGPIXELSY));
- nchar = nCopyAnsiToWideChar(p, TEXT(lfSysmenu.lfFaceName));
+ nchar = nCopyAnsiToWideChar(p, lfSysmenu.lfFaceName);
}
else
#endif
@@ -7865,13 +7865,13 @@ gui_mch_tearoff(
/* point size */
*p++ = -MulDiv(lfSysmenu.lfHeight, 72,
GetDeviceCaps(hdc, LOGPIXELSY));
- nchar = nCopyAnsiToWideChar(p, TEXT(lfSysmenu.lfFaceName));
+ nchar = nCopyAnsiToWideChar(p, lfSysmenu.lfFaceName);
}
else
#endif
{
*p++ = DLG_FONT_POINT_SIZE; // point size
- nchar = nCopyAnsiToWideChar (p, TEXT(DLG_FONT_NAME));
+ nchar = nCopyAnsiToWideChar(p, TEXT(DLG_FONT_NAME));
}
p += nchar;
} |
あー、lfFaceName は ANSI なのに utf-8 扱いしてるw |
diff --git a/src/gui_w32.c b/src/gui_w32.c
index aa0948843..fe5de501f 100644
--- a/src/gui_w32.c
+++ b/src/gui_w32.c
@@ -4384,7 +4384,7 @@ add_dialog_element(
WORD clss,
const char *caption);
static LPWORD lpwAlign(LPWORD);
-static int nCopyAnsiToWideChar(LPWORD, LPSTR);
+static int nCopyAnsiToWideChar(LPWORD, LPSTR, BOOL);
#if defined(FEAT_MENU) && defined(FEAT_TEAROFF)
static void gui_mch_tearoff(char_u *title, vimmenu_T *menu, int initX, int initY);
#endif
@@ -7285,8 +7285,8 @@ gui_mch_dialog(
/* copy the title of the dialog */
nchar = nCopyAnsiToWideChar(p, (title ?
- (LPSTR)title :
- (LPSTR)("Vim "VIM_VERSION_MEDIUM)));
+ (LPSTR)title :
+ (LPSTR)("Vim "VIM_VERSION_MEDIUM)), TRUE);
p += nchar;
if (s_usenewlook)
@@ -7298,13 +7298,13 @@ gui_mch_dialog(
/* point size */
*p++ = -MulDiv(lfSysmenu.lfHeight, 72,
GetDeviceCaps(hdc, LOGPIXELSY));
- nchar = nCopyAnsiToWideChar(p, TEXT(lfSysmenu.lfFaceName));
+ nchar = nCopyAnsiToWideChar(p, lfSysmenu.lfFaceName, FALSE);
}
else
#endif
{
*p++ = DLG_FONT_POINT_SIZE; // point size
- nchar = nCopyAnsiToWideChar(p, TEXT(DLG_FONT_NAME));
+ nchar = nCopyAnsiToWideChar(p, TEXT(DLG_FONT_NAME), FALSE);
}
p += nchar;
}
@@ -7485,7 +7485,7 @@ add_dialog_element(
*p++ = (WORD)0xffff;
*p++ = clss; //2 more here
- nchar = nCopyAnsiToWideChar(p, (LPSTR)caption); //strlen(caption)+1
+ nchar = nCopyAnsiToWideChar(p, (LPSTR)caption, TRUE); //strlen(caption)+1
p += nchar;
*p++ = 0; // advance pointer over nExtraStuff WORD - 2 more
@@ -7521,7 +7521,8 @@ lpwAlign(
static int
nCopyAnsiToWideChar(
LPWORD lpWCStr,
- LPSTR lpAnsiIn)
+ LPSTR lpAnsiIn,
+ BOOL enc)
{
int nChar = 0;
#ifdef FEAT_MBYTE
@@ -7529,7 +7530,7 @@ nCopyAnsiToWideChar(
int i;
WCHAR *wn;
- if (enc_codepage == 0 && (int)GetACP() != enc_codepage)
+ if (enc && enc_codepage == 0 && (int)GetACP() != enc_codepage)
{
/* Not a codepage, use our own conversion function. */
wn = enc_to_utf16((char_u *)lpAnsiIn, NULL);
@@ -7852,8 +7853,8 @@ gui_mch_tearoff(
/* copy the title of the dialog */
nchar = nCopyAnsiToWideChar(p, ((*title)
- ? (LPSTR)title
- : (LPSTR)("Vim "VIM_VERSION_MEDIUM)));
+ ? (LPSTR)title
+ : (LPSTR)("Vim "VIM_VERSION_MEDIUM)), TRUE);
p += nchar;
if (s_usenewlook)
@@ -7865,13 +7866,13 @@ gui_mch_tearoff(
/* point size */
*p++ = -MulDiv(lfSysmenu.lfHeight, 72,
GetDeviceCaps(hdc, LOGPIXELSY));
- nchar = nCopyAnsiToWideChar(p, TEXT(lfSysmenu.lfFaceName));
+ nchar = nCopyAnsiToWideChar(p, lfSysmenu.lfFaceName, FALSE);
}
else
#endif
{
*p++ = DLG_FONT_POINT_SIZE; // point size
- nchar = nCopyAnsiToWideChar (p, TEXT(DLG_FONT_NAME));
+ nchar = nCopyAnsiToWideChar(p, TEXT(DLG_FONT_NAME), FALSE);
}
p += nchar;
} こうか |
ついでにここもおかしかった?
|
パッチ後の画像でしょうか? |
パッチ前の環境です。 Windows 10 Home 64bit gvimはkaoriyaさん最新ビルド(596)です。 |
HiDPI対応が不十分なのかもしれません。 |
ひとまず patch 8.0.1150 |
ダイアログ幅の最大が 400px でハードコードされてるので、フォントの設定が大きいと被るんでしょうね。 |
この2件は別件でしたが、 vim/vim#9525 に修正を入れました。 |
8.2.4109: vim/vim@c81e9bf |
Windows7 64bit, Windows10 64bit Vim 8.0.1146
Vim の GUI ダイアログは CreateDialogIndirect を使って動的に作っているのだけど、そのフォントサイズの算出方法がどこかで間違ってる。以下、上が gvim、下がメモ帳。
また本来なら「保存しますか?」というテキストだが、収まっておらず「保存します」が表示されてしまっている。
The text was updated successfully, but these errors were encountered: