From: Jérôme Gardou Date: Tue, 13 Jul 2010 21:38:34 +0000 (+0000) Subject: [USER32] X-Git-Tag: backups/Ash_Shell@48412~1^2~260 X-Git-Url: https://git.reactos.org/?p=reactos.git;a=commitdiff_plain;h=e393257fc358481764b4e78a05704473ca0c8a0c [USER32] - Partly merge 48026 svn path=/trunk/; revision=48031 --- diff --git a/reactos/dll/win32/user32/windows/cursoricon.c b/reactos/dll/win32/user32/windows/cursoricon.c index 3729adbf852..5e01fe99614 100644 --- a/reactos/dll/win32/user32/windows/cursoricon.c +++ b/reactos/dll/win32/user32/windows/cursoricon.c @@ -1393,6 +1393,7 @@ HICON WINAPI CreateIconIndirect(PICONINFO iconinfo) { BITMAP ColorBitmap; BITMAP MaskBitmap; + ICONINFO safeIconInfo; if(!iconinfo) { @@ -1400,13 +1401,15 @@ HICON WINAPI CreateIconIndirect(PICONINFO iconinfo) return (HICON)0; } - if(!GetObjectW(iconinfo->hbmMask, sizeof(BITMAP), &MaskBitmap)) + safeIconInfo = *iconinfo; + + if(!GetObjectW(safeIconInfo.hbmMask, sizeof(BITMAP), &MaskBitmap)) { return (HICON)0; } /* Try to get color bitmap */ - if (GetObjectW(iconinfo->hbmColor, sizeof(BITMAP), &ColorBitmap)) + if (GetObjectW(safeIconInfo.hbmColor, sizeof(BITMAP), &ColorBitmap)) { /* Compare size of color and mask bitmap*/ if (ColorBitmap.bmWidth != MaskBitmap.bmWidth || @@ -1416,8 +1419,22 @@ HICON WINAPI CreateIconIndirect(PICONINFO iconinfo) SetLastError(ERROR_INVALID_PARAMETER); return (HICON)0; } + /* Test if they are inverted */ + if(ColorBitmap.bmBitsPixel == 1) + { + if(MaskBitmap.bmBitsPixel != 1) + { + safeIconInfo.hbmMask = iconinfo->hbmColor; + safeIconInfo.hbmColor = iconinfo->hbmMask; + } + else + { + /* Wine tests say so */ + safeIconInfo.hbmColor = NULL; + } + } } - return (HICON)NtUserCreateCursorIconHandle(iconinfo, TRUE); + return (HICON)NtUserCreateCursorIconHandle(&safeIconInfo, TRUE); } /******************************************************************************