Commit 348c655b authored by Henri Verbeet's avatar Henri Verbeet Committed by Alexandre Julliard

wined3d: Make sure transparent hardware cursors are really transparent.

Loosely based on a patch by Stefan Dösinger.
parent 3a18f54f
...@@ -5004,14 +5004,16 @@ HRESULT CDECL wined3d_device_set_cursor_properties(struct wined3d_device *device ...@@ -5004,14 +5004,16 @@ HRESULT CDECL wined3d_device_set_cursor_properties(struct wined3d_device *device
if (cursor_image->resource.width == 32 && cursor_image->resource.height == 32) if (cursor_image->resource.width == 32 && cursor_image->resource.height == 32)
{ {
/* Draw a hardware cursor */ UINT mask_size = cursor_image->resource.width * cursor_image->resource.height / 8;
ICONINFO cursorInfo; ICONINFO cursorInfo;
DWORD *maskBits;
HCURSOR cursor; HCURSOR cursor;
/* Create and clear maskBits because it is not needed for
* 32-bit cursors. 32x32 bits split into 32-bit chunks == 32 /* 32-bit user32 cursors ignore the alpha channel if it's all
* chunks. */ * zeroes, and use the mask instead. Fill the mask with all ones
DWORD *maskBits = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, * to ensure we still get a fully transparent cursor. */
(cursor_image->resource.width * cursor_image->resource.height / 8)); maskBits = HeapAlloc(GetProcessHeap(), 0, mask_size);
memset(maskBits, 0xff, mask_size);
wined3d_surface_map(cursor_image, &mapped_rect, NULL, wined3d_surface_map(cursor_image, &mapped_rect, NULL,
WINED3DLOCK_NO_DIRTY_UPDATE | WINED3DLOCK_READONLY); WINED3DLOCK_NO_DIRTY_UPDATE | WINED3DLOCK_READONLY);
TRACE("width: %u height: %u.\n", cursor_image->resource.width, cursor_image->resource.height); TRACE("width: %u height: %u.\n", cursor_image->resource.width, cursor_image->resource.height);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment