diff --git a/reactos/subsystems/win32/win32k/include/intgdi.h b/reactos/subsystems/win32/win32k/include/intgdi.h index 6c1eaa7399e..473e83dffc4 100644 --- a/reactos/subsystems/win32/win32k/include/intgdi.h +++ b/reactos/subsystems/win32/win32k/include/intgdi.h @@ -44,11 +44,17 @@ IntPatBlt( DWORD ROP, PGDIBRUSHOBJ BrushObj); +VOID FASTCALL +IntGdiSetSolidBrushColor(HBRUSH hBrush, COLORREF Color); + /* Pen functions */ HPEN FASTCALL IntGdiCreatePenIndirect(PLOGPEN lgpn); +VOID FASTCALL +IntGdiSetSolidPenColor(HPEN hPen, COLORREF Color); + /* Line functions */ BOOL FASTCALL diff --git a/reactos/subsystems/win32/win32k/objects/brush.c b/reactos/subsystems/win32/win32k/objects/brush.c index 87fc8f201a1..c2ba778561f 100644 --- a/reactos/subsystems/win32/win32k/objects/brush.c +++ b/reactos/subsystems/win32/win32k/objects/brush.c @@ -847,4 +847,17 @@ NtGdiPatBlt( return ret; } +VOID FASTCALL +IntGdiSetSolidBrushColor(HBRUSH hBrush, COLORREF Color) +{ + PGDIBRUSHOBJ BrushObject; + + BrushObject = BRUSHOBJ_LockBrush(hBrush); + if (BrushObject->flAttrs & GDIBRUSH_IS_SOLID) + { + BrushObject->BrushAttr.lbColor = Color & 0xFFFFFF; + } + BRUSHOBJ_UnlockBrush(BrushObject); +} + /* EOF */ diff --git a/reactos/subsystems/win32/win32k/objects/pen.c b/reactos/subsystems/win32/win32k/objects/pen.c index 0b615f0f210..98bf3071d31 100644 --- a/reactos/subsystems/win32/win32k/objects/pen.c +++ b/reactos/subsystems/win32/win32k/objects/pen.c @@ -186,4 +186,17 @@ NtGdiExtCreatePen( return IntGdiCreatePenIndirect(&LogPen); } +VOID FASTCALL +IntGdiSetSolidPenColor(HPEN hPen, COLORREF Color) +{ + PGDIBRUSHOBJ PenObject; + + PenObject = PENOBJ_LockPen(hPen); + if (PenObject->flAttrs & GDIBRUSH_IS_SOLID) + { + PenObject->BrushAttr.lbColor = Color & 0xFFFFFF; + } + PENOBJ_UnlockPen(PenObject); +} + /* EOF */ diff --git a/reactos/subsystems/win32/win32k/objects/stockobj.c b/reactos/subsystems/win32/win32k/objects/stockobj.c index 811c03a2001..991079055c3 100644 --- a/reactos/subsystems/win32/win32k/objects/stockobj.c +++ b/reactos/subsystems/win32/win32k/objects/stockobj.c @@ -177,14 +177,16 @@ IntSetSysColors(UINT nColors, INT *Elements, COLORREF *Colors) for(i = 0; i < nColors; i++) { - if((*Elements) >= 0 && (*Elements) < NUM_SYSCOLORS) + if((UINT)(*Elements) < NUM_SYSCOLORS) { SysColors[*Elements] = *Colors; - /* FIXME - update the syscolor pens and brushes */ + IntGdiSetSolidBrushColor(SysColorBrushes[*Elements], *Colors); + IntGdiSetSolidPenColor(SysColorPens[*Elements], *Colors); } Elements++; Colors++; } + UserPostMessage(HWND_BROADCAST, WM_SYSCOLORCHANGE, 0, 0); return nColors > 0; } @@ -263,7 +265,7 @@ IntGetSysColors(COLORREF *Colors, UINT nColors) DWORD FASTCALL IntGetSysColor(INT nIndex) { - return ((nIndex < 0) || (NUM_SYSCOLORS <= nIndex)) ? 0 : SysColors[nIndex]; + return (NUM_SYSCOLORS <= (UINT)nIndex) ? 0 : SysColors[nIndex]; } VOID FASTCALL