IntSetSysColors: update SysColorBrushes and Pens and broadcast WM_SYCOLORCHANGE message. Now you can change colors with desk.cpl

svn path=/trunk/; revision=26272
This commit is contained in:
Timo Kreuzer 2007-04-06 22:50:19 +00:00
parent 937e866fb2
commit 69ef89a5e9
4 changed files with 37 additions and 3 deletions

View file

@ -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

View file

@ -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 */

View file

@ -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 */

View file

@ -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