Kusanagi Kouichi : gdi32: GetGlyphIndices doesn't substitute glyph.
Alexandre Julliard
julliard at winehq.org
Tue Jan 10 13:11:19 CST 2012
Module: wine
Branch: master
Commit: fecb1d8b6f81c2bfff7116e80380b1d4f7b7befc
URL: http://source.winehq.org/git/wine.git/?a=commit;h=fecb1d8b6f81c2bfff7116e80380b1d4f7b7befc
Author: Kusanagi Kouichi <slash at ac.auone-net.jp>
Date: Tue Jan 10 19:08:03 2012 +0900
gdi32: GetGlyphIndices doesn't substitute glyph.
---
dlls/gdi32/freetype.c | 8 ++++++--
dlls/gdi32/tests/font.c | 17 ++++++++++++-----
2 files changed, 18 insertions(+), 7 deletions(-)
diff --git a/dlls/gdi32/freetype.c b/dlls/gdi32/freetype.c
index b907209..537d81a 100644
--- a/dlls/gdi32/freetype.c
+++ b/dlls/gdi32/freetype.c
@@ -4988,7 +4988,7 @@ static FT_UInt get_glyph_index(const GdiFont *font, UINT glyph)
else
ret = pFT_Get_Char_Index(font->ft_face, (unsigned char)buf);
TRACE("%04x (%02x) -> ret %d def_used %d\n", glyph, buf, ret, default_used);
- return get_GSUB_vert_glyph(font,ret);
+ return ret;
}
if(font->ft_face->charmap->encoding == FT_ENCODING_MS_SYMBOL)
@@ -5001,7 +5001,7 @@ static FT_UInt get_glyph_index(const GdiFont *font, UINT glyph)
}
else glyphId = pFT_Get_Char_Index(font->ft_face, glyph);
- return get_GSUB_vert_glyph(font,glyphId);
+ return glyphId;
}
/*************************************************************
@@ -6373,7 +6373,10 @@ static BOOL get_glyph_index_linked(GdiFont *font, UINT c, GdiFont **linked_font,
*linked_font = font;
if((*glyph = get_glyph_index(font, c)))
+ {
+ *glyph = get_GSUB_vert_glyph(font, *glyph);
return TRUE;
+ }
LIST_FOR_EACH_ENTRY(child_font, &font->child_fonts, CHILD_FONT, entry)
{
@@ -6384,6 +6387,7 @@ static BOOL get_glyph_index_linked(GdiFont *font, UINT c, GdiFont **linked_font,
if(!child_font->font->ft_face)
continue;
g = get_glyph_index(child_font->font, c);
+ g = get_GSUB_vert_glyph(child_font->font, g);
if(g)
{
*glyph = g;
diff --git a/dlls/gdi32/tests/font.c b/dlls/gdi32/tests/font.c
index 41ceff4..8d30cdb 100644
--- a/dlls/gdi32/tests/font.c
+++ b/dlls/gdi32/tests/font.c
@@ -4070,13 +4070,14 @@ todo_wine
DeleteFile(ttf_name);
}
-static void check_vertical_font(const char *name, BOOL *installed, BOOL *selected, GLYPHMETRICS *gm)
+static void check_vertical_font(const char *name, BOOL *installed, BOOL *selected, GLYPHMETRICS *gm, WORD *gi)
{
LOGFONTA lf;
HFONT hfont, hfont_prev;
HDC hdc;
char facename[100];
DWORD ret;
+ static const WCHAR str[] = { 0x2025 };
*installed = is_truetype_font_installed(name);
@@ -4112,6 +4113,9 @@ static void check_vertical_font(const char *name, BOOL *installed, BOOL *selecte
if (!*selected)
memset(gm, 0, sizeof *gm);
+ ret = pGetGlyphIndicesW(hdc, str, 1, gi, 0);
+ ok(ret != GDI_ERROR, "GetGlyphIndicesW failed\n");
+
SelectObject(hdc, hfont_prev);
DeleteObject(hfont);
ReleaseDC(NULL, hdc);
@@ -4123,10 +4127,11 @@ static void test_vertical_font(void)
int num;
BOOL ret, installed, selected;
GLYPHMETRICS gm;
+ WORD hgi, vgi;
- if (!pAddFontResourceExA || !pRemoveFontResourceExA)
+ if (!pAddFontResourceExA || !pRemoveFontResourceExA || !pGetGlyphIndicesW)
{
- win_skip("AddFontResourceExA is not available on this platform\n");
+ win_skip("AddFontResourceExA or GetGlyphIndicesW is not available on this platform\n");
return;
}
@@ -4139,20 +4144,22 @@ static void test_vertical_font(void)
num = pAddFontResourceExA(ttf_name, FR_PRIVATE, 0);
ok(num == 2, "AddFontResourceExA should add 2 fonts from vertical.ttf\n");
- check_vertical_font("@WineTestVertical", &installed, &selected, &gm);
+ check_vertical_font("@WineTestVertical", &installed, &selected, &gm, &hgi);
ok(installed, "@WineTestVertical is not installed\n");
ok(selected, "@WineTestVertical is not selected\n");
ok(gm.gmBlackBoxX > gm.gmBlackBoxY,
"gmBlackBoxX(%u) should be greater than gmBlackBoxY(%u) if horizontal\n",
gm.gmBlackBoxX, gm.gmBlackBoxY);
- check_vertical_font("@@WineTestVertical", &installed, &selected, &gm);
+ check_vertical_font("@@WineTestVertical", &installed, &selected, &gm, &vgi);
ok(installed, "@@WineTestVertical is not installed\n");
ok(selected, "@@WineTestVertical is not selected\n");
ok(gm.gmBlackBoxX < gm.gmBlackBoxY,
"gmBlackBoxX(%u) should be less than gmBlackBoxY(%u) if vertical\n",
gm.gmBlackBoxX, gm.gmBlackBoxY);
+ ok(hgi == vgi, "different glyph h:%u v:%u\n", hgi, vgi);
+
ret = pRemoveFontResourceExA(ttf_name, FR_PRIVATE, 0);
ok(ret, "RemoveFontResourceEx() error %d\n", GetLastError());
More information about the wine-cvs
mailing list