Commit a38d84d8 authored by Huw D M Davies's avatar Huw D M Davies Committed by Alexandre Julliard

GetSystemPaletteEntries returns palette size if entries==NULL.

Use this instead of COLOR_GetSystemPaletteSize.
parent 1ff1f7d1
......@@ -14,7 +14,6 @@
#include "global.h"
#include "sysmetrics.h"
#include "cursoricon.h"
#include "color.h"
#include "debug.h"
#include "x11drv.h"
......@@ -462,35 +461,40 @@ HANDLE32 WINAPI LoadImage32A( HINSTANCE32 hinst, LPCSTR name, UINT32 type,
HANDLE32 WINAPI LoadImage32W( HINSTANCE32 hinst, LPCWSTR name, UINT32 type,
INT32 desiredx, INT32 desiredy, UINT32 loadflags )
{
if (HIWORD(name)) {
TRACE(resource,"(0x%04x,%p,%d,%d,%d,0x%08x)\n",
hinst,name,type,desiredx,desiredy,loadflags
);
} else {
TRACE(resource,"(0x%04x,%p,%d,%d,%d,0x%08x)\n",
hinst,name,type,desiredx,desiredy,loadflags
);
if (HIWORD(name)) {
TRACE(resource,"(0x%04x,%p,%d,%d,%d,0x%08x)\n",
hinst,name,type,desiredx,desiredy,loadflags);
} else {
TRACE(resource,"(0x%04x,%p,%d,%d,%d,0x%08x)\n",
hinst,name,type,desiredx,desiredy,loadflags);
}
if (loadflags & LR_DEFAULTSIZE) {
if (type == IMAGE_ICON) {
if (!desiredx) desiredx = SYSMETRICS_CXICON;
if (!desiredy) desiredy = SYSMETRICS_CYICON;
} else if (type == IMAGE_CURSOR) {
if (!desiredx) desiredx = SYSMETRICS_CXCURSOR;
if (!desiredy) desiredy = SYSMETRICS_CYCURSOR;
}
if (loadflags & LR_DEFAULTSIZE)
{
if (type == IMAGE_ICON) {
if (!desiredx) desiredx = SYSMETRICS_CXICON;
if (!desiredy) desiredy = SYSMETRICS_CYICON;
} else if (type == IMAGE_CURSOR) {
if (!desiredx) desiredx = SYSMETRICS_CXCURSOR;
if (!desiredy) desiredy = SYSMETRICS_CYCURSOR;
}
}
if (loadflags & LR_LOADFROMFILE) loadflags &= ~LR_SHARED;
switch (type) {
case IMAGE_BITMAP:
return BITMAP_LoadBitmap32W(hinst, name, loadflags);
case IMAGE_ICON:
return CURSORICON_Load32(hinst, name, desiredx, desiredy,
MIN(16, COLOR_GetSystemPaletteSize()), FALSE, loadflags);
case IMAGE_CURSOR:
return CURSORICON_Load32(hinst, name, desiredx, desiredy, 1, TRUE,
loadflags);
case IMAGE_BITMAP:
return BITMAP_LoadBitmap32W(hinst, name, loadflags);
case IMAGE_ICON:
{
HDC32 hdc = GetDC32(0);
UINT32 palEnts = GetSystemPaletteEntries32(hdc, 0, 0, NULL);
ReleaseDC32(0, hdc);
return CURSORICON_Load32(hinst, name, desiredx, desiredy,
MIN(16, palEnts), FALSE, loadflags);
}
case IMAGE_CURSOR:
return CURSORICON_Load32(hinst, name, desiredx, desiredy,
1, TRUE, loadflags);
}
return 0;
}
......
......@@ -833,6 +833,10 @@ HCURSOR16 WINAPI LoadCursor16( HINSTANCE16 hInstance, SEGPTR name )
*/
HICON16 WINAPI LoadIcon16( HINSTANCE16 hInstance, SEGPTR name )
{
HDC32 hdc = GetDC32(0);
UINT32 palEnts = GetSystemPaletteEntries32(hdc, 0, 0, NULL);
ReleaseDC32(0, hdc);
if (HIWORD(name))
TRACE(icon, "%04x '%s'\n",
hInstance, (char *)PTR_SEG_TO_LIN( name ) );
......@@ -842,7 +846,7 @@ HICON16 WINAPI LoadIcon16( HINSTANCE16 hInstance, SEGPTR name )
return CURSORICON_Load16( hInstance, name,
SYSMETRICS_CXICON, SYSMETRICS_CYICON,
MIN( 16, COLOR_GetSystemPaletteSize() ), FALSE, 0);
MIN(16, palEnts), FALSE, 0);
}
......@@ -1294,7 +1298,11 @@ INT16 WINAPI LookupIconIdFromDirectoryEx16( LPBYTE xdir, BOOL16 bIcon,
UINT16 retVal = 0;
if( dir && !dir->idReserved && (dir->idType & 3) )
{
int colors = (cFlag & LR_MONOCHROME) ? 2 : COLOR_GetSystemPaletteSize();
HDC32 hdc = GetDC32(0);
UINT32 palEnts = GetSystemPaletteEntries32(hdc, 0, 0, NULL);
int colors = (cFlag & LR_MONOCHROME) ? 2 : palEnts;
ReleaseDC32(0, hdc);
if( bIcon )
{
ICONDIRENTRY* entry;
......@@ -1484,9 +1492,13 @@ HCURSOR32 WINAPI LoadCursorFromFile32A (LPCSTR name)
*/
HICON32 WINAPI LoadIcon32W(HINSTANCE32 hInstance, LPCWSTR name)
{
HDC32 hdc = GetDC32(0);
UINT32 palEnts = GetSystemPaletteEntries32(hdc, 0, 0, NULL);
ReleaseDC32(0, hdc);
return CURSORICON_Load32( hInstance, name,
SYSMETRICS_CXICON, SYSMETRICS_CYICON,
MIN( 16, COLOR_GetSystemPaletteSize() ), FALSE, 0);
MIN( 16, palEnts ), FALSE, 0);
}
/***********************************************************************
......
......@@ -11,7 +11,6 @@
#include "bitmap.h"
#include "callback.h"
#include "palette.h"
#include "color.h"
#include "global.h"
#include "debug.h"
#include "x11drv.h"
......
......@@ -421,6 +421,7 @@ UINT32 WINAPI GetSystemPaletteEntries32(
TRACE(palette, "hdc=%04x,start=%i,count=%i\n", hdc,start,count);
if (!(dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC ))) return 0;
if (!entries) return COLOR_GetSystemPaletteSize();
if (start >= dc->w.devCaps->sizePalette)
{
GDI_HEAP_UNLOCK( hdc );
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment