Author: akhaldi
Date: Tue Mar 8 15:01:05 2016
New Revision: 70971
URL:
http://svn.reactos.org/svn/reactos?rev=70971&view=rev
Log:
[GDI32_WINETEST] Sync with Wine Staging 1.9.4. CORE-10912
Modified:
trunk/rostests/winetests/gdi32/dc.c
trunk/rostests/winetests/gdi32/dib.c
trunk/rostests/winetests/gdi32/font.c
trunk/rostests/winetests/gdi32/icm.c
trunk/rostests/winetests/gdi32/metafile.c
trunk/rostests/winetests/gdi32/path.c
Modified: trunk/rostests/winetests/gdi32/dc.c
URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/gdi32/dc.c?rev=…
==============================================================================
--- trunk/rostests/winetests/gdi32/dc.c [iso-8859-1] (original)
+++ trunk/rostests/winetests/gdi32/dc.c [iso-8859-1] Tue Mar 8 15:01:05 2016
@@ -424,9 +424,7 @@
else
ok( ret || broken(!ret) /* NT4 */, "GetDeviceGammaRamp failed on %s
(type %d), error %u\n", descr, GetObjectType( hdc ), GetLastError() );
type = GetClipBox( hdc, &rect );
- if (GetObjectType( hdc ) == OBJ_ENHMETADC)
- todo_wine ok( type == SIMPLEREGION, "GetClipBox returned %d on memdc for
%s\n", type, descr );
- else
+ todo_wine_if (GetObjectType( hdc ) == OBJ_ENHMETADC)
ok( type == SIMPLEREGION, "GetClipBox returned %d on memdc for
%s\n", type, descr );
type = GetBoundsRect( hdc, &rect, 0 );
@@ -443,12 +441,7 @@
SetMapMode( hdc, MM_TEXT );
Rectangle( hdc, 2, 2, 4, 4 );
type = GetBoundsRect( hdc, &rect, DCB_RESET );
- if (GetObjectType( hdc ) == OBJ_ENHMETADC || (GetObjectType( hdc ) == OBJ_DC
&& GetDeviceCaps( hdc, TECHNOLOGY ) == DT_RASPRINTER))
- todo_wine
- ok( rect.left == 2 && rect.top == 2 && rect.right == 4
&& rect.bottom == 4 && type == DCB_SET,
- "GetBoundsRect returned %d,%d,%d,%d type %x for %s\n",
- rect.left, rect.top, rect.right, rect.bottom, type, descr );
- else
+ todo_wine_if (GetObjectType( hdc ) == OBJ_ENHMETADC || (GetObjectType( hdc ) ==
OBJ_DC && GetDeviceCaps( hdc, TECHNOLOGY ) == DT_RASPRINTER))
ok( rect.left == 2 && rect.top == 2 && rect.right == 4
&& rect.bottom == 4 && type == DCB_SET,
"GetBoundsRect returned %d,%d,%d,%d type %x for %s\n",
rect.left, rect.top, rect.right, rect.bottom, type, descr );
@@ -462,20 +455,12 @@
ok( type == SIMPLEREGION, "GetClipBox returned %d on %s\n", type, descr
);
if (GetDeviceCaps( ref_dc, TECHNOLOGY ) == DT_RASDISPLAY)
{
- if (GetSystemMetrics( SM_CXSCREEN ) != GetSystemMetrics( SM_CXVIRTUALSCREEN
))
- todo_wine ok( GetDeviceCaps( ref_dc, DESKTOPHORZRES ) ==
GetSystemMetrics( SM_CXSCREEN ),
- "Got DESKTOPHORZRES %d on %s, expected %d\n",
- GetDeviceCaps( ref_dc, DESKTOPHORZRES ), descr,
GetSystemMetrics( SM_CXSCREEN ) );
- else
+ todo_wine_if (GetSystemMetrics( SM_CXSCREEN ) != GetSystemMetrics(
SM_CXVIRTUALSCREEN ))
ok( GetDeviceCaps( ref_dc, DESKTOPHORZRES ) == GetSystemMetrics(
SM_CXSCREEN ),
"Got DESKTOPHORZRES %d on %s, expected %d\n",
GetDeviceCaps( ref_dc, DESKTOPHORZRES ), descr, GetSystemMetrics(
SM_CXSCREEN ) );
- if (GetSystemMetrics( SM_CYSCREEN ) != GetSystemMetrics( SM_CYVIRTUALSCREEN
))
- todo_wine ok( GetDeviceCaps( ref_dc, DESKTOPVERTRES ) ==
GetSystemMetrics( SM_CYSCREEN ),
- "Got DESKTOPVERTRES %d on %s, expected %d\n",
- GetDeviceCaps( ref_dc, DESKTOPVERTRES ), descr,
GetSystemMetrics( SM_CYSCREEN ) );
- else
+ todo_wine_if (GetSystemMetrics( SM_CYSCREEN ) != GetSystemMetrics(
SM_CYVIRTUALSCREEN ))
ok( GetDeviceCaps( ref_dc, DESKTOPVERTRES ) == GetSystemMetrics(
SM_CYSCREEN ),
"Got DESKTOPVERTRES %d on %s, expected %d\n",
GetDeviceCaps( ref_dc, DESKTOPVERTRES ), descr, GetSystemMetrics(
SM_CYSCREEN ) );
@@ -490,11 +475,8 @@
GetDeviceCaps( ref_dc, DESKTOPVERTRES ) );
}
- if (GetDeviceCaps( ref_dc, TECHNOLOGY ) == DT_RASDISPLAY &&
GetObjectType( hdc ) != OBJ_ENHMETADC &&
+ todo_wine_if (GetDeviceCaps( ref_dc, TECHNOLOGY ) == DT_RASDISPLAY &&
GetObjectType( hdc ) != OBJ_ENHMETADC &&
(GetSystemMetrics( SM_XVIRTUALSCREEN ) || GetSystemMetrics( SM_YVIRTUALSCREEN
)))
- todo_wine ok( EqualRect( &rect, &ref_rect ), "GetClipBox
returned %d,%d,%d,%d on %s\n",
- rect.left, rect.top, rect.right, rect.bottom, descr );
- else
ok( EqualRect( &rect, &ref_rect ), "GetClipBox returned
%d,%d,%d,%d on %s\n",
rect.left, rect.top, rect.right, rect.bottom, descr );
}
@@ -630,11 +612,13 @@
static void test_DC_bitmap(void)
{
+ PIXELFORMATDESCRIPTOR descr;
HDC hdc, hdcmem;
DWORD bits[64];
HBITMAP hbmp, oldhbmp;
COLORREF col;
int i, bitspixel;
+ int ret, ret2;
/* fill bitmap data with b&w pattern */
for( i = 0; i < 64; i++) bits[i] = i & 1 ? 0 : 0xffffff;
@@ -645,7 +629,31 @@
/* create a memory dc */
hdcmem = CreateCompatibleDC( hdc);
ok( hdcmem != NULL, "CreateCompatibleDC rets %p\n", hdcmem);
- /* tests */
+
+ /* test DescribePixelFormat with descr == NULL */
+ ret2 = DescribePixelFormat(hdcmem, 0, sizeof(descr), NULL);
+ ok(ret2 > 0, "expected ret2 > 0, got %d\n", ret2);
+ ret = DescribePixelFormat(hdcmem, 1, sizeof(descr), NULL);
+ ok(ret == ret2, "expected ret == %d, got %d\n", ret2, ret);
+ ret = DescribePixelFormat(hdcmem, 0x10000, sizeof(descr), NULL);
+ ok(ret == ret2, "expected ret == %d, got %d\n", ret2, ret);
+
+ /* test DescribePixelFormat with descr != NULL */
+ memset(&descr, 0, sizeof(descr));
+ ret = DescribePixelFormat(hdcmem, 0, sizeof(descr), &descr);
+ ok(ret == 0, "expected ret == 0, got %d\n", ret);
+ ok(descr.nSize == 0, "expected descr.nSize == 0, got %d\n", descr.nSize);
+
+ memset(&descr, 0, sizeof(descr));
+ ret = DescribePixelFormat(hdcmem, 1, sizeof(descr), &descr);
+ ok(ret == ret2, "expected ret == %d, got %d\n", ret2, ret);
+ ok(descr.nSize == sizeof(descr), "expected desc.nSize == sizeof(descr), got
%d\n", descr.nSize);
+
+ memset(&descr, 0, sizeof(descr));
+ ret = DescribePixelFormat(hdcmem, 0x10000, sizeof(descr), &descr);
+ ok(ret == 0, "expected ret == 0, got %d\n", ret);
+ ok(descr.nSize == 0, "expected descr.nSize == 0, got %d\n", descr.nSize);
+
/* test monochrome bitmap: should always work */
hbmp = CreateBitmap(32, 32, 1, 1, bits);
ok( hbmp != NULL, "CreateBitmap returns %p\n", hbmp);
Modified: trunk/rostests/winetests/gdi32/dib.c
URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/gdi32/dib.c?rev…
==============================================================================
--- trunk/rostests/winetests/gdi32/dib.c [iso-8859-1] (original)
+++ trunk/rostests/winetests/gdi32/dib.c [iso-8859-1] Tue Mar 8 15:01:05 2016
@@ -1322,10 +1322,7 @@
for(i = 1; i <= num_broken; i++)
ok_cond = ok_cond || broken( !strcmp(hash, current_sha1[i]) );
- if(todo)
- todo_wine ok( ok_cond, "%s: %s: expected hash %s got %s\n",
- dst_format, info, *current_sha1, hash );
- else
+ todo_wine_if(todo)
ok( ok_cond, "%s: %s: expected hash %s got %s\n",
dst_format, info, *current_sha1, hash );
Modified: trunk/rostests/winetests/gdi32/font.c
URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/gdi32/font.c?re…
==============================================================================
--- trunk/rostests/winetests/gdi32/font.c [iso-8859-1] (original)
+++ trunk/rostests/winetests/gdi32/font.c [iso-8859-1] Tue Mar 8 15:01:05 2016
@@ -926,7 +926,7 @@
trace("ACP %d -> charset %d\n", GetACP(), expected_cs);
hdc = CreateCompatibleDC(0);
- assert(hdc);
+ ok(hdc != NULL, "failed to create hdc\n");
trace("logpixelsX %d, logpixelsY %d\n", GetDeviceCaps(hdc, LOGPIXELSX),
GetDeviceCaps(hdc, LOGPIXELSY));
@@ -974,9 +974,7 @@
{
if (font_res == fd[i].dpi && lf.lfCharSet == expected_cs)
{
- if (ret) /* FIXME: Remove once Wine is fixed */
- todo_wine ok(!ret, "%s height %d charset %d dpi %d should be
enumerated\n", lf.lfFaceName, lf.lfHeight, lf.lfCharSet, fd[i].dpi);
- else
+ todo_wine_if (ret) /* FIXME: Remove once Wine is fixed */
ok(!ret, "%s height %d charset %d dpi %d should be
enumerated\n", lf.lfFaceName, lf.lfHeight, lf.lfCharSet, fd[i].dpi);
}
}
@@ -1136,26 +1134,26 @@
ret = pGetCharABCWidthsI(hdc, 0, 1, glyphs, abc);
ok(ret, "%s: GetCharABCWidthsI should have succeeded\n", description);
ok ((INT)abc->abcB > 0, "%s: abcB should be positive\n",
description);
- if (todo) todo_wine ok(abc->abcA * base_abci->abcA >= 0, "%s:
abcA's sign should be unchanged\n", description);
- else ok(abc->abcA * base_abci->abcA >= 0, "%s: abcA's sign should
be unchanged\n", description);
- if (todo) todo_wine ok(abc->abcC * base_abci->abcC >= 0, "%s:
abcC's sign should be unchanged\n", description);
- else ok(abc->abcC * base_abci->abcC >= 0, "%s: abcC's sign should
be unchanged\n", description);
+ todo_wine_if (todo)
+ ok(abc->abcA * base_abci->abcA >= 0, "%s: abcA's sign should be
unchanged\n", description);
+ todo_wine_if (todo)
+ ok(abc->abcC * base_abci->abcC >= 0, "%s: abcC's sign should be
unchanged\n", description);
ret = pGetCharABCWidthsW(hdc, 'i', 'i', abc);
ok(ret, "%s: GetCharABCWidthsW should have succeeded\n", description);
ok ((INT)abc->abcB > 0, "%s: abcB should be positive\n",
description);
- if (todo) todo_wine ok(abc->abcA * base_abcw->abcA >= 0, "%s:
abcA's sign should be unchanged\n", description);
- else ok(abc->abcA * base_abcw->abcA >= 0, "%s: abcA's sign should
be unchanged\n", description);
- if (todo) todo_wine ok(abc->abcC * base_abcw->abcC >= 0, "%s:
abcC's sign should be unchanged\n", description);
- else ok(abc->abcC * base_abcw->abcC >= 0, "%s: abcC's should be
unchanged\n", description);
+ todo_wine_if (todo)
+ ok(abc->abcA * base_abcw->abcA >= 0, "%s: abcA's sign should be
unchanged\n", description);
+ todo_wine_if (todo)
+ ok(abc->abcC * base_abcw->abcC >= 0, "%s: abcC's sign should be
unchanged\n", description);
ret = pGetCharABCWidthsFloatW(hdc, 'i', 'i', abcf);
ok(ret, "%s: GetCharABCWidthsFloatW should have succeeded\n",
description);
ok (abcf->abcfB > 0.0, "%s: abcfB should be positive\n",
description);
- if (todo) todo_wine ok(abcf->abcfA * base_abcf->abcfA >= 0.0, "%s:
abcfA's sign should be unchanged\n", description);
- else ok(abcf->abcfA * base_abcf->abcfA >= 0.0, "%s: abcfA's should
be unchanged\n", description);
- if (todo) todo_wine ok(abcf->abcfC * base_abcf->abcfC >= 0.0, "%s:
abcfC's sign should be unchanged\n", description);
- else ok(abcf->abcfC * base_abcf->abcfC >= 0.0, "%s: abcfC's sign
should be unchanged\n", description);
+ todo_wine_if (todo)
+ ok(abcf->abcfA * base_abcf->abcfA >= 0.0, "%s: abcfA's sign
should be unchanged\n", description);
+ todo_wine_if (todo)
+ ok(abcf->abcfC * base_abcf->abcfC >= 0.0, "%s: abcfC's sign
should be unchanged\n", description);
}
static void test_GetCharABCWidths(void)
@@ -1410,6 +1408,7 @@
static void test_text_extents(void)
{
static const WCHAR wt[] =
{'O','n','e','\n','t','w','o','
','3',0};
+ static const WCHAR emptyW[] = {0};
LPINT extents;
INT i, len, fit1, fit2, extents2[3];
LOGFONTA lf;
@@ -1428,8 +1427,19 @@
hdc = GetDC(0);
hfont = SelectObject(hdc, hfont);
GetTextMetricsA(hdc, &tm);
- GetTextExtentPointA(hdc, "o", 1, &sz);
+ ret = GetTextExtentPointA(hdc, "o", 1, &sz);
+ ok(ret, "got %d\n", ret);
ok(sz.cy == tm.tmHeight, "cy %d tmHeight %d\n", sz.cy, tm.tmHeight);
+
+ memset(&sz, 0xcc, sizeof(sz));
+ ret = GetTextExtentPointA(hdc, "o", 0, &sz);
+ ok(ret, "got %d\n", ret);
+ ok(sz.cx == 0 && sz.cy == 0, "cx %d, cy %d\n", sz.cx, sz.cy);
+
+ memset(&sz, 0xcc, sizeof(sz));
+ ret = GetTextExtentPointA(hdc, "", 0, &sz);
+ ok(ret, "got %d\n", ret);
+ ok(sz.cx == 0 && sz.cy == 0, "cx %d, cy %d\n", sz.cx, sz.cy);
SetLastError(0xdeadbeef);
GetTextExtentExPointW(hdc, wt, 1, 1, &fit1, &fit2, &sz1);
@@ -1441,6 +1451,16 @@
ReleaseDC(0, hdc);
return;
}
+
+ memset(&sz, 0xcc, sizeof(sz));
+ ret = GetTextExtentPointW(hdc, wt, 0, &sz);
+ ok(ret, "got %d\n", ret);
+ ok(sz.cx == 0 && sz.cy == 0, "cx %d, cy %d\n", sz.cx, sz.cy);
+
+ memset(&sz, 0xcc, sizeof(sz));
+ ret = GetTextExtentPointW(hdc, emptyW, 0, &sz);
+ ok(ret, "got %d\n", ret);
+ ok(sz.cx == 0 && sz.cy == 0, "cx %d, cy %d\n", sz.cx, sz.cy);
len = lstrlenW(wt);
extents = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, len * sizeof extents[0]);
@@ -1724,7 +1744,7 @@
strcpy(lf.lfFaceName, kd[i].face_name);
lf.lfHeight = kd[i].height;
hfont = CreateFontIndirectA(&lf);
- assert(hfont != 0);
+ ok(hfont != NULL, "failed to create a font, name %s\n",
kd[i].face_name);
hfont_old = SelectObject(hdc, hfont);
@@ -1850,7 +1870,7 @@
strcpy(lf.lfFaceName, fd[i].face_name);
hfont = CreateFontIndirectA(&lf);
- assert(hfont);
+ ok(hfont != NULL, "failed to create a font, name %s\n",
fd[i].face_name);
old_hfont = SelectObject(hdc, hfont);
ret = GetTextMetricsA(hdc, &tm);
@@ -2076,12 +2096,40 @@
{"", 0, 0, 0, 0, 0, 0, 0, 0, 0 }
};
HDC hdc = CreateCompatibleDC(0);
- assert(hdc);
+ ok(hdc != NULL, "failed to create hdc\n");
test_height( hdc, tahoma );
test_height_selection_vdmx( hdc );
DeleteDC(hdc);
+}
+
+static UINT get_font_fsselection(LOGFONTA *lf)
+{
+ OUTLINETEXTMETRICA *otm;
+ HFONT hfont, hfont_old;
+ DWORD ret, otm_size;
+ UINT fsSelection;
+ HDC hdc;
+
+ hdc = GetDC(0);
+ hfont = CreateFontIndirectA(lf);
+ ok(hfont != NULL, "failed to create a font\n");
+
+ hfont_old = SelectObject(hdc, hfont);
+
+ otm_size = GetOutlineTextMetricsA(hdc, 0, NULL);
+ otm = HeapAlloc(GetProcessHeap(), 0, otm_size);
+ otm->otmSize = sizeof(*otm);
+ ret = GetOutlineTextMetricsA(hdc, otm->otmSize, otm);
+ ok(ret == otm->otmSize, "expected %u, got %u, error %d\n",
otm->otmSize, ret, GetLastError());
+ fsSelection = otm->otmfsSelection;
+ HeapFree(GetProcessHeap(), 0, otm);
+ SelectObject(hdc, hfont_old);
+ DeleteObject(hfont);
+ ReleaseDC(0, hdc);
+
+ return fsSelection;
}
static void test_GetOutlineTextMetrics(void)
@@ -2092,6 +2140,38 @@
HDC hdc;
DWORD ret, otm_size;
LPSTR unset_ptr;
+ UINT fsSelection;
+
+ /* check fsSelection field with bold simulation */
+ memset(&lf, 0, sizeof(lf));
+ strcpy(lf.lfFaceName, "Wingdings");
+ lf.lfCharSet = SYMBOL_CHARSET;
+
+ /* regular face */
+ fsSelection = get_font_fsselection(&lf);
+ ok((fsSelection & (1 << 5)) == 0, "got 0x%x\n", fsSelection);
+
+ /* face with bold simulation */
+ lf.lfWeight = FW_BOLD;
+ fsSelection = get_font_fsselection(&lf);
+ ok((fsSelection & (1 << 5)) != 0, "got 0x%x\n", fsSelection);
+
+ /* check fsSelection field with oblique simulation */
+ memset(&lf, 0, sizeof(lf));
+ strcpy(lf.lfFaceName, "Tahoma");
+ lf.lfHeight = -13;
+ lf.lfWeight = FW_NORMAL;
+ lf.lfPitchAndFamily = DEFAULT_PITCH;
+ lf.lfQuality = PROOF_QUALITY;
+
+ /* regular face */
+ fsSelection = get_font_fsselection(&lf);
+ ok((fsSelection & 1) == 0, "got 0x%x\n", fsSelection);
+
+ lf.lfItalic = 1;
+ /* face with oblique simulation */
+ fsSelection = get_font_fsselection(&lf);
+ ok((fsSelection & 1) == 1, "got 0x%x\n", fsSelection);
if (!is_font_installed("Arial"))
{
@@ -2108,7 +2188,7 @@
lf.lfPitchAndFamily = DEFAULT_PITCH;
lf.lfQuality = PROOF_QUALITY;
hfont = CreateFontIndirectA(&lf);
- assert(hfont != 0);
+ ok(hfont != NULL, "failed to create a font\n");
hfont_old = SelectObject(hdc, hfont);
otm_size = GetOutlineTextMetricsA(hdc, 0, NULL);
@@ -3782,11 +3862,7 @@
expect_default_A = expect_default_W;
/* Wine currently uses SYMBOL_CHARSET to identify whether the ANSI metrics need
special handling */
- if(cmap_type != cmap_ms_symbol && tmA.tmCharSet == SYMBOL_CHARSET
&& expect_first_A != 0x1e)
- todo_wine ok(tmA.tmFirstChar == expect_first_A ||
- tmA.tmFirstChar == expect_first_A + 1 /* win9x */,
- "A: tmFirstChar for %s got %02x expected %02x\n",
font_name, tmA.tmFirstChar, expect_first_A);
- else
+ todo_wine_if(cmap_type != cmap_ms_symbol && tmA.tmCharSet ==
SYMBOL_CHARSET && expect_first_A != 0x1e)
ok(tmA.tmFirstChar == expect_first_A ||
tmA.tmFirstChar == expect_first_A + 1 /* win9x */,
"A: tmFirstChar for %s got %02x expected %02x\n", font_name,
tmA.tmFirstChar, expect_first_A);
@@ -3810,18 +3886,12 @@
if (ret)
{
/* Wine uses the os2 first char */
- if(cmap_first != os2_first_char && cmap_type != cmap_ms_symbol)
- todo_wine ok(tmW.tmFirstChar == expect_first_W, "W: tmFirstChar for
%s got %02x expected %02x\n",
- font_name, tmW.tmFirstChar, expect_first_W);
- else
+ todo_wine_if(cmap_first != os2_first_char && cmap_type !=
cmap_ms_symbol)
ok(tmW.tmFirstChar == expect_first_W, "W: tmFirstChar for %s got
%02x expected %02x\n",
font_name, tmW.tmFirstChar, expect_first_W);
/* Wine uses the os2 last char */
- if(expect_last_W != os2_last_char && cmap_type != cmap_ms_symbol)
- todo_wine ok(tmW.tmLastChar == expect_last_W, "W: tmLastChar for %s
got %02x expected %02x\n",
- font_name, tmW.tmLastChar, expect_last_W);
- else
+ todo_wine_if(expect_last_W != os2_last_char && cmap_type !=
cmap_ms_symbol)
ok(tmW.tmLastChar == expect_last_W, "W: tmLastChar for %s got %02x
expected %02x\n",
font_name, tmW.tmLastChar, expect_last_W);
ok(tmW.tmBreakChar == expect_break_W, "W: tmBreakChar for %s got %02x
expected %02x\n",
@@ -6054,14 +6124,11 @@
}
/* FIXME: Remove once Wine is fixed */
- if (td[i][j].dpi != 96 &&
+ todo_wine_if (td[i][j].dpi != 96 &&
/* MS Sans Serif for 120 dpi and higher should include 12 pixel bitmap
set */
((!strcmp(td[i][j].face_name, "MS Sans Serif") &&
td[i][j].height == 12) ||
/* System for 120 dpi and higher should include 20 pixel bitmap set */
(!strcmp(td[i][j].face_name, "System") &&
td[i][j].height > 16)))
- todo_wine
- ok(height == td[i][j].height_pixels, "%d(%d): expected height %d, got
%d\n", i, j, td[i][j].height_pixels, height);
- else
ok(height == td[i][j].height_pixels, "%d(%d): expected height %d, got
%d\n", i, j, td[i][j].height_pixels, height);
ok(td[i][j].weight == lf.lfWeight, "%d(%d): expected lfWeight %d, got
%d\n", i, j, td[i][j].weight, lf.lfWeight);
@@ -6281,13 +6348,18 @@
static void test_fake_bold_font(void)
{
+ static const MAT2 x2_mat = { {0,2}, {0,0}, {0,0}, {0,2} };
HDC hdc;
- HFONT hfont, hfont_old;
LOGFONTA lf;
BOOL ret;
- TEXTMETRICA tm[2];
- ABC abc[2];
- INT w[2];
+ struct glyph_data {
+ TEXTMETRICA tm;
+ ABC abc;
+ INT w;
+ GLYPHMETRICS gm;
+ } data[2];
+ int i;
+ DWORD r;
if (!pGetCharWidth32A || !pGetCharABCWidthsA) {
win_skip("GetCharWidth32A/GetCharABCWidthA is not available on this
platform\n");
@@ -6297,45 +6369,51 @@
/* Test outline font */
memset(&lf, 0, sizeof(lf));
strcpy(lf.lfFaceName, "Wingdings");
- lf.lfWeight = FW_NORMAL;
lf.lfCharSet = SYMBOL_CHARSET;
- hfont = CreateFontIndirectA(&lf);
hdc = GetDC(NULL);
- hfont_old = SelectObject(hdc, hfont);
-
- /* base metrics */
- ret = GetTextMetricsA(hdc, &tm[0]);
- ok(ret, "got %d\n", ret);
- ret = pGetCharABCWidthsA(hdc, 0x76, 0x76, &abc[0]);
- ok(ret, "got %d\n", ret);
-
- lf.lfWeight = FW_BOLD;
- hfont = CreateFontIndirectA(&lf);
- DeleteObject(SelectObject(hdc, hfont));
-
- /* bold metrics */
- ret = GetTextMetricsA(hdc, &tm[1]);
- ok(ret, "got %d\n", ret);
- ret = pGetCharABCWidthsA(hdc, 0x76, 0x76, &abc[1]);
- ok(ret, "got %d\n", ret);
-
- DeleteObject(SelectObject(hdc, hfont_old));
+
+ for (i = 0; i <= 1; i++)
+ {
+ HFONT hfont, hfont_old;
+
+ lf.lfWeight = i ? FW_BOLD : FW_NORMAL;
+ hfont = CreateFontIndirectA(&lf);
+ hfont_old = SelectObject(hdc, hfont);
+
+ ret = GetTextMetricsA(hdc, &data[i].tm);
+ ok(ret, "got %d\n", ret);
+ ret = pGetCharABCWidthsA(hdc, 0x76, 0x76, &data[i].abc);
+ ok(ret, "got %d\n", ret);
+ data[i].w = data[i].abc.abcA + data[i].abc.abcB + data[i].abc.abcC;
+ r = GetGlyphOutlineA(hdc, 0x76, GGO_METRICS, &data[i].gm, 0, NULL,
&x2_mat);
+ ok(r != GDI_ERROR, "got %d\n", ret);
+
+ SelectObject(hdc, hfont_old);
+ DeleteObject(hfont);
+ }
ReleaseDC(NULL, hdc);
/* compare results (outline) */
- ok(tm[0].tmHeight == tm[1].tmHeight, "expected %d, got %d\n",
tm[0].tmHeight, tm[1].tmHeight);
- ok(tm[0].tmAscent == tm[1].tmAscent, "expected %d, got %d\n",
tm[0].tmAscent, tm[1].tmAscent);
- ok(tm[0].tmDescent == tm[1].tmDescent, "expected %d, got %d\n",
tm[0].tmDescent, tm[1].tmDescent);
- ok((tm[0].tmAveCharWidth + 1) == tm[1].tmAveCharWidth,
- "expected %d, got %d\n", tm[0].tmAveCharWidth + 1,
tm[1].tmAveCharWidth);
- ok((tm[0].tmMaxCharWidth + 1) == tm[1].tmMaxCharWidth,
- "expected %d, got %d\n", tm[0].tmMaxCharWidth + 1,
tm[1].tmMaxCharWidth);
- ok(tm[0].tmOverhang == tm[1].tmOverhang, "expected %d, got %d\n",
tm[0].tmOverhang, tm[1].tmOverhang);
- w[0] = abc[0].abcA + abc[0].abcB + abc[0].abcC;
- w[1] = abc[1].abcA + abc[1].abcB + abc[1].abcC;
- ok((w[0] + 1) == w[1], "expected %d, got %d\n", w[0] + 1, w[1]);
-
+ ok(data[0].tm.tmHeight == data[1].tm.tmHeight,
+ "expected %d, got %d\n", data[0].tm.tmHeight, data[1].tm.tmHeight);
+ ok(data[0].tm.tmAscent == data[1].tm.tmAscent,
+ "expected %d, got %d\n", data[0].tm.tmAscent, data[1].tm.tmAscent);
+ ok(data[0].tm.tmDescent == data[1].tm.tmDescent,
+ "expected %d, got %d\n", data[0].tm.tmDescent, data[1].tm.tmDescent);
+ ok(data[0].tm.tmAveCharWidth + 1 == data[1].tm.tmAveCharWidth,
+ "expected %d, got %d\n", data[0].tm.tmAveCharWidth + 1,
data[1].tm.tmAveCharWidth);
+ ok(data[0].tm.tmMaxCharWidth + 1 == data[1].tm.tmMaxCharWidth,
+ "expected %d, got %d\n", data[0].tm.tmMaxCharWidth + 1,
data[1].tm.tmMaxCharWidth);
+ ok(data[0].tm.tmOverhang == data[1].tm.tmOverhang,
+ "expected %d, got %d\n", data[0].tm.tmOverhang, data[1].tm.tmOverhang);
+ ok(data[0].w + 1 == data[1].w,
+ "expected %d, got %d\n", data[0].w + 1, data[1].w);
+
+ ok(data[0].gm.gmCellIncX + 1 == data[1].gm.gmCellIncX,
+ "expected %d, got %d\n", data[0].gm.gmCellIncX + 1,
data[1].gm.gmCellIncX);
+ ok(data[0].gm.gmCellIncY == data[1].gm.gmCellIncY,
+ "expected %d, got %d\n", data[0].gm.gmCellIncY, data[1].gm.gmCellIncY);
}
static void test_bitmap_font_glyph_index(void)
Modified: trunk/rostests/winetests/gdi32/icm.c
URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/gdi32/icm.c?rev…
==============================================================================
--- trunk/rostests/winetests/gdi32/icm.c [iso-8859-1] (original)
+++ trunk/rostests/winetests/gdi32/icm.c [iso-8859-1] Tue Mar 8 15:01:05 2016
@@ -50,6 +50,12 @@
size = MAX_PATH;
ret = GetICMProfileA( dc, &size, NULL );
ok( !ret, "GetICMProfileA succeeded\n" );
+ ok( size > 0, "got %u\n", size );
+
+ size = 0;
+ ret = GetICMProfileA( dc, &size, NULL );
+ ok( !ret, "GetICMProfileA succeeded\n" );
+ ok( size > 0, "got %u\n", size );
size = MAX_PATH;
ret = GetICMProfileA( NULL, &size, filename );
@@ -107,6 +113,11 @@
size = MAX_PATH;
ret = GetICMProfileW( NULL, &size, filename );
ok( !ret, "GetICMProfileW succeeded\n" );
+
+ size = 0;
+ ret = GetICMProfileW( dc, &size, NULL );
+ ok( !ret, "GetICMProfileW succeeded\n" );
+ ok( size > 0, "got %u\n", size );
size = 0;
SetLastError(0xdeadbeef);
Modified: trunk/rostests/winetests/gdi32/metafile.c
URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/gdi32/metafile.…
==============================================================================
--- trunk/rostests/winetests/gdi32/metafile.c [iso-8859-1] (original)
+++ trunk/rostests/winetests/gdi32/metafile.c [iso-8859-1] Tue Mar 8 15:01:05 2016
@@ -1101,6 +1101,44 @@
0x14, 0x00, 0x00, 0x00
};
+static const unsigned char EMF_TEXTOUT_OUTLINE_ON_PATH_BITS[] =
+{
+ 0x01, 0x00, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xdd, 0xff, 0xff, 0xff, 0xdd, 0xff, 0xff, 0xff,
+ 0x20, 0x45, 0x4d, 0x46, 0x00, 0x00, 0x01, 0x00,
+ 0x0c, 0x01, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,
+ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x90, 0x06, 0x00, 0x00, 0x1a, 0x04, 0x00, 0x00,
+ 0x51, 0x02, 0x00, 0x00, 0x72, 0x01, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x1a, 0x0b, 0x09, 0x00,
+ 0xf0, 0xa6, 0x05, 0x00, 0x25, 0x00, 0x00, 0x00,
+ 0x0c, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x80,
+ 0x3b, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
+ 0x54, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0x01, 0x00, 0x00, 0x00, 0xc3, 0x30, 0x0d, 0x42,
+ 0xcf, 0xf3, 0x0c, 0x42, 0x0b, 0x00, 0x00, 0x00,
+ 0x16, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
+ 0x4c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0x54, 0x00, 0x00, 0x00, 0x54, 0x00, 0x65, 0x00,
+ 0x73, 0x00, 0x74, 0x00, 0x03, 0x00, 0x00, 0x00,
+ 0x05, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
+ 0x0c, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00,
+ 0x08, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00,
+ 0x0c, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x80,
+ 0x0e, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
+ 0x14, 0x00, 0x00, 0x00
+};
+
static const unsigned char MF_LINETO_BITS[] = {
0x01, 0x00, 0x09, 0x00, 0x00, 0x03, 0x11, 0x00,
0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00,
@@ -2224,6 +2262,8 @@
HDC hdcDisplay, hdcMetafile;
HENHMETAFILE hMetafile;
BOOL ret;
+ LOGFONTA lf;
+ HFONT hFont;
static const INT dx[4] = { 3, 5, 8, 12 };
/* Win9x doesn't play EMFs on invisible windows */
@@ -2234,6 +2274,19 @@
hdcDisplay = GetDC(hwnd);
ok(hdcDisplay != 0, "GetDC error %d\n", GetLastError());
+ /* with default font */
+ ret = BeginPath(hdcDisplay);
+ ok(ret, "BeginPath error %d\n", GetLastError());
+
+ ret = ExtTextOutA(hdcDisplay, 11, 22, 0, NULL, "Test", 4, dx);
+ ok(ret, "ExtTextOut error %d\n", GetLastError());
+
+ ret = EndPath(hdcDisplay);
+ ok(ret, "EndPath error %d\n", GetLastError());
+
+ ret = GetPath(hdcDisplay, NULL, NULL, 0);
+ ok(!ret, "expected 0, got %d\n", ret);
+
hdcMetafile = CreateEnhMetaFileA(hdcDisplay, NULL, NULL, NULL);
ok(hdcMetafile != 0, "CreateEnhMetaFileA error %d\n", GetLastError());
@@ -2245,6 +2298,9 @@
ret = EndPath(hdcMetafile);
ok(ret, "EndPath error %d\n", GetLastError());
+
+ ret = GetPath(hdcMetafile, NULL, NULL, 0);
+ ok(!ret, "expected 0, got %d\n", ret);
hMetafile = CloseEnhMetaFile(hdcMetafile);
ok(hMetafile != 0, "CloseEnhMetaFile error %d\n", GetLastError());
@@ -2261,6 +2317,66 @@
ret = DeleteEnhMetaFile(hMetafile);
ok(ret, "DeleteEnhMetaFile error %d\n", GetLastError());
+
+ /* with outline font */
+ memset(&lf, 0, sizeof(lf));
+ lf.lfCharSet = ANSI_CHARSET;
+ lf.lfClipPrecision = CLIP_DEFAULT_PRECIS;
+ lf.lfWeight = FW_DONTCARE;
+ lf.lfHeight = 7;
+ lf.lfQuality = DEFAULT_QUALITY;
+ lstrcpyA(lf.lfFaceName, "Tahoma");
+ hFont = CreateFontIndirectA(&lf);
+ ok(hFont != 0, "CreateFontIndirectA error %d\n", GetLastError());
+ hFont = SelectObject(hdcDisplay, hFont);
+
+ ret = BeginPath(hdcDisplay);
+ ok(ret, "BeginPath error %d\n", GetLastError());
+
+ ret = ExtTextOutA(hdcDisplay, 11, 22, 0, NULL, "Test", 4, dx);
+ ok(ret, "ExtTextOut error %d\n", GetLastError());
+
+ ret = EndPath(hdcDisplay);
+ ok(ret, "EndPath error %d\n", GetLastError());
+
+ ret = GetPath(hdcDisplay, NULL, NULL, 0);
+ ok(ret != 0, "expected != 0\n");
+
+ SelectObject(hdcDisplay, hFont);
+
+ hdcMetafile = CreateEnhMetaFileA(hdcDisplay, NULL, NULL, NULL);
+ ok(hdcMetafile != 0, "CreateEnhMetaFileA error %d\n", GetLastError());
+
+ hFont = SelectObject(hdcMetafile, hFont);
+
+ ret = BeginPath(hdcMetafile);
+ ok(ret, "BeginPath error %d\n", GetLastError());
+
+ ret = ExtTextOutA(hdcMetafile, 11, 22, 0, NULL, "Test", 4, dx);
+ ok(ret, "ExtTextOut error %d\n", GetLastError());
+
+ ret = EndPath(hdcMetafile);
+ ok(ret, "EndPath error %d\n", GetLastError());
+
+ ret = GetPath(hdcMetafile, NULL, NULL, 0);
+ ok(!ret, "expected 0, got %d\n", ret);
+
+ hFont = SelectObject(hdcMetafile, hFont);
+ DeleteObject(hFont);
+
+ hMetafile = CloseEnhMetaFile(hdcMetafile);
+ ok(hMetafile != 0, "CloseEnhMetaFile error %d\n", GetLastError());
+
+ if (compare_emf_bits(hMetafile, EMF_TEXTOUT_OUTLINE_ON_PATH_BITS,
sizeof(EMF_TEXTOUT_OUTLINE_ON_PATH_BITS),
+ "emf_TextOut_on_path", FALSE) != 0)
+ {
+ dump_emf_bits(hMetafile, "emf_TextOut_outline_on_path");
+ dump_emf_records(hMetafile, "emf_TextOut_outline_on_path");
+ }
+
+ ret = DeleteEnhMetaFile(hMetafile);
+ ok(ret, "DeleteEnhMetaFile error %d\n", GetLastError());
+
ret = ReleaseDC(hwnd, hdcDisplay);
ok(ret, "ReleaseDC error %d\n", GetLastError());
DestroyWindow(hwnd);
@@ -3361,6 +3477,41 @@
DeleteEnhMetaFile(hemf);
}
+static const unsigned char EMF_PATH_BITS[] =
+{
+ 0x01, 0x00, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xe6, 0xff, 0xff, 0xff, 0xe6, 0xff, 0xff, 0xff,
+ 0x20, 0x45, 0x4d, 0x46, 0x00, 0x00, 0x01, 0x00,
+ 0xf8, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00,
+ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0x07, 0x00, 0x00, 0xd3, 0x03, 0x00, 0x00,
+ 0xfc, 0x01, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x60, 0xc0, 0x07, 0x00,
+ 0xd3, 0xf3, 0x03, 0x00, 0x3b, 0x00, 0x00, 0x00,
+ 0x08, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00,
+ 0x10, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00,
+ 0x32, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00,
+ 0x10, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00,
+ 0x96, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00,
+ 0x10, 0x00, 0x00, 0x00, 0x96, 0x00, 0x00, 0x00,
+ 0x96, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00,
+ 0x10, 0x00, 0x00, 0x00, 0x96, 0x00, 0x00, 0x00,
+ 0x32, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00,
+ 0x10, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00,
+ 0x32, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00,
+ 0x18, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00,
+ 0x0a, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00,
+ 0x13, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00,
+ 0x08, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00,
+ 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x10, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00
+};
+
static void test_emf_GetPath(void)
{
HDC hdcMetafile;
@@ -3383,13 +3534,20 @@
ok( ret, "LineTo error %d.\n", GetLastError());
ret = LineTo(hdcMetafile, 50, 50);
ok( ret, "LineTo error %d.\n", GetLastError());
+ Rectangle(hdcMetafile, 10, 10, 20, 20);
EndPath(hdcMetafile);
size = GetPath(hdcMetafile, NULL, NULL, 0);
- todo_wine ok( size == 5, "GetPath returned %d.\n", size);
+ ok( size == 9, "GetPath returned %d.\n", size);
hemf = CloseEnhMetaFile(hdcMetafile);
ok(hemf != 0, "CloseEnhMetaFile error %d\n", GetLastError());
+
+ if (compare_emf_bits(hemf, EMF_PATH_BITS, sizeof(EMF_PATH_BITS),
"test_emf_GetPath", FALSE) != 0)
+ {
+ dump_emf_bits(hemf, "test_emf_GetPath");
+ dump_emf_records(hemf, "test_emf_GetPath");
+ }
DeleteEnhMetaFile(hemf);
}
Modified: trunk/rostests/winetests/gdi32/path.c
URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/gdi32/path.c?re…
==============================================================================
--- trunk/rostests/winetests/gdi32/path.c [iso-8859-1] (original)
+++ trunk/rostests/winetests/gdi32/path.c [iso-8859-1] Tue Mar 8 15:01:05 2016
@@ -390,9 +390,7 @@
size = GetPath(hdc, pnt, types, size);
assert(size > 0);
- if (todo_size) todo_wine
- ok(size == expected_size, "Path size %d does not match expected size
%d\n", size, expected_size);
- else
+ todo_wine_if (todo_size)
ok(size == expected_size, "Path size %d does not match expected size
%d\n", size, expected_size);
if (winetest_debug > 2)
@@ -407,11 +405,7 @@
(pnt[idx].x >= expected[eidx].x-2 && pnt[idx].x <=
expected[eidx].x+2) &&
(pnt[idx].y >= expected[eidx].y-2 && pnt[idx].y <=
expected[eidx].y+2);
- if (expected[eidx].todo || numskip) todo_wine
- ok(match, "Expected #%d: %s (%d,%d) but got %s (%d,%d)\n", eidx,
- type_string[expected[eidx].type], expected[eidx].x, expected[eidx].y,
- type_string[types[idx]], pnt[idx].x, pnt[idx].y);
- else
+ todo_wine_if (expected[eidx].todo || numskip)
ok(match, "Expected #%d: %s (%d,%d) but got %s (%d,%d)\n", eidx,
type_string[expected[eidx].type], expected[eidx].x, expected[eidx].y,
type_string[types[idx]], pnt[idx].x, pnt[idx].y);