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, DWORD ROP,
PGDIBRUSHOBJ BrushObj); PGDIBRUSHOBJ BrushObj);
VOID FASTCALL
IntGdiSetSolidBrushColor(HBRUSH hBrush, COLORREF Color);
/* Pen functions */ /* Pen functions */
HPEN FASTCALL HPEN FASTCALL
IntGdiCreatePenIndirect(PLOGPEN lgpn); IntGdiCreatePenIndirect(PLOGPEN lgpn);
VOID FASTCALL
IntGdiSetSolidPenColor(HPEN hPen, COLORREF Color);
/* Line functions */ /* Line functions */
BOOL FASTCALL BOOL FASTCALL

View file

@ -847,4 +847,17 @@ NtGdiPatBlt(
return ret; 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 */ /* EOF */

View file

@ -186,4 +186,17 @@ NtGdiExtCreatePen(
return IntGdiCreatePenIndirect(&LogPen); 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 */ /* EOF */

View file

@ -177,14 +177,16 @@ IntSetSysColors(UINT nColors, INT *Elements, COLORREF *Colors)
for(i = 0; i < nColors; i++) for(i = 0; i < nColors; i++)
{ {
if((*Elements) >= 0 && (*Elements) < NUM_SYSCOLORS) if((UINT)(*Elements) < NUM_SYSCOLORS)
{ {
SysColors[*Elements] = *Colors; SysColors[*Elements] = *Colors;
/* FIXME - update the syscolor pens and brushes */ IntGdiSetSolidBrushColor(SysColorBrushes[*Elements], *Colors);
IntGdiSetSolidPenColor(SysColorPens[*Elements], *Colors);
} }
Elements++; Elements++;
Colors++; Colors++;
} }
UserPostMessage(HWND_BROADCAST, WM_SYSCOLORCHANGE, 0, 0);
return nColors > 0; return nColors > 0;
} }
@ -263,7 +265,7 @@ IntGetSysColors(COLORREF *Colors, UINT nColors)
DWORD FASTCALL DWORD FASTCALL
IntGetSysColor(INT nIndex) IntGetSysColor(INT nIndex)
{ {
return ((nIndex < 0) || (NUM_SYSCOLORS <= nIndex)) ? 0 : SysColors[nIndex]; return (NUM_SYSCOLORS <= (UINT)nIndex) ? 0 : SysColors[nIndex];
} }
VOID FASTCALL VOID FASTCALL