Author: fireball Date: Mon Feb 5 23:59:18 2007 New Revision: 25732
URL: http://svn.reactos.org/svn/reactos?rev=25732&view=rev Log: Merge 25725, 25726, 25728.
Modified: branches/ros-branch-0_3_1/reactos/dll/win32/user32/windows/bitmap.c branches/ros-branch-0_3_1/reactos/dll/win32/user32/windows/icon.c
Modified: branches/ros-branch-0_3_1/reactos/dll/win32/user32/windows/bitmap.c URL: http://svn.reactos.org/svn/reactos/branches/ros-branch-0_3_1/reactos/dll/win... ============================================================================== --- branches/ros-branch-0_3_1/reactos/dll/win32/user32/windows/bitmap.c (original) +++ branches/ros-branch-0_3_1/reactos/dll/win32/user32/windows/bitmap.c Mon Feb 5 23:59:18 2007 @@ -186,9 +186,8 @@ UINT fuLoad, ULONG uType) { + HRSRC hResInfo; HANDLE hResource; - HANDLE h2Resource; - HANDLE hfRes; HANDLE hFile; HANDLE hSection; CURSORICONFILEDIR *IconDIR; @@ -211,25 +210,20 @@ if (hinst == NULL) hinst = User32Instance;
- hResource = hfRes = FindResourceW(hinst, lpszName, + hResInfo = FindResourceW(hinst, lpszName, Icon ? RT_GROUP_ICON : RT_GROUP_CURSOR); - if (hResource == NULL) - return NULL; - - if (fuLoad & LR_SHARED) - { - hIcon = NtUserFindExistingCursorIcon(hinst, (HRSRC)hfRes, width, height); - if (hIcon) - return hIcon; - } - - hResource = LoadResource(hinst, hResource); + if (hResInfo == NULL) + return NULL; + + hResource = LoadResource(hinst, hResInfo); if (hResource == NULL) return NULL;
IconResDir = LockResource(hResource); if (IconResDir == NULL) - return NULL; + { + return NULL; + }
/* * Find the best fitting in the IconResDir for this resolution @@ -238,27 +232,45 @@ id = LookupIconIdFromDirectoryEx((PBYTE)IconResDir, Icon, width, height, fuLoad & (LR_DEFAULTCOLOR | LR_MONOCHROME));
- h2Resource = FindResourceW(hinst, MAKEINTRESOURCEW(id), + hResInfo = FindResourceW(hinst, MAKEINTRESOURCEW(id), Icon ? MAKEINTRESOURCEW(RT_ICON) : MAKEINTRESOURCEW(RT_CURSOR)); - if (h2Resource == NULL) - return NULL; - - hResource = LoadResource(hinst, h2Resource); + if (hResInfo == NULL) + { + return NULL; + } + + /* Now we have found the icon we want to load. + * Let's see if we already loaded it */ + if (fuLoad & LR_SHARED) + { + hIcon = NtUserFindExistingCursorIcon(hinst, hResInfo, 0, 0); + if (hIcon) + { + return hIcon; + } + } + + hResource = LoadResource(hinst, hResInfo); if (hResource == NULL) - return NULL; + { + return NULL; + }
ResIcon = LockResource(hResource); if (ResIcon == NULL) - return NULL; + { + return NULL; + }
hIcon = CreateIconFromResourceEx((PBYTE)ResIcon, - SizeofResource(hinst, h2Resource), + SizeofResource(hinst, hResInfo), Icon, 0x00030000, width, height, fuLoad & (LR_DEFAULTCOLOR | LR_MONOCHROME)); + if (hIcon && 0 != (fuLoad & LR_SHARED)) { - NtUserSetCursorIconData((HICON)hIcon, NULL, NULL, hinst, (HRSRC)hfRes, + NtUserSetCursorIconData((HICON)hIcon, NULL, NULL, hinst, hResInfo, (HRSRC)NULL); }
Modified: branches/ros-branch-0_3_1/reactos/dll/win32/user32/windows/icon.c URL: http://svn.reactos.org/svn/reactos/branches/ros-branch-0_3_1/reactos/dll/win... ============================================================================== --- branches/ros-branch-0_3_1/reactos/dll/win32/user32/windows/icon.c (original) +++ branches/ros-branch-0_3_1/reactos/dll/win32/user32/windows/icon.c Mon Feb 5 23:59:18 2007 @@ -206,7 +206,7 @@ BOOL fIcon, DWORD dwVer) { - return CreateIconFromResourceEx(presbits, dwResSize, fIcon, dwVer, 0, 0, 0); + return CreateIconFromResourceEx(presbits, dwResSize, fIcon, dwVer, 0, 0, LR_DEFAULTSIZE|LR_SHARED ); }