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 @@ ...@@ -14,7 +14,6 @@
#include "global.h" #include "global.h"
#include "sysmetrics.h" #include "sysmetrics.h"
#include "cursoricon.h" #include "cursoricon.h"
#include "color.h"
#include "debug.h" #include "debug.h"
#include "x11drv.h" #include "x11drv.h"
...@@ -462,35 +461,40 @@ HANDLE32 WINAPI LoadImage32A( HINSTANCE32 hinst, LPCSTR name, UINT32 type, ...@@ -462,35 +461,40 @@ HANDLE32 WINAPI LoadImage32A( HINSTANCE32 hinst, LPCSTR name, UINT32 type,
HANDLE32 WINAPI LoadImage32W( HINSTANCE32 hinst, LPCWSTR name, UINT32 type, HANDLE32 WINAPI LoadImage32W( HINSTANCE32 hinst, LPCWSTR name, UINT32 type,
INT32 desiredx, INT32 desiredy, UINT32 loadflags ) INT32 desiredx, INT32 desiredy, UINT32 loadflags )
{ {
if (HIWORD(name)) { if (HIWORD(name)) {
TRACE(resource,"(0x%04x,%p,%d,%d,%d,0x%08x)\n", TRACE(resource,"(0x%04x,%p,%d,%d,%d,0x%08x)\n",
hinst,name,type,desiredx,desiredy,loadflags hinst,name,type,desiredx,desiredy,loadflags);
); } else {
} else { TRACE(resource,"(0x%04x,%p,%d,%d,%d,0x%08x)\n",
TRACE(resource,"(0x%04x,%p,%d,%d,%d,0x%08x)\n", hinst,name,type,desiredx,desiredy,loadflags);
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; if (loadflags & LR_LOADFROMFILE) loadflags &= ~LR_SHARED;
switch (type) { switch (type) {
case IMAGE_BITMAP: case IMAGE_BITMAP:
return BITMAP_LoadBitmap32W(hinst, name, loadflags); return BITMAP_LoadBitmap32W(hinst, name, loadflags);
case IMAGE_ICON:
return CURSORICON_Load32(hinst, name, desiredx, desiredy, case IMAGE_ICON:
MIN(16, COLOR_GetSystemPaletteSize()), FALSE, loadflags); {
case IMAGE_CURSOR: HDC32 hdc = GetDC32(0);
return CURSORICON_Load32(hinst, name, desiredx, desiredy, 1, TRUE, UINT32 palEnts = GetSystemPaletteEntries32(hdc, 0, 0, NULL);
loadflags); 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; return 0;
} }
......
...@@ -833,6 +833,10 @@ HCURSOR16 WINAPI LoadCursor16( HINSTANCE16 hInstance, SEGPTR name ) ...@@ -833,6 +833,10 @@ HCURSOR16 WINAPI LoadCursor16( HINSTANCE16 hInstance, SEGPTR name )
*/ */
HICON16 WINAPI LoadIcon16( 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)) if (HIWORD(name))
TRACE(icon, "%04x '%s'\n", TRACE(icon, "%04x '%s'\n",
hInstance, (char *)PTR_SEG_TO_LIN( name ) ); hInstance, (char *)PTR_SEG_TO_LIN( name ) );
...@@ -842,7 +846,7 @@ HICON16 WINAPI LoadIcon16( HINSTANCE16 hInstance, SEGPTR name ) ...@@ -842,7 +846,7 @@ HICON16 WINAPI LoadIcon16( HINSTANCE16 hInstance, SEGPTR name )
return CURSORICON_Load16( hInstance, name, return CURSORICON_Load16( hInstance, name,
SYSMETRICS_CXICON, SYSMETRICS_CYICON, 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, ...@@ -1294,7 +1298,11 @@ INT16 WINAPI LookupIconIdFromDirectoryEx16( LPBYTE xdir, BOOL16 bIcon,
UINT16 retVal = 0; UINT16 retVal = 0;
if( dir && !dir->idReserved && (dir->idType & 3) ) 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 ) if( bIcon )
{ {
ICONDIRENTRY* entry; ICONDIRENTRY* entry;
...@@ -1484,9 +1492,13 @@ HCURSOR32 WINAPI LoadCursorFromFile32A (LPCSTR name) ...@@ -1484,9 +1492,13 @@ HCURSOR32 WINAPI LoadCursorFromFile32A (LPCSTR name)
*/ */
HICON32 WINAPI LoadIcon32W(HINSTANCE32 hInstance, LPCWSTR 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, return CURSORICON_Load32( hInstance, name,
SYSMETRICS_CXICON, SYSMETRICS_CYICON, SYSMETRICS_CXICON, SYSMETRICS_CYICON,
MIN( 16, COLOR_GetSystemPaletteSize() ), FALSE, 0); MIN( 16, palEnts ), FALSE, 0);
} }
/*********************************************************************** /***********************************************************************
......
...@@ -11,7 +11,6 @@ ...@@ -11,7 +11,6 @@
#include "bitmap.h" #include "bitmap.h"
#include "callback.h" #include "callback.h"
#include "palette.h" #include "palette.h"
#include "color.h"
#include "global.h" #include "global.h"
#include "debug.h" #include "debug.h"
#include "x11drv.h" #include "x11drv.h"
......
...@@ -421,6 +421,7 @@ UINT32 WINAPI GetSystemPaletteEntries32( ...@@ -421,6 +421,7 @@ UINT32 WINAPI GetSystemPaletteEntries32(
TRACE(palette, "hdc=%04x,start=%i,count=%i\n", hdc,start,count); TRACE(palette, "hdc=%04x,start=%i,count=%i\n", hdc,start,count);
if (!(dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC ))) return 0; if (!(dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC ))) return 0;
if (!entries) return COLOR_GetSystemPaletteSize();
if (start >= dc->w.devCaps->sizePalette) if (start >= dc->w.devCaps->sizePalette)
{ {
GDI_HEAP_UNLOCK( hdc ); 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