From 18249324f07ecde75e1fe4b302ffb5c6f1a40adc Mon Sep 17 00:00:00 2001 From: Xiangrong Fang Date: Thu, 4 Dec 2008 14:12:20 +0800 Subject: if the environmet variable "WINE_DEFAULT_CODEPAGE" is defined, its value is used to replace ANSI_CHARSET when creating font instance. The purpose is to solve incorrect text rendering for CJK programs. --- dlls/gdi32/freetype.c | 13 ++++++++++++- 1 files changed, 12 insertions(+), 1 deletions(-) diff --git a/dlls/gdi32/freetype.c b/dlls/gdi32/freetype.c index 2894dca..02cad9c 100644 --- a/dlls/gdi32/freetype.c +++ b/dlls/gdi32/freetype.c @@ -3373,7 +3373,18 @@ GdiFont *WineEngCreateFontInstance(DC *dc, HFONT hfont) if(!strcmpiW(lf.lfFaceName, SymbolW)) lf.lfCharSet = SYMBOL_CHARSET; - if(!TranslateCharsetInfo((DWORD*)(INT_PTR)lf.lfCharSet, &csi, TCI_SRCCHARSET)) { + UINT codepage = 0; + char *env_wdc = getenv("WINE_DEFAULT_CODEPAGE"); + if(env_wdc != NULL) + codepage = atoi(env_wdc); + if((codepage != 0) && (lf.lfCharSet == ANSI_CHARSET)) { + FIXME("WINE_DEFAULT_CODEPAGE=%d, overriding lfCharSet\n", codepage); + if(!TranslateCharsetInfo((DWORD*)(INT_PTR)codepage, &csi, TCI_SRCCODEPAGE)) { + FIXME("OMG. Even this hack doesn't work. Let's PRAY.\n"); + csi.fs.fsCsb[0] = 0; + } + lf.lfCharSet = csi.ciCharset; + } else if(!TranslateCharsetInfo((DWORD*)(INT_PTR)lf.lfCharSet, &csi, TCI_SRCCHARSET)) { switch(lf.lfCharSet) { case DEFAULT_CHARSET: csi.fs.fsCsb[0] = 0; -- 1.6.0.2