[5/6] gdi32: Add vertical fonts to font list.
Kusanagi Kouichi
slash at ac.auone-net.jp
Tue Dec 20 06:05:53 CST 2011
Signed-off-by: Kusanagi Kouichi <slash at ac.auone-net.jp>
---
dlls/gdi32/freetype.c | 34 +++++++++++++++++++++++++++++++---
dlls/gdi32/tests/font.c | 4 ----
2 files changed, 31 insertions(+), 7 deletions(-)
diff --git a/dlls/gdi32/freetype.c b/dlls/gdi32/freetype.c
index 3b40442..d9607e6 100644
--- a/dlls/gdi32/freetype.c
+++ b/dlls/gdi32/freetype.c
@@ -1450,11 +1450,25 @@ static void AddFaceToFamily(Face *face, Family *family)
list_add_before( entry, &face->entry );
}
+static WCHAR *prepend_at(WCHAR *family)
+{
+ WCHAR *str;
+
+ if (!family)
+ return NULL;
+
+ str = HeapAlloc(GetProcessHeap(), 0, sizeof (WCHAR) * (strlenW(family) + 2));
+ str[0] = '@';
+ strcpyW(str + 1, family);
+ HeapFree(GetProcessHeap(), 0, family);
+ return str;
+}
+
#define ADDFONT_EXTERNAL_FONT 0x01
#define ADDFONT_FORCE_BITMAP 0x02
#define ADDFONT_ADD_TO_CACHE 0x04
-static void AddFaceToList(FT_Face ft_face, char *fake_family, const char *file, void *font_data_ptr, DWORD font_data_size, FT_Long face_index, DWORD flags)
+static void AddFaceToList(FT_Face ft_face, char *fake_family, const char *file, void *font_data_ptr, DWORD font_data_size, FT_Long face_index, DWORD flags, BOOL vertical)
{
int bitmap_num = 0;
Family *family;
@@ -1494,6 +1508,12 @@ static void AddFaceToList(FT_Face ft_face, char *fake_family, const char *file,
}
}
+ if (vertical)
+ {
+ english_family = prepend_at(english_family);
+ localised_family = prepend_at(localised_family);
+ }
+
family = find_family_from_name(localised_family ? localised_family : english_family);
if(!family) {
family = HeapAlloc(GetProcessHeap(), 0, sizeof(*family));
@@ -1671,6 +1691,7 @@ static INT AddFontToList(const char *file, void *font_data_ptr, DWORD font_data_
WCHAR *localised_family;
FT_Error err;
FT_Long face_index = 0, num_faces;
+ INT ret = 0;
/* we always load external fonts from files - otherwise we would get a crash in update_reg_entries */
assert(file || !(flags & ADDFONT_EXTERNAL_FONT));
@@ -1779,12 +1800,19 @@ static INT AddFontToList(const char *file, void *font_data_ptr, DWORD font_data_
HeapFree(GetProcessHeap(), 0, localised_family);
}
- AddFaceToList(ft_face, fake_family, file, font_data_ptr, font_data_size, face_index, flags);
+ AddFaceToList(ft_face, fake_family, file, font_data_ptr, font_data_size, face_index, flags, FALSE);
+ ++ret;
+
+ if (FT_HAS_VERTICAL(ft_face))
+ {
+ AddFaceToList(ft_face, fake_family, file, font_data_ptr, font_data_size, face_index, flags, TRUE);
+ ++ret;
+ }
num_faces = ft_face->num_faces;
pFT_Done_Face(ft_face);
} while(num_faces > ++face_index);
- return num_faces;
+ return ret;
}
static INT AddFontFileToList(const char *file, char *fake_family, const WCHAR *target_family, DWORD flags)
diff --git a/dlls/gdi32/tests/font.c b/dlls/gdi32/tests/font.c
index 98c61a0..710ee56 100644
--- a/dlls/gdi32/tests/font.c
+++ b/dlls/gdi32/tests/font.c
@@ -4121,7 +4121,6 @@ static void test_vertical_font(void)
}
num = pAddFontResourceExA(ttf_name, FR_PRIVATE, 0);
- todo_wine
ok(num == 2, "AddFontResourceExA should add 2 fonts from vertical.ttf\n");
check_vertical_font("@WineTestVertical", &installed, &selected, &gm);
@@ -4133,11 +4132,8 @@ static void test_vertical_font(void)
gm.gmBlackBoxX, gm.gmBlackBoxY);
check_vertical_font("@@WineTestVertical", &installed, &selected, &gm);
- todo_wine
ok(installed, "@@WineTestVertical is not installed\n");
- todo_wine
ok(selected, "@@WineTestVertical is not selected\n");
- todo_wine
ok(gm.gmBlackBoxX < gm.gmBlackBoxY,
"gmBlackBoxX(%u) should be less than gmBlackBoxY(%u) if vertical\n",
gm.gmBlackBoxX, gm.gmBlackBoxY);
--
1.7.7.3
More information about the wine-patches
mailing list