[GDI32]: Don't destroy the heap when calling GetSystemPaletteEntries. Note to whoever wrote "//make this work": (&array[x]) is defintely not equal to (&array + x). This is why we don't use pointers-to-arrays, among other reasons.

[GDI32]: Reformat GetSystemPaletteEntries away from grotesque 5-space identation (who does that?).
[GDI32]: Optimize GetSystemPaletteEntries by not zeroing over fields that get overwritten anyway.
[GDI32]: Simplify loop control, remove not-needed local variable in GetSystemPaletteEntries.

svn path=/trunk/; revision=48716
This commit is contained in:
Sir Richard 2010-09-07 07:50:51 +00:00
parent 65fc01dc92
commit b96cb710f4

View file

@ -87,28 +87,30 @@ GetSystemPaletteEntries(HDC hDC,
LPPALETTEENTRY ppe) LPPALETTEENTRY ppe)
{ {
PALETTEENTRY ippe[256]; PALETTEENTRY ippe[256];
// Make this work!
if ((INT)cEntries < 0 ) return 0;
if ( GetDeviceCaps(hDC, RASTERCAPS) & RC_PALETTE ) if ((INT)cEntries >= 0)
return NtGdiDoPalette(hDC, iStartIndex, cEntries, ppe, GdiPalGetSystemEntries, FALSE);
else
{ {
if (ppe) if (GetDeviceCaps(hDC, RASTERCAPS) & RC_PALETTE)
{ {
RtlZeroMemory( &ippe, sizeof(ippe) ); return NtGdiDoPalette(hDC,
RtlCopyMemory( &ippe, &sys_pal_template, 10 * sizeof(PALETTEENTRY) ); iStartIndex,
RtlCopyMemory( &ippe + 246 , &sys_pal_template + 10 , 10 * sizeof(PALETTEENTRY) ); cEntries,
ppe,
GdiPalGetSystemEntries,
FALSE);
}
else if (ppe)
{
RtlCopyMemory(ippe, sys_pal_template, 10 * sizeof(PALETTEENTRY));
RtlCopyMemory(&ippe[246], &sys_pal_template[10], 10 * sizeof(PALETTEENTRY));
RtlZeroMemory(&ippe[10], sizeof(ippe) - 20 * sizeof(PALETTEENTRY));
if (iStartIndex < 256) if (iStartIndex < 256)
{ {
UINT Index = 256 - iStartIndex; RtlCopyMemory(ppe,
if ( Index > cEntries ) Index = cEntries;
RtlCopyMemory( ppe,
&ippe[iStartIndex], &ippe[iStartIndex],
Index*sizeof(PALETTEENTRY)); min(256 - iStartIndex, cEntries) *
sizeof(PALETTEENTRY));
} }
} }
} }