[][src]Crate wayland_cursor

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

This example is not tested
use wayland_cursor::CursorTheme;

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);
}

Structs

Cursor

A cursor from a theme. Can contain several images if animated.

CursorImageBuffer

A buffer containing a cursor image.

CursorTheme

Represents a cursor theme loaded from the system.

FrameAndDuration

Which frame to show, and for how long.