54 个版本

0.31.5 2024 年 7 月 16 日
0.31.3 2024 年 5 月 31 日
0.31.1 2024 年 1 月 29 日
0.31.0 2023 年 9 月 2 日
0.24.0 2019 年 9 月 14 日

838GUI

Download history 77147/week @ 2024-05-05 77292/week @ 2024-05-12 73403/week @ 2024-05-19 79476/week @ 2024-05-26 88069/week @ 2024-06-02 91978/week @ 2024-06-09 94069/week @ 2024-06-16 88258/week @ 2024-06-23 81246/week @ 2024-06-30 90239/week @ 2024-07-07 94769/week @ 2024-07-14 95948/week @ 2024-07-21 87326/week @ 2024-07-28 87657/week @ 2024-08-04 101419/week @ 2024-08-11 77977/week @ 2024-08-18

361,422 每月下载量
541 个 Crates 中使用 (7 直接)

MIT 许可证

97KB
1K SLoC

crates.io docs.rs Continuous Integration codecov

wayland-cursor

为 Wayland 客户端应用加载 XCursor 图像。此 crate 提供了加载系统提供的光标图像并将它们加载到 WlBuffer 中的辅助工具,以及获取正确显示动画光标的必要元数据。


lib.rs:

Wayland 光标工具

此 crate 旨在在 Rust 中重新实现 libwayland-cursor 库的功能。

它允许您从系统加载光标并正确显示它们。

首先,您需要创建一个 CursorTheme,它表示完整的光标主题。

从该主题中,使用 [get_cursor()][CursorTheme::get_cursor()] 方法,您可以加载一个特定的 Cursor,如果光标是动画的,它可以包含多个图像。它还提供查询动画的哪一帧应该在何时显示的方法,以及包含这些帧的缓冲区的句柄,以便将它们附加到 wayland 表面。

示例

use wayland_cursor::CursorTheme;
// Load the default cursor theme.
let mut cursor_theme = CursorTheme::load(&connection, shm, 32)
    .expect("Could not load cursor theme");
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(Duration::from_millis(fr_info.frame_duration as u64));
}

依赖关系

~3–12MB
~146K SLoC