Andrew Riedi : user32: Cursors can have more than one color.

Alexandre Julliard julliard at winehq.org
Mon Dec 1 07:34:23 CST 2008


Module: wine
Branch: master
Commit: 506f77b8d6835e2f69db32a0d434d914e63bdd2f
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=506f77b8d6835e2f69db32a0d434d914e63bdd2f

Author: Andrew Riedi <andrewriedi at gmail.com>
Date:   Tue Nov 25 23:07:15 2008 -0800

user32: Cursors can have more than one color.

---

 dlls/user32/cursoricon.c |   21 ++++++++++-----------
 1 files changed, 10 insertions(+), 11 deletions(-)

diff --git a/dlls/user32/cursoricon.c b/dlls/user32/cursoricon.c
index 655a74a..9729269 100644
--- a/dlls/user32/cursoricon.c
+++ b/dlls/user32/cursoricon.c
@@ -544,8 +544,8 @@ static BOOL CURSORICON_GetResIconEntry( LPVOID dir, int n,
  *	    CURSORICON_FindBestCursor
  *
  * Find the cursor closest to the requested size.
- * FIXME: parameter 'color' ignored and entries with more than 1 bpp
- *        ignored too
+ *
+ * FIXME: parameter 'color' ignored.
  */
 static int CURSORICON_FindBestCursor( LPVOID dir, fnGetCIEntry get_entry,
                                       int width, int height, int color )
@@ -562,8 +562,7 @@ static int CURSORICON_FindBestCursor( LPVOID dir, fnGetCIEntry get_entry,
     for ( i = 0; get_entry( dir, i, &cx, &cy, &bits ); i++ )
     {
         if ((cx <= width) && (cy <= height) &&
-            (cx > maxwidth) && (cy > maxheight) &&
-            (bits == 1))
+            (cx > maxwidth) && (cy > maxheight))
         {
             bestEntry = i;
             maxwidth  = cx;
@@ -577,8 +576,7 @@ static int CURSORICON_FindBestCursor( LPVOID dir, fnGetCIEntry get_entry,
     maxwidth = maxheight = 255;
     for ( i = 0; get_entry( dir, i, &cx, &cy, &bits ); i++ )
     {
-        if (((cx < maxwidth) && (cy < maxheight) && (bits == 1)) ||
-            (bestEntry==-1))
+        if (((cx < maxwidth) && (cy < maxheight)) || (bestEntry == -1))
         {
             bestEntry = i;
             maxwidth  = cx;
@@ -958,7 +956,7 @@ static void riff_find_chunk( DWORD chunk_id, DWORD chunk_type, const riff_chunk_
  *            \- CHUNK:icon
  */
 static HCURSOR CURSORICON_CreateIconFromANI( const LPBYTE bits, DWORD bits_size,
-    INT width, INT height )
+    INT width, INT height, INT colors )
 {
     HCURSOR cursor;
     ani_header header = {0};
@@ -1011,7 +1009,7 @@ static HCURSOR CURSORICON_CreateIconFromANI( const LPBYTE bits, DWORD bits_size,
     icon_data = fram_chunk.data + (2 * sizeof(DWORD));
 
     entry = CURSORICON_FindBestCursorFile( (CURSORICONFILEDIR *) icon_data,
-        width, height, 1 );
+        width, height, colors );
 
     frame_bits = HeapAlloc( GetProcessHeap(), 0, entry->dwDIBSize );
     memcpy( frame_bits, icon_data + entry->dwDIBOffset, entry->dwDIBSize );
@@ -1099,7 +1097,8 @@ static HICON CURSORICON_LoadFromFile( LPCWSTR filename,
     /* Check for .ani. */
     if (memcmp( bits, "RIFF", 4 ) == 0)
     {
-        hIcon = CURSORICON_CreateIconFromANI( bits, filesize, width, height );
+        hIcon = CURSORICON_CreateIconFromANI( bits, filesize, width, height,
+            colors );
         goto end;
     }
 
@@ -1187,7 +1186,7 @@ static HICON CURSORICON_Load(HINSTANCE hInstance, LPCWSTR name,
     if (!(handle = LoadResource( hInstance, hRsrc ))) return 0;
     if (!(dir = LockResource( handle ))) return 0;
     if (fCursor)
-        dirEntry = CURSORICON_FindBestCursorRes( dir, width, height, 1);
+        dirEntry = CURSORICON_FindBestCursorRes( dir, width, height, colors );
     else
         dirEntry = CURSORICON_FindBestIconRes( dir, width, height, colors );
     if (!dirEntry) return 0;
@@ -1799,7 +1798,7 @@ INT WINAPI LookupIconIdFromDirectoryEx( LPBYTE xdir, BOOL bIcon,
         if( bIcon )
             entry = CURSORICON_FindBestIconRes( dir, width, height, colors );
         else
-            entry = CURSORICON_FindBestCursorRes( dir, width, height, 1);
+            entry = CURSORICON_FindBestCursorRes( dir, width, height, colors );
 
         if( entry ) retVal = entry->wResId;
     }




More information about the wine-cvs mailing list