gdi32: Handle PS_USERSTYLE in ExtCreatePen.

This commit is contained in:
Evan Stade 2007-07-30 19:09:19 -07:00 committed by Alexandre Julliard
parent ff5076c008
commit eca194da7f
2 changed files with 34 additions and 22 deletions

View file

@ -123,14 +123,38 @@ HPEN WINAPI ExtCreatePen( DWORD style, DWORD width,
if ((style & PS_STYLE_MASK) == PS_USERSTYLE)
{
if (!style_count || (style_count > 16) || !style_bits)
if(((INT)style_count) <= 0)
return 0;
if ((style_count > 16) || !style_bits)
{
SetLastError(ERROR_INVALID_PARAMETER);
return 0;
}
/* FIXME: PS_USERSTYLE workaround */
FIXME("PS_USERSTYLE not handled\n");
style = (style & ~PS_STYLE_MASK) | PS_SOLID;
if ((style & PS_TYPE_MASK) == PS_COSMETIC)
{
/* FIXME: PS_USERSTYLE workaround */
FIXME("PS_COSMETIC | PS_USERSTYLE not handled\n");
style = (style & ~PS_STYLE_MASK) | PS_SOLID;
}
else
{
UINT i;
BOOL has_neg = FALSE, all_zero = TRUE;
for(i = 0; (i < style_count) && !has_neg; i++)
{
has_neg = has_neg || (((INT)(style_bits[i])) < 0);
all_zero = all_zero && (style_bits[i] == 0);
}
if(all_zero || has_neg)
{
SetLastError(ERROR_INVALID_PARAMETER);
return 0;
}
}
}
else
{

View file

@ -409,12 +409,6 @@ test_geometric_pens:
ok(ext_pen.elp.elpPenStyle == pen[i].ret_style, "expected %x, got %x\n", pen[i].ret_style, ext_pen.elp.elpPenStyle);
else
{
if (pen[i].style == PS_USERSTYLE)
{
todo_wine
ok(ext_pen.elp.elpPenStyle == (PS_GEOMETRIC | pen[i].style), "expected %x, got %x\n", PS_GEOMETRIC | pen[i].style, ext_pen.elp.elpPenStyle);
}
else
ok(ext_pen.elp.elpPenStyle == (PS_GEOMETRIC | pen[i].style), "expected %x, got %x\n", PS_GEOMETRIC | pen[i].style, ext_pen.elp.elpPenStyle);
}
@ -510,8 +504,7 @@ static void test_ps_userstyle(void)
pen = ExtCreatePen(PS_GEOMETRIC | PS_USERSTYLE, 50, &lb, 0, style);
ok(pen == 0, "ExtCreatePen should fail\n");
todo_wine
expect(0xdeadbeef, GetLastError());
expect(0xdeadbeef, GetLastError());
DeleteObject(pen);
SetLastError(0xdeadbeef);
@ -523,24 +516,19 @@ static void test_ps_userstyle(void)
pen = ExtCreatePen(PS_GEOMETRIC | PS_USERSTYLE, 50, &lb, -1, style);
ok(pen == 0, "ExtCreatePen should fail\n");
todo_wine
expect(0xdeadbeef, GetLastError());
expect(0xdeadbeef, GetLastError());
DeleteObject(pen);
SetLastError(0xdeadbeef);
pen = ExtCreatePen(PS_GEOMETRIC | PS_USERSTYLE, 50, &lb, 5, bad_style);
todo_wine
ok(pen == 0, "ExtCreatePen should fail\n");
todo_wine
expect(ERROR_INVALID_PARAMETER, GetLastError());
ok(pen == 0, "ExtCreatePen should fail\n");
expect(ERROR_INVALID_PARAMETER, GetLastError());
DeleteObject(pen);
SetLastError(0xdeadbeef);
pen = ExtCreatePen(PS_GEOMETRIC | PS_USERSTYLE, 50, &lb, 5, bad_style2);
todo_wine
ok(pen == 0, "ExtCreatePen should fail\n");
todo_wine
expect(ERROR_INVALID_PARAMETER, GetLastError());
ok(pen == 0, "ExtCreatePen should fail\n");
expect(ERROR_INVALID_PARAMETER, GetLastError());
DeleteObject(pen);
SetLastError(0xdeadbeef);