From a38d84d8542aec351a54954562e521eefc6c70bf Mon Sep 17 00:00:00 2001 From: Huw D M Davies Date: Mon, 30 Nov 1998 11:18:26 +0000 Subject: [PATCH] GetSystemPaletteEntries returns palette size if entries==NULL. Use this instead of COLOR_GetSystemPaletteSize. --- objects/bitmap.c | 56 ++++++++++++++++++++++++-------------------- objects/cursoricon.c | 18 +++++++++++--- objects/dib.c | 1 - objects/palette.c | 1 + 4 files changed, 46 insertions(+), 30 deletions(-) diff --git a/objects/bitmap.c b/objects/bitmap.c index 2218e3b3285..0f6a72336b7 100644 --- a/objects/bitmap.c +++ b/objects/bitmap.c @@ -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; } diff --git a/objects/cursoricon.c b/objects/cursoricon.c index 060ac3a072d..2fb2914883a 100644 --- a/objects/cursoricon.c +++ b/objects/cursoricon.c @@ -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); } /*********************************************************************** diff --git a/objects/dib.c b/objects/dib.c index 82226fb7b09..6d12b28fd80 100644 --- a/objects/dib.c +++ b/objects/dib.c @@ -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" diff --git a/objects/palette.c b/objects/palette.c index 950b5cc6922..b6179a73717 100644 --- a/objects/palette.c +++ b/objects/palette.c @@ -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 );