Nikolay Sivov : gdi32: Fix widths returned by GetCharWidthI().
Alexandre Julliard
julliard at winehq.org
Thu Apr 13 13:06:09 CDT 2017
Module: wine
Branch: master
Commit: bba13f04c48869956a0171db0e2b4db0f61aab3b
URL: http://source.winehq.org/git/wine.git/?a=commit;h=bba13f04c48869956a0171db0e2b4db0f61aab3b
Author: Nikolay Sivov <nsivov at codeweavers.com>
Date: Thu Apr 13 00:47:39 2017 +0300
gdi32: Fix widths returned by GetCharWidthI().
Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
Signed-off-by: Huw Davies <huw at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/gdi32/font.c | 2 +-
dlls/gdi32/tests/font.c | 43 +++++++++++++++++++++++++++++++++++++++++++
2 files changed, 44 insertions(+), 1 deletion(-)
diff --git a/dlls/gdi32/font.c b/dlls/gdi32/font.c
index ddd0051..3b3f0b5 100644
--- a/dlls/gdi32/font.c
+++ b/dlls/gdi32/font.c
@@ -3809,7 +3809,7 @@ BOOL WINAPI GetCharWidthI(HDC hdc, UINT first, UINT count, LPWORD glyphs, LPINT
}
for (i = 0; i < count; i++)
- buffer[i] = abc->abcA + abc->abcB + abc->abcC;
+ buffer[i] = abc[i].abcA + abc[i].abcB + abc[i].abcC;
HeapFree(GetProcessHeap(), 0, abc);
return TRUE;
diff --git a/dlls/gdi32/tests/font.c b/dlls/gdi32/tests/font.c
index 0b8cfd5..299fadba 100644
--- a/dlls/gdi32/tests/font.c
+++ b/dlls/gdi32/tests/font.c
@@ -6637,6 +6637,48 @@ static void test_bitmap_font_glyph_index(void)
DeleteDC(hdc);
}
+static void test_GetCharWidthI(void)
+{
+ static const char *teststr = "wine ";
+ HFONT hfont, prev_hfont;
+ WORD glyphs[5];
+ INT widths[5];
+ LOGFONTA lf;
+ ABC abc[5];
+ int len, i;
+ DWORD nb;
+ BOOL ret;
+ HDC hdc;
+
+ memset(&lf, 0, sizeof(lf));
+ strcpy(lf.lfFaceName, "Tahoma");
+ lf.lfHeight = -20;
+
+ hdc = GetDC(0);
+
+ hfont = CreateFontIndirectA(&lf);
+ prev_hfont = SelectObject(hdc, hfont);
+
+ len = strlen(teststr);
+ nb = GetGlyphIndicesA(hdc, teststr, len, glyphs, 0);
+ ok(nb == len, "\n");
+
+ memset(abc, 0xcc, sizeof(abc));
+ ret = GetCharABCWidthsI(hdc, 0, len, glyphs, abc);
+ ok(ret, "GetCharABCWidthsI failed\n");
+
+ memset(widths, 0xcc, sizeof(widths));
+ ret = GetCharWidthI(hdc, 0, len, glyphs, widths);
+ ok(ret, "GetCharWidthI failed\n");
+
+ for (i = 0; i < len; i++)
+ ok(widths[i] == abc[i].abcA + abc[i].abcB + abc[i].abcC, "%u, glyph %u, got width %d\n",
+ i, glyphs[i], widths[i]);
+
+ DeleteObject(SelectObject(hdc, prev_hfont));
+ ReleaseDC(0, hdc);
+}
+
START_TEST(font)
{
init();
@@ -6699,6 +6741,7 @@ START_TEST(font)
test_GetCharWidth32();
test_fake_bold_font();
test_bitmap_font_glyph_index();
+ test_GetCharWidthI();
/* These tests should be last test until RemoveFontResource
* is properly implemented.
More information about the wine-cvs
mailing list