Akihiro Sagawa : user32/tests: Use calculated EC_USEFONTINFO margins in the CJK case.
Alexandre Julliard
julliard at winehq.org
Thu Apr 11 13:10:31 CDT 2019
Module: wine
Branch: master
Commit: 8ba6c1f2fcee2f6432928395dfb660ace169327f
URL: https://source.winehq.org/git/wine.git/?a=commit;h=8ba6c1f2fcee2f6432928395dfb660ace169327f
Author: Akihiro Sagawa <sagawa.aki at gmail.com>
Date: Thu Apr 11 00:04:39 2019 +0900
user32/tests: Use calculated EC_USEFONTINFO margins in the CJK case.
Signed-off-by: Akihiro Sagawa <sagawa.aki at gmail.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/user32/tests/edit.c | 46 +++++++++++++++++++++++++++++++---------------
1 file changed, 31 insertions(+), 15 deletions(-)
diff --git a/dlls/user32/tests/edit.c b/dlls/user32/tests/edit.c
index b1223a9..2930c33 100644
--- a/dlls/user32/tests/edit.c
+++ b/dlls/user32/tests/edit.c
@@ -1549,6 +1549,16 @@ static void test_margins_usefontinfo(UINT charset)
DeleteObject(hfont);
}
+static INT get_cjk_fontinfo_margin(INT width, INT side_bearing)
+{
+ INT margin;
+ if (side_bearing < 0)
+ margin = min(-side_bearing, width/2);
+ else
+ margin = 0;
+ return margin;
+}
+
static void test_margins_default(const char* facename, UINT charset)
{
HWND hwnd;
@@ -1562,6 +1572,14 @@ static void test_margins_default(const char* facename, UINT charset)
INT margins, expect;
const UINT small_margins = MAKELONG(1, 5);
const WCHAR EditW[] = {'E','d','i','t',0}, strW[] = {'W',0};
+ struct char_width_info {
+ INT lsb, rsb, unknown;
+ } info;
+ HMODULE hgdi32;
+ BOOL (WINAPI *pGetCharWidthInfo)(HDC, struct char_width_info *);
+
+ hgdi32 = GetModuleHandleA("gdi32.dll");
+ pGetCharWidthInfo = (void *)GetProcAddress(hgdi32, "GetCharWidthInfo");
memset(&lf, 0, sizeof(lf));
lf.lfHeight = -11;
@@ -1590,8 +1608,16 @@ static void test_margins_default(const char* facename, UINT charset)
DeleteObject(hfont);
return;
}
- expect = MAKELONG(size.cx / 2, size.cx / 2);
cjk_charset = is_cjk_charset(hdc);
+ if (cjk_charset && pGetCharWidthInfo && pGetCharWidthInfo(hdc, &info)) {
+ short left, right;
+
+ left = get_cjk_fontinfo_margin(size.cx, info.lsb);
+ right = get_cjk_fontinfo_margin(size.cx, info.rsb);
+ expect = MAKELONG(left, right);
+ }
+ else
+ expect = MAKELONG(size.cx / 2, size.cx / 2);
hfont = SelectObject(hdc, hfont);
ReleaseDC(hwnd, hdc);
@@ -1606,13 +1632,8 @@ static void test_margins_default(const char* facename, UINT charset)
SendMessageA(hwnd, EM_SETMARGINS, EC_LEFTMARGIN | EC_RIGHTMARGIN, small_margins);
SendMessageA(hwnd, EM_SETMARGINS, EC_LEFTMARGIN | EC_RIGHTMARGIN, MAKELONG(EC_USEFONTINFO, EC_USEFONTINFO));
margins = SendMessageA(hwnd, EM_GETMARGINS, 0, 0);
- if (!cjk_charset)
- ok(margins == expect, "%s:%d: got %d, %d\n", facename, charset, HIWORD(margins), LOWORD(margins));
- else
- {
- ok(HIWORD(margins) <= HIWORD(expect), "%s:%d: got %d\n", facename, charset, HIWORD(margins));
- ok(LOWORD(margins) <= LOWORD(expect), "%s:%d: got %d\n", facename, charset, LOWORD(margins));
- }
+ todo_wine_if(cjk_charset && expect != MAKELONG(size.cx / 2, size.cx / 2))
+ ok(margins == expect, "%s:%d: expected %d, %d, got %d, %d\n", facename, charset, HIWORD(expect), LOWORD(expect), HIWORD(margins), LOWORD(margins));
DestroyWindow(hwnd);
/* ANSI version */
@@ -1631,13 +1652,8 @@ static void test_margins_default(const char* facename, UINT charset)
SendMessageA(hwnd, EM_SETMARGINS, EC_LEFTMARGIN | EC_RIGHTMARGIN, small_margins);
SendMessageA(hwnd, EM_SETMARGINS, EC_LEFTMARGIN | EC_RIGHTMARGIN, MAKELONG(EC_USEFONTINFO, EC_USEFONTINFO));
margins = SendMessageA(hwnd, EM_GETMARGINS, 0, 0);
- if (!cjk_charset)
- ok(margins == expect, "%s:%d: got %d, %d\n", facename, charset, HIWORD(margins), LOWORD(margins));
- else
- {
- ok(HIWORD(margins) <= HIWORD(expect), "%s:%d: got %d\n", facename, charset, HIWORD(margins));
- ok(LOWORD(margins) <= LOWORD(expect), "%s:%d: got %d\n", facename, charset, LOWORD(margins));
- }
+ todo_wine_if(cjk_charset && expect != MAKELONG(size.cx / 2, size.cx / 2))
+ ok(margins == expect, "%s:%d: expected %d, %d, got %d, %d\n", facename, charset, HIWORD(expect), LOWORD(expect), HIWORD(margins), LOWORD(margins));
DestroyWindow(hwnd);
DeleteObject(hfont);
More information about the wine-cvs
mailing list