Author: gedmurphy Date: Tue Jan 16 02:33:01 2007 New Revision: 25476
URL: http://svn.reactos.org/svn/reactos?rev=25476&view=rev Log: revert r25474
Modified: trunk/reactos/dll/win32/user32/windows/icon.c
Modified: trunk/reactos/dll/win32/user32/windows/icon.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/user32/windows/ic... ============================================================================== --- trunk/reactos/dll/win32/user32/windows/icon.c (original) +++ trunk/reactos/dll/win32/user32/windows/icon.c Tue Jan 16 02:33:01 2007 @@ -526,42 +526,39 @@ int Height, int ColorBits) { - int i, cx, cy, Bits, BestBits = 0, BestEntry = -1; - UINT iTotalDiff, iXDiff=0, iYDiff=0, iColorDiff; - UINT iTempXDiff, iTempYDiff, iTempColorDiff; - - /* Find Best Fit */ - iTotalDiff = 0xFFFFFFFF; - iColorDiff = 0xFFFFFFFF; + int i, MaxWidth, MaxHeight, cx, cy, Bits, BestEntry = -1; + + /* Double height to account for AND and XOR masks */ + Height *= 2; + + /* First find the largest one smaller than or equal to the requested size*/ + MaxWidth = MaxHeight = 0; for (i = 0; get_entry(dir, i, &cx, &cy, &Bits); i++ ) { - iTempXDiff = abs(Width - cx); - iTempYDiff = abs(Height - cy); - - if(iTotalDiff > (iTempXDiff + iTempYDiff)) + if ((cx <= Width) && (cy <= Height) && + (cx > MaxWidth) && (cy > MaxHeight) && + (Bits == 1)) { - iXDiff = iTempXDiff; - iYDiff = iTempYDiff; - iTotalDiff = iXDiff + iYDiff; + BestEntry = i; + MaxWidth = cx; + MaxHeight = cy; } } - - /* Find Best Colors for Best Fit */ + if (BestEntry != -1) + return BestEntry; + + /* Now find the smallest one larger than the requested size */ + MaxWidth = MaxHeight = 255; for (i = 0; get_entry(dir, i, &cx, &cy, &Bits); i++ ) { - if(abs(Width - cx) == iXDiff && abs(Height - cy) == iYDiff) + if (((cx < MaxWidth) && (cy < MaxHeight) && (Bits == 1)) || + (BestEntry == -1)) { - iTempColorDiff = abs(ColorBits - Bits); - if(iColorDiff > iTempColorDiff) - { - BestEntry = i; - BestBits = Bits; - iColorDiff = iTempColorDiff; - } + BestEntry = i; + MaxWidth = cx; + MaxHeight = cy; } } - - DPRINT("Best Cursor: ResId: %d, bits : %d\n", BestEntry, BestBits);
return BestEntry; } @@ -672,7 +669,7 @@ if(bIcon) entry = CURSORICON_FindBestIconRes(dir, width, height, ColorBits); else - entry = CURSORICON_FindBestCursorRes(dir, width, height, ColorBits); + entry = CURSORICON_FindBestCursorRes(dir, width, height, 1);
if (entry) retVal = entry->nID;