2.5alpha2のファイルダイアログ用やっつけ日本語表示
やはりソースを弄る必要があった。
LANG=ja_JP.UTF-8としているUnix系OSというかX11環境ではフォント設定さえすればだいたいOKとなるが、WindowsではCP932からUTF-8に変換するコードをいろいろなところに分散して書く必要がありそうだ。UNIX系でも文字列の幅を数えるときにマルチバイト文字を考慮していないので化けます(長い文字列の後ろを・・・にする時など)。
ちょっとやそっとでは完全対応は無理ですな、こりゃ。少しずつ直そう。
デフォルトフォントのMS Gothic化
bf_editors projectのFiles/interface/interface_style.c
source/blender/editors/interface/interface_style.c
void uiStyleInit(void)関数
/* default builtin */ if(font==NULL) { font= MEM_callocN(sizeof(uiFont), "ui font"); BLI_addtail(&U.uifonts, font); /* strcpy(font->filename, "default"); font->uifont_id= UIFONT_DEFAULT; */ strcpy(font->filename, "msgothic.ttc"); font->uifont_id= UIFONT_CUSTOM1; BLF_dir_add("C:/WINDOWS/Fonts"); }
ファイル表示時の文字コード補正
bf_editors projectのFiles/space file/file_draw.c
source/blender/editors/space_file/file_draw.c
file_draw_string
関数付近
#ifdef _WIN32 #include <windows.h> char *strn2utf8cpy(char *dst, const char *src, int maxncpy) { // to wide int size=MultiByteToWideChar(CP_OEMCP, 0, src, -1, NULL, 0); wchar_t *wbuf=(wchar_t*)malloc(sizeof(wchar_t)*size); size=MultiByteToWideChar(CP_OEMCP, MB_ERR_INVALID_CHARS, src, -1, wbuf, size); // to utf8 size=WideCharToMultiByte(CP_UTF8, 0, wbuf, size, dst, maxncpy-1, 0, NULL); free(wbuf); dst[size]='\0'; return dst; } #endif static void file_draw_string(int sx, int sy, const char* string, float width, int height, int flag) { int soffs; char fname[FILE_MAXFILE]; float sw; float x,y; #ifdef _WIN32 strn2utf8cpy(fname, string, FILE_MAXFILE); #else BLI_strncpy(fname,string, FILE_MAXFILE); #endif sw = shorten_string(fname, width, flag ); soffs = (width - sw) / 2; x = (float)(sx); y = (float)(sy-height); BLF_position(x, y, 0); BLF_draw(fname); }
全然不完全だがファイル選択はできる。
先人発見
http://www.futuregadget.com/
なんかalpha0の時にあった設定が無くなっているような気がすると思ったら、国際化機能は未完成のためか隠してあるらしい。