Author: gschneider Date: Mon Nov 24 12:40:46 2008 New Revision: 37620
URL: http://svn.reactos.org/svn/reactos?rev=37620&view=rev Log: - Move slightly changed PS_ALTERNATE and PS_INSIDEFRAME checks from win32k to gdi32 - Don't restrict the width of PS_SOLID pens - Fixes 25 gdi32 pen winetests - Pen types left tbd: PS_NULL (problems in GetObject and ExtCreatePen) and PS_ALTNATE (EngLineTo/StrokePath does not support bitmap pens)
Modified: trunk/reactos/dll/win32/gdi32/objects/brush.c trunk/reactos/subsystems/win32/win32k/objects/pen.c
Modified: trunk/reactos/dll/win32/gdi32/objects/brush.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/gdi32/objects/bru... ============================================================================== --- trunk/reactos/dll/win32/gdi32/objects/brush.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/gdi32/objects/brush.c [iso-8859-1] Mon Nov 24 12:40:46 2008 @@ -29,6 +29,18 @@ SetLastError(ERROR_INVALID_PARAMETER); return 0; } + } + else if ((dwPenStyle & PS_STYLE_MASK) == PS_INSIDEFRAME && + (dwPenStyle & PS_TYPE_MASK) != PS_GEOMETRIC) + { + SetLastError(ERROR_INVALID_PARAMETER); + return 0; + } + else if ((dwPenStyle & PS_STYLE_MASK) == PS_ALTERNATE && + (dwPenStyle & PS_TYPE_MASK) != PS_COSMETIC) + { + SetLastError(ERROR_INVALID_PARAMETER); + return 0; } else {
Modified: trunk/reactos/subsystems/win32/win32k/objects/pen.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/obj... ============================================================================== --- trunk/reactos/subsystems/win32/win32k/objects/pen.c [iso-8859-1] (original) +++ trunk/reactos/subsystems/win32/win32k/objects/pen.c [iso-8859-1] Mon Nov 24 12:40:46 2008 @@ -79,7 +79,7 @@ hPen = PenObject->BaseObject.hHmgr;
// If nWidth is zero, the pen is a single pixel wide, regardless of the current transformation. - if ((bOldStylePen) && (!dwWidth)) dwWidth = 1; + if ((bOldStylePen) && (!dwWidth) && (dwPenStyle & PS_STYLE_MASK) != PS_SOLID) dwWidth = 1;
PenObject->ptPenWidth.x = dwWidth; PenObject->ptPenWidth.y = 0; @@ -108,8 +108,6 @@ break;
case PS_ALTERNATE: - /* PS_ALTERNATE is applicable only for cosmetic pens */ - if ((dwPenStyle & PS_TYPE_MASK) == PS_GEOMETRIC) goto ExitCleanup; PenObject->flAttrs |= GDIBRUSH_IS_BITMAP; PenObject->hbmPattern = IntGdiCreateBitmap(24, 1, 1, 1, (LPBYTE)PatternAlternate); break; @@ -135,9 +133,6 @@ break;
case PS_INSIDEFRAME: - /* FIXME: does it need some additional work? */ - /* PS_INSIDEFRAME is applicable only for geometric pens */ - if ((dwPenStyle & PS_TYPE_MASK) == PS_COSMETIC) goto ExitCleanup; PenObject->flAttrs |= (GDIBRUSH_IS_SOLID|GDIBRUSH_IS_INSIDEFRAME); break;