Akihiro Sagawa : gdi32: Consider whether the logical font face is vertical when selecting.

Alexandre Julliard julliard at winehq.org
Wed Feb 8 17:45:29 CST 2012


Module: wine
Branch: master
Commit: 286854fb06aaf68ab43cc175555d927df96bc6ec
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=286854fb06aaf68ab43cc175555d927df96bc6ec

Author: Akihiro Sagawa <sagawa.aki at gmail.com>
Date:   Thu Feb  9 01:33:00 2012 +0900

gdi32: Consider whether the logical font face is vertical when selecting.

---

 dlls/gdi32/freetype.c   |    9 ++++++---
 dlls/gdi32/tests/font.c |    2 +-
 2 files changed, 7 insertions(+), 4 deletions(-)

diff --git a/dlls/gdi32/freetype.c b/dlls/gdi32/freetype.c
index 55c82ba..5e6a952 100644
--- a/dlls/gdi32/freetype.c
+++ b/dlls/gdi32/freetype.c
@@ -3982,7 +3982,7 @@ static HFONT freetype_SelectFont( PHYSDEV dev, HFONT hfont )
     INT height, width = 0;
     unsigned int score = 0, new_score;
     signed int diff = 0, newdiff;
-    BOOL bd, it, can_use_bitmap;
+    BOOL bd, it, can_use_bitmap, want_vertical;
     LOGFONTW lf;
     CHARSETINFO csi;
     HFONTLIST *hflist;
@@ -4163,6 +4163,8 @@ static HFONT freetype_SelectFont( PHYSDEV dev, HFONT hfont )
             lf.lfCharSet = csi.ciCharset;
     }
 
+    want_vertical = (lf.lfFaceName[0] == '@');
+
     /* Face families are in the top 4 bits of lfPitchAndFamily,
        so mask with 0xF0 before testing */
 
@@ -4192,7 +4194,8 @@ static HFONT freetype_SelectFont( PHYSDEV dev, HFONT hfont )
         family = LIST_ENTRY(family_elem_ptr, Family, entry);
         LIST_FOR_EACH(face_elem_ptr, &family->faces) { 
             face = LIST_ENTRY(face_elem_ptr, Face, entry);
-            if(csi.fs.fsCsb[0] & (face->fs.fsCsb[0] | face->fs_links.fsCsb[0])) {
+            if(face->vertical == want_vertical &&
+               (csi.fs.fsCsb[0] & (face->fs.fsCsb[0] | face->fs_links.fsCsb[0]))) {
                 if(face->scalable)
                     goto found;
                 if(can_use_bitmap && !last_resort_family)
@@ -4211,7 +4214,7 @@ static HFONT freetype_SelectFont( PHYSDEV dev, HFONT hfont )
         family = LIST_ENTRY(family_elem_ptr, Family, entry);
         LIST_FOR_EACH(face_elem_ptr, &family->faces) { 
             face = LIST_ENTRY(face_elem_ptr, Face, entry);
-            if(face->scalable) {
+            if(face->scalable && face->vertical == want_vertical) {
                 csi.fs.fsCsb[0] = 0;
                 WARN("just using first face for now\n");
                 goto found;
diff --git a/dlls/gdi32/tests/font.c b/dlls/gdi32/tests/font.c
index 52a1873..307493b 100644
--- a/dlls/gdi32/tests/font.c
+++ b/dlls/gdi32/tests/font.c
@@ -4205,7 +4205,7 @@ static void test_east_asian_font_selection(void)
         hfont = SelectObject(hdc, hfont);
         memset(face_name, 0, sizeof face_name);
         ret = GetTextFaceA(hdc, sizeof face_name, face_name);
-        todo_wine ok(ret && face_name[0] != '@',
+        ok(ret && face_name[0] != '@',
            "expected non-vertical face for charset %u, got %s\n", charset[i], face_name);
         DeleteObject(SelectObject(hdc, hfont));
 




More information about the wine-cvs mailing list