From e393257fc358481764b4e78a05704473ca0c8a0c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Gardou?= Date: Tue, 13 Jul 2010 21:38:34 +0000 Subject: [PATCH] [USER32] - Partly merge 48026 svn path=/trunk/; revision=48031 --- reactos/dll/win32/user32/windows/cursoricon.c | 23 ++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) 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); } /******************************************************************************