From c17a8f32c412cf9d825da87f5ccf682d52f2b1ce Mon Sep 17 00:00:00 2001 From: Akihiro Sagawa Date: Sun, 4 Feb 2018 21:02:13 +0900 Subject: [PATCH] gdi32: Fix ABC width calculations when using vertical font. Signed-off-by: Akihiro Sagawa Signed-off-by: Huw Davies Signed-off-by: Alexandre Julliard --- dlls/gdi32/freetype.c | 3 ++- dlls/gdi32/tests/font.c | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/dlls/gdi32/freetype.c b/dlls/gdi32/freetype.c index 7016095e65f..383314794a3 100644 --- a/dlls/gdi32/freetype.c +++ b/dlls/gdi32/freetype.c @@ -7050,6 +7050,7 @@ static DWORD get_glyph_outline(GdiFont *incoming_font, UINT glyph, UINT format, pFT_Vector_Transform(&vec, &transMat); origin_x = (vec.x + left) & -64; origin_y = (vec.y + top + 63) & -64; + lsb -= metrics.horiBearingY; } else { @@ -7074,7 +7075,7 @@ static DWORD get_glyph_outline(GdiFont *incoming_font, UINT glyph, UINT format, else abc->abcA = -((pFT_Vector_Length(&vec) + 63) >> 6); /* We use lsb again to avoid rounding errors */ - vec.x = lsb + metrics.width; + vec.x = lsb + (tategaki ? metrics.height : metrics.width); vec.y = 0; pFT_Vector_Transform(&vec, &transMatUnrotated); abc->abcB = ((pFT_Vector_Length(&vec) + 63) >> 6) - abc->abcA; diff --git a/dlls/gdi32/tests/font.c b/dlls/gdi32/tests/font.c index d5f04ff0a90..d6fe9e3e651 100644 --- a/dlls/gdi32/tests/font.c +++ b/dlls/gdi32/tests/font.c @@ -5959,9 +5959,9 @@ static void check_vertical_metrics(const char *face) ok(ret != GDI_ERROR, "GetGlyphOutlineW failed\n"); ret = GetCharABCWidthsW(hdc, code, code, &vabc); ok(ret, "GetCharABCWidthsW failed\n"); - todo_wine ok(vabc.abcA == vgm.gmptGlyphOrigin.x, "expected %d, got %d\n", + ok(vabc.abcA == vgm.gmptGlyphOrigin.x, "expected %d, got %d\n", vabc.abcA, vgm.gmptGlyphOrigin.x); - todo_wine ok(vabc.abcB == vgm.gmBlackBoxX, "expected %d, got %d\n", + ok(vabc.abcB == vgm.gmBlackBoxX, "expected %d, got %d\n", vabc.abcB, vgm.gmBlackBoxX); ok(vabc.abcA + vabc.abcB + vabc.abcC == vgm.gmCellIncX, "expected %d, got %d\n",