Closed rapidexp closed 11 years ago
ありがとうございます。 一応直してみました。
メモ。
MS ゴシック
のまま
IPAゴシック
とかにはしないChooseFontP::add_font_name
(ChooseFont.cc)FontSet::load_params
(font.cc)ChooseFontP::add_font_size
(ChooseFont.cc)print_settings::make_font
(print.cc)EnumFontFamiliesEx が返すフォントの順番はロケールを考慮したものになってそうなので 単純に先頭のものを使うようにする (Wine も同じ)
MS ゴシック [128] # 128 = SHIFTJIS_CHARSET
MS ゴシック [0] # 0 = ANSI_CHARSET
MS ゴシック [161] # 161 = GREEK_CHARSET
MS ゴシック [162]
MS ゴシック [186]
MS ゴシック [238]
MS ゴシック [204]
Courier New Baltic
Courier New CE
Courier New CYR
Courier New Greek
Courier New TUR
EnumFontFamilies テストプログラム。
#include <stdio.h>
#include <windows.h>
static int CALLBACK
enum_font_proc (ENUMLOGFONT *elf, NEWTEXTMETRIC *, int type, LPARAM lparam)
{
if (*elf->elfLogFont.lfFaceName == '@'
|| (elf->elfLogFont.lfPitchAndFamily & 3) != FIXED_PITCH)
return 1;
char face[256];
WideCharToMultiByte (CP_OEMCP, 0, elf->elfLogFont.lfFaceName, -1, face, 256, 0, 0);
printf("%s [%d]\n", face, elf->elfLogFont.lfCharSet);
(*((int *)lparam))++;
return 1;
}
static void
print_font_families (HDC hdc)
{
int n = 0;
EnumFontFamilies (hdc, 0, FONTENUMPROC (enum_font_proc), LPARAM (&n));
printf("-------- EnumFontFamilies %d\n\n", n);
}
static void
print_font_families_ex (HDC hdc, BYTE charset, char *charset_name)
{
int n = 0;
LOGFONT font;
memset (&font, 0, sizeof (LOGFONT));
font.lfCharSet = charset;
EnumFontFamiliesEx (hdc, &font, FONTENUMPROC (enum_font_proc), LPARAM (&n), 0);
printf("-------- EnumFontFamiliesEx (%s) %d\n\n", charset_name, n);
}
int main(int argc, char* argv[])
{
HDC hdc = GetDC (0);
print_font_families (hdc);
print_font_families_ex (hdc, SHIFTJIS_CHARSET, "sjis");
print_font_families_ex (hdc, ANSI_CHARSET, "ansi");
print_font_families_ex (hdc, DEFAULT_CHARSET, "all");
ReleaseDC (0, hdc);
return 0;
}
これはWineのWindows再現力の問題なのでアプリ側に提案するのは筋違いですが、もし心当たりがあることで対応可能ならと思いレポートします。
現象: Wine上でxyzzyでは日本語が文字化けし、アプリケーション起動のたびに毎回フォント設定をし直さなければなりません。 原因: フォント一覧において同名の欧文フォントと日本語フォントが2つ並び欧文フォントが先のため、保存されたフォント名をxyzzyが読み取っただけでは日本語になりません。
xyzzyでは文字セットの指定をフォント一覧に反映させていない仕様であることが、何か影響しているのではないでしょうか。以下はWindows上でのNotepadとxyzzyです。
通常アプリケーションでは文字セットの変更がフォント一覧に影響しますが、xyzzyではフォント一覧は日本語フォントに固定、もしくは何も指定されていないように思われます。