Commit 8970e29f authored by Alexandre Julliard's avatar Alexandre Julliard

user32: Support creating animated icons, not only cursors.

parent 99f6894c
...@@ -1078,8 +1078,8 @@ static void riff_find_chunk( DWORD chunk_id, DWORD chunk_type, const riff_chunk_ ...@@ -1078,8 +1078,8 @@ static void riff_find_chunk( DWORD chunk_id, DWORD chunk_type, const riff_chunk_
* |- ... * |- ...
* \- CHUNK:icon * \- CHUNK:icon
*/ */
static HCURSOR CURSORICON_CreateIconFromANI( const LPBYTE bits, DWORD bits_size, static HCURSOR CURSORICON_CreateIconFromANI( const LPBYTE bits, DWORD bits_size, INT width, INT height,
INT width, INT height, INT depth, UINT loadflags ) INT depth, BOOL is_icon, UINT loadflags )
{ {
struct animated_cursoricon_object *ani_icon_data; struct animated_cursoricon_object *ani_icon_data;
struct cursoricon_object *info; struct cursoricon_object *info;
...@@ -1161,7 +1161,7 @@ static HCURSOR CURSORICON_CreateIconFromANI( const LPBYTE bits, DWORD bits_size, ...@@ -1161,7 +1161,7 @@ static HCURSOR CURSORICON_CreateIconFromANI( const LPBYTE bits, DWORD bits_size,
info = get_icon_ptr( cursor ); info = get_icon_ptr( cursor );
ani_icon_data = (struct animated_cursoricon_object *) info; ani_icon_data = (struct animated_cursoricon_object *) info;
info->is_icon = FALSE; info->is_icon = is_icon;
ani_icon_data->num_frames = header.num_frames; ani_icon_data->num_frames = header.num_frames;
/* The .ANI stores the display rate in jiffies (1/60s) */ /* The .ANI stores the display rate in jiffies (1/60s) */
...@@ -1195,7 +1195,7 @@ static HCURSOR CURSORICON_CreateIconFromANI( const LPBYTE bits, DWORD bits_size, ...@@ -1195,7 +1195,7 @@ static HCURSOR CURSORICON_CreateIconFromANI( const LPBYTE bits, DWORD bits_size,
/* Grab a frame from the animation */ /* Grab a frame from the animation */
frames[i] = create_icon_from_bmi( (BITMAPINFO *)bmi, NULL, NULL, NULL, info->hotspot, frames[i] = create_icon_from_bmi( (BITMAPINFO *)bmi, NULL, NULL, NULL, info->hotspot,
FALSE, frameWidth, frameHeight, loadflags ); is_icon, frameWidth, frameHeight, loadflags );
if (!frames[i]) if (!frames[i])
{ {
FIXME_(cursor)("failed to convert animated cursor frame.\n"); FIXME_(cursor)("failed to convert animated cursor frame.\n");
...@@ -1284,7 +1284,8 @@ HICON WINAPI CreateIconFromResourceEx( LPBYTE bits, UINT cbSize, ...@@ -1284,7 +1284,8 @@ HICON WINAPI CreateIconFromResourceEx( LPBYTE bits, UINT cbSize,
/* Check if the resource is an animated icon/cursor */ /* Check if the resource is an animated icon/cursor */
if (!memcmp(bits, "RIFF", 4)) if (!memcmp(bits, "RIFF", 4))
return CURSORICON_CreateIconFromANI( bits, cbSize, width, height, 0 /* default depth */, cFlag ); return CURSORICON_CreateIconFromANI( bits, cbSize, width, height,
0 /* default depth */, bIcon, cFlag );
if (bIcon) if (bIcon)
{ {
...@@ -1334,7 +1335,7 @@ static HICON CURSORICON_LoadFromFile( LPCWSTR filename, ...@@ -1334,7 +1335,7 @@ static HICON CURSORICON_LoadFromFile( LPCWSTR filename,
/* Check for .ani. */ /* Check for .ani. */
if (memcmp( bits, "RIFF", 4 ) == 0) if (memcmp( bits, "RIFF", 4 ) == 0)
{ {
hIcon = CURSORICON_CreateIconFromANI( bits, filesize, width, height, depth, loadflags ); hIcon = CURSORICON_CreateIconFromANI( bits, filesize, width, height, depth, !fCursor, loadflags );
goto end; goto end;
} }
......
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