Generating the animated mouse cursor files (.ani) for Windows.
```rust use riffani::ico::{IconDir, IconDirEntry, IconImage, ResourceType}; use riffani::{Ani, AniHeader};
fn main() { let frames = vec![ "./images/1.png", "./images/2.png", "./images/3.png", "./images/4.png", ];
let out = File::create("./output.ani")
.unwrap_or_else(|_| panic!("cannot create file {}", dest.to_string_lossy()));
let ani = Ani {
header: AniHeader {
num_frames: frames.len() as u32,
num_steps: frames.len() as u32,
width: 48,
height: 48,
frame_rate: 2,
},
frames: frames.iter().map(create_cur).collect(),
};
ani.encode(&out)
.unwrap_or_else(|_| panic!("cannot write file {}", dest.to_string_lossy()));
}
fn createcur(path: &str) -> IconDir { let mut icondir = IconDir::new(ResourceType::Cursor);
let file = std::fs::File::open(path)
.unwrap_or_else(|_| panic!("cannot open png {}", path));
let mut image = IconImage::read_png(file)
.unwrap_or_else(|_| panic!("cannot read png {}", path));
image.set_cursor_hotspot(Some((8, 8)));
let entry = IconDirEntry::encode_as_png(&image)
.unwrap_or_else(|_| panic!("cannot encode png {}", path));
icon_dir.add_entry(entry);
icon_dir
} ```
See also the docs for crate ico.