mirror of
https://github.com/reactos/reactos.git
synced 2025-08-04 04:45:45 +00:00
- ICON_CreateCursorFromData should pass a header that fits to the bitmap data to SetDIBits to allow color conversion if necessary; create the color cursor if requested in the same function
- Winamp 2.95 now shows a custom cursor, but it's still surrounded by blackness, bug #4370 - Misc typo fixes, cleanup svn path=/trunk/; revision=40510
This commit is contained in:
parent
fc069970e4
commit
a49c40392b
2 changed files with 19 additions and 6 deletions
|
@ -56,8 +56,7 @@ typedef struct
|
||||||
|
|
||||||
#include "poppack.h"
|
#include "poppack.h"
|
||||||
|
|
||||||
/*forward declerations... actualy in user32\windows\icon.c but usful here****/
|
/* forward declerations... actually in user32\windows\icon.c but usful here */
|
||||||
HICON ICON_CreateCursorFromData(HDC hDC, PVOID ImageData, ICONIMAGE* IconImage, int cxDesired, int cyDesired, int xHotspot, int yHotspot);
|
|
||||||
HICON ICON_CreateIconFromData(HDC hDC, PVOID ImageData, ICONIMAGE* IconImage, int cxDesired, int cyDesired, int xHotspot, int yHotspot);
|
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_FindBestIcon( CURSORICONDIR *dir, int width, int height, int colors);
|
||||||
CURSORICONDIRENTRY *CURSORICON_FindBestCursor( CURSORICONDIR *dir, int width, int height, int colors);
|
CURSORICONDIRENTRY *CURSORICON_FindBestCursor( CURSORICONDIR *dir, int width, int height, int colors);
|
||||||
|
|
|
@ -94,9 +94,9 @@ ICON_CreateIconFromData(HDC hDC, PVOID ImageData, ICONIMAGE* IconImage, int cxDe
|
||||||
HICON
|
HICON
|
||||||
ICON_CreateCursorFromData(HDC hDC, PVOID ImageData, ICONIMAGE* IconImage, int cxDesired, int cyDesired, int xHotspot, int yHotspot)
|
ICON_CreateCursorFromData(HDC hDC, PVOID ImageData, ICONIMAGE* IconImage, int cxDesired, int cyDesired, int xHotspot, int yHotspot)
|
||||||
{
|
{
|
||||||
/* FIXME - color cursors */
|
|
||||||
BYTE BitmapInfoBuffer[sizeof(BITMAPINFOHEADER) + 2 * sizeof(RGBQUAD)];
|
BYTE BitmapInfoBuffer[sizeof(BITMAPINFOHEADER) + 2 * sizeof(RGBQUAD)];
|
||||||
BITMAPINFO *bwBIH = (BITMAPINFO *)BitmapInfoBuffer;
|
BITMAPINFO *bwBIH = (BITMAPINFO *)BitmapInfoBuffer;
|
||||||
|
BITMAPINFO *orgBIH = (BITMAPINFO *)IconImage;
|
||||||
ICONINFO IconInfo;
|
ICONINFO IconInfo;
|
||||||
PVOID XORImageData = ImageData;
|
PVOID XORImageData = ImageData;
|
||||||
|
|
||||||
|
@ -104,7 +104,7 @@ ICON_CreateCursorFromData(HDC hDC, PVOID ImageData, ICONIMAGE* IconImage, int cx
|
||||||
IconInfo.xHotspot = xHotspot;
|
IconInfo.xHotspot = xHotspot;
|
||||||
IconInfo.yHotspot = yHotspot;
|
IconInfo.yHotspot = yHotspot;
|
||||||
|
|
||||||
/* Create a BITMAPINFO header for the monocrome part of the icon */
|
/* Create a BITMAPINFO header for the monochrome part of the icon */
|
||||||
bwBIH->bmiHeader.biBitCount = 1;
|
bwBIH->bmiHeader.biBitCount = 1;
|
||||||
bwBIH->bmiHeader.biWidth = IconImage->icHeader.biWidth;
|
bwBIH->bmiHeader.biWidth = IconImage->icHeader.biWidth;
|
||||||
bwBIH->bmiHeader.biHeight = IconImage->icHeader.biHeight;
|
bwBIH->bmiHeader.biHeight = IconImage->icHeader.biHeight;
|
||||||
|
@ -133,10 +133,24 @@ ICON_CreateCursorFromData(HDC hDC, PVOID ImageData, ICONIMAGE* IconImage, int cx
|
||||||
if (IconInfo.hbmMask)
|
if (IconInfo.hbmMask)
|
||||||
{
|
{
|
||||||
SetDIBits(hDC, IconInfo.hbmMask, 0, IconImage->icHeader.biHeight,
|
SetDIBits(hDC, IconInfo.hbmMask, 0, IconImage->icHeader.biHeight,
|
||||||
XORImageData, bwBIH, DIB_RGB_COLORS);
|
XORImageData, orgBIH, DIB_RGB_COLORS);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (IconImage->icHeader.biBitCount == 1)
|
||||||
|
{
|
||||||
IconInfo.hbmColor = (HBITMAP)0;
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* Create the icon based on everything we have so far */
|
/* Create the icon based on everything we have so far */
|
||||||
return NtUserCreateCursorIconHandle(&IconInfo, FALSE);
|
return NtUserCreateCursorIconHandle(&IconInfo, FALSE);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue