gdi32: CLIP_DFA_DISABLE should disable the font association mechanism.

Huw Davies huw at codeweavers.com
Tue Jun 10 03:48:38 CDT 2014


Thanks to Francois for running the test on a Korean win 7 vm.
---
 dlls/gdi32/font.c       |  9 ++++++---
 dlls/gdi32/tests/font.c | 16 ++++++++++++++++
 2 files changed, 22 insertions(+), 3 deletions(-)

diff --git a/dlls/gdi32/font.c b/dlls/gdi32/font.c
index 66072af..af3ea5b 100644
--- a/dlls/gdi32/font.c
+++ b/dlls/gdi32/font.c
@@ -653,12 +653,15 @@ static DWORD get_associated_charset_info(void)
     return associated_charset;
 }
 
-static void update_font_code_page( DC *dc )
+static void update_font_code_page( DC *dc, HANDLE font )
 {
     CHARSETINFO csi;
     int charset = GetTextCharsetInfo( dc->hSelf, NULL, 0 );
+    LOGFONTW lf;
+
+    GetObjectW( font, sizeof(lf), &lf );
 
-    if (charset == ANSI_CHARSET &&
+    if (charset == ANSI_CHARSET && !(lf.lfClipPrecision & CLIP_DFA_DISABLE) &&
         get_associated_charset_info() & ASSOC_CHARSET_ANSI)
         charset = DEFAULT_CHARSET;
 
@@ -725,7 +728,7 @@ static HGDIOBJ FONT_SelectObject( HGDIOBJ handle, HDC hdc )
         ret = dc->hFont;
         dc->hFont = handle;
         dc->aa_flags = aa_flags ? aa_flags : GGO_BITMAP;
-        update_font_code_page( dc );
+        update_font_code_page( dc, handle );
         GDI_dec_ref_count( ret );
     }
     else GDI_dec_ref_count( handle );
diff --git a/dlls/gdi32/tests/font.c b/dlls/gdi32/tests/font.c
index e978166..dd63297 100644
--- a/dlls/gdi32/tests/font.c
+++ b/dlls/gdi32/tests/font.c
@@ -2570,6 +2570,22 @@ static void test_GdiGetCodePage(void)
 
         hfont = SelectObject(hdc, hfont);
         DeleteObject(hfont);
+
+        /* CLIP_DFA_DISABLE turns off the font association */
+        lf.lfClipPrecision = CLIP_DFA_DISABLE;
+        hfont = CreateFontIndirectA(&lf);
+        ok(hfont != 0, "CreateFontIndirectA error %u\n", GetLastError());
+
+        hfont = SelectObject(hdc, hfont);
+        charset = GetTextCharset(hdc);
+        codepage = pGdiGetCodePage(hdc);
+        trace("acp=%d, lfFaceName=%s, lfCharSet=%d, GetTextCharset=%d, GdiGetCodePage=%d\n",
+              acp, lf.lfFaceName, lf.lfCharSet, charset, codepage);
+        ok(codepage == 1252, "GdiGetCodePage returned %d\n", codepage);
+
+        hfont = SelectObject(hdc, hfont);
+        DeleteObject(hfont);
+
         ReleaseDC(NULL, hdc);
     }
 }
-- 
1.8.0




More information about the wine-patches mailing list