--- wine-1.0.0~winehq0~ubuntu~8.04/dlls/gdi32/freetype.c.orig	2008-06-21 20:05:49.000000000 +0800
+++ wine-1.0.0~winehq0~ubuntu~8.04/dlls/gdi32/freetype.c	2008-06-21 20:34:49.000000000 +0800
@@ -3217,6 +3217,15 @@
     if(!strcmpiW(lf.lfFaceName, SymbolW))
         lf.lfCharSet = SYMBOL_CHARSET;
 
+    if( !strncmp(getenv("LANG"), "zh_CN", 5) && lf.lfCharSet == DEFAULT_CHARSET || lf.lfCharSet == ANSI_CHARSET) { 
+        int codepage = 936; 
+        if(!TranslateCharsetInfo((DWORD*)(INT_PTR)codepage, &csi, TCI_SRCCODEPAGE)) {
+            FIXME("OMG. Even this dirty 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:
@@ -3455,6 +3464,9 @@
         ret->scale_y = 1.0;
     TRACE("font scale y: %f\n", ret->scale_y);
 
+    if (0 <= height && height <12) height =12;
+    else if ( 0 > height && height > -12) height = -12;
+
     ret->ft_face = OpenFontFace(ret, face, width, height);
 
     if (!ret->ft_face)
