15 unstable releases (4 breaking)
new 0.28.4 | Feb 22, 2021 |
---|---|
0.28.3 | Dec 30, 2020 |
0.28.2 | Nov 9, 2020 |
0.27.0 | Jul 3, 2020 |
0.24.0 | Sep 14, 2019 |
#133 in GUI
46,140 downloads per month
Used in 29 crates
(2 directly)
145KB
2.5K
SLoC
wayland-cursor
Loading of XCursor images for Wayland client apps. This crate provides helpers to load the system
provided cursor images and load them into WlBuffer
s as well as obtain the necessary metadata to
properly display animated cursors.
lib.rs
:
Wayland cursor utilities
This crate aims to reimplement the functionality of the libwayland-cursor
library in Rust.
It allows you to load cursors from the system and display them correctly.
First of all, you need to create a CursorTheme
,
which represents the full cursor theme.
From this theme, using the get_cursor
method, you can load a specific Cursor
,
which can contain several images if the cursor is animated. It also provides you with the
means of querying which frame of the animation should be displayed at
what time, as well as handles to the buffers containing these frames, to
attach them to a wayland surface.
Example
use wayland_cursor::CursorTheme;
# use std::thread::sleep;
# use std::time::{Instant, Duration};
let cursor_theme = CursorTheme::load(32, wl_shm);
let cursor = cursor_theme.get_cursor("wait").expect("Cursor not provided by theme");
let start_time = Instant::now();
loop {
// Obtain which frame we should show, and for how long.
let millis = start_time.elapsed().as_millis();
let fr_info = cursor.frame_and_duration(millis as u32);
// Here, we obtain the right cursor frame...
let buffer = cursor[fr_info.frame_index];
// and attach it to a wl_surface.
cursor_surface.attach(Some(&buffer), 0, 0);
cursor_surface.commit();
sleep(fr_info.frame_duration);
}
Dependencies
~2MB
~42K SLoC