Author: gschneider
Date: Wed Jul 29 20:28:11 2009
New Revision: 42291
URL:
http://svn.reactos.org/svn/reactos?rev=42291&view=rev
Log:
user32:
- Restructure and simplify CreateCursorFromData
- Call CreateIconFromResourceEx properly allowing it to create colored icons (although it
doesn't care about that yet)
- Fix some comment typos
win32k:
- Don't just copy the pointer to an XLATEOBJ, copy instead. The caller will free it,
EngSetPointerShape will do so too (causing either double-frees or memory write errors)
Modified:
trunk/reactos/dll/win32/user32/windows/bitmap.c
trunk/reactos/dll/win32/user32/windows/icon.c
trunk/reactos/subsystems/win32/win32k/eng/mouse.c
Modified: trunk/reactos/dll/win32/user32/windows/bitmap.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/user32/windows/b…
==============================================================================
--- trunk/reactos/dll/win32/user32/windows/bitmap.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/user32/windows/bitmap.c [iso-8859-1] Wed Jul 29 20:28:11 2009
@@ -56,7 +56,7 @@
#include "poppack.h"
-/* forward declerations... actually in user32\windows\icon.c but usful here */
+/* forward declarations... actually in user32\windows\icon.c but useful here */
HICON ICON_CreateIconFromData(HDC hDC, PVOID ImageData, ICONIMAGE* IconImage, int
cxDesired, int cyDesired, int xHotspot, int yHotspot);
CURSORICONDIRENTRY *CURSORICON_FindBestIcon( CURSORICONDIR *dir, int width, int height,
int colors);
CURSORICONDIRENTRY *CURSORICON_FindBestCursor( CURSORICONDIR *dir, int width, int height,
int colors);
@@ -265,7 +265,7 @@
hIcon = CreateIconFromResourceEx((PBYTE)ResIcon,
SizeofResource(hinst, hResInfo),
Icon, 0x00030000, width, height,
- fuLoad & (LR_DEFAULTCOLOR | LR_MONOCHROME));
+ (fuLoad & (LR_DEFAULTSIZE | LR_SHARED)) |
LR_DEFAULTCOLOR);
if (hIcon && 0 != (fuLoad & LR_SHARED))
{
Modified: trunk/reactos/dll/win32/user32/windows/icon.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/user32/windows/i…
==============================================================================
--- trunk/reactos/dll/win32/user32/windows/icon.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/user32/windows/icon.c [iso-8859-1] Wed Jul 29 20:28:11 2009
@@ -98,13 +98,25 @@
BITMAPINFO *bwBIH = (BITMAPINFO *)BitmapInfoBuffer;
BITMAPINFO *orgBIH = (BITMAPINFO *)IconImage;
ICONINFO IconInfo;
- PVOID XORImageData = ImageData;
IconInfo.fIcon = FALSE;
IconInfo.xHotspot = xHotspot;
IconInfo.yHotspot = yHotspot;
- /* Create a BITMAPINFO header for the monochrome part of the icon */
+ /* Handle the color part of the cursor */
+ if (IconImage->icHeader.biBitCount == 1)
+ {
+ IconInfo.hbmColor = (HBITMAP)0;
+ }
+ else
+ {
+ FIXME("loading %d bpp color cursor\n",
IconImage->icHeader.biBitCount);
+ IconInfo.hbmColor = CreateDIBitmap(hDC, &IconImage->icHeader, CBM_INIT,
+ ImageData, (BITMAPINFO*)IconImage,
+ DIB_RGB_COLORS);
+ }
+
+ /* Create a BITMAPINFO header for the monochrome part of the cursor */
bwBIH->bmiHeader.biBitCount = 1;
bwBIH->bmiHeader.biWidth = IconImage->icHeader.biWidth;
bwBIH->bmiHeader.biHeight = IconImage->icHeader.biHeight;
@@ -127,29 +139,13 @@
bwBIH->bmiColors[1].rgbRed = 0xff;
bwBIH->bmiColors[1].rgbReserved = 0;
- /* Load the AND bitmap */
+ /* Load the monochrome bitmap */
IconInfo.hbmMask = CreateDIBitmap(hDC, &bwBIH->bmiHeader, 0,
- XORImageData, bwBIH, DIB_RGB_COLORS);
+ ImageData, bwBIH, DIB_RGB_COLORS);
if (IconInfo.hbmMask)
{
SetDIBits(hDC, IconInfo.hbmMask, 0, IconImage->icHeader.biHeight,
- XORImageData, orgBIH, DIB_RGB_COLORS);
- }
-
- if (IconImage->icHeader.biBitCount == 1)
- {
- IconInfo.hbmColor = (HBITMAP)0;
- }
- else
- {
- /* Create the color part of the icon */
- IconInfo.hbmColor = CreateDIBitmap(hDC, &IconImage->icHeader, 0,
- XORImageData, orgBIH, DIB_RGB_COLORS);
- if (IconInfo.hbmColor)
- {
- SetDIBits(hDC, IconInfo.hbmColor, 0, IconImage->icHeader.biHeight,
- XORImageData, orgBIH, DIB_RGB_COLORS);
- }
+ ImageData, orgBIH, DIB_RGB_COLORS);
}
/* Create the icon based on everything we have so far */
Modified: trunk/reactos/subsystems/win32/win32k/eng/mouse.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/en…
==============================================================================
--- trunk/reactos/subsystems/win32/win32k/eng/mouse.c [iso-8859-1] (original)
+++ trunk/reactos/subsystems/win32/win32k/eng/mouse.c [iso-8859-1] Wed Jul 29 20:28:11
2009
@@ -426,7 +426,8 @@
}
else
{
- pgp->XlateObject = pxlo;
+ pgp->XlateObject = EngAllocMem(0, sizeof(XLATEOBJ), TAG_XLATEOBJ);
+ memcpy(pgp->XlateObject, pxlo, sizeof(XLATEOBJ));
}
/* Create surface for saving the pixels under the cursor. */