20 个版本

使用旧的 Rust 2015

0.7.0 2017年12月9日
0.6.4 2017年11月11日
0.6.2 2017年4月1日
0.6.1 2017年3月17日
0.2.1 2016年3月13日

国际化(i18n) 中排名 259

Download history 1/week @ 2024-03-10 14/week @ 2024-03-31 1/week @ 2024-04-07

每月下载量 65
way-cooler 中使用

MIT 许可证

380KB
4.5K SLoC

rust-wlc

Join the chat at https://gitter.im/Immington-Industries/rust-wlc Crates.io License

Rust 对 wlc(Wayland 组合器库)的绑定

建议您使用设计更好的 wlc.rs,主要用于 Way Cooler 开发

绑定与 wlc v0.0.9 兼容

Rust 示例

// For more functional example see example/src/main.rs

extern crate rustwlc;
use rustwlc::types::*;
use rustwlc::callback;
use rustwlc::WlcView;

// Callbacks must be labeled extern as they will be called from C
extern "C" fn view_created(view: WlcView) -> bool {
    view.bring_to_front();
    view.focus();
    return true;
}

extern "C" fn view_focus(view: WlcView, focused: bool) {
    view.set_state(VIEW_ACTIVATED, focused);
}

fn main() {
    callback::view_created(view_created);
    callback::view_focus(view_focus);

    // The default log handler will print wlc logs to stdout
    rustwlc::log_set_default_handler();
    let run_fn = rustwlc::init().expect("Unable to initialize!");
    run_fn();
}

用法

我们在 crates.io,因此要使用此库,只需将其添加到您的 Cargo.toml 中。

[dependencies]
rustwlc = "0.5"

您还需要设置 wlc 库,以便 rust-wlc 可以看到它。如果您只是安装库,那就足够了。

请注意,wlc 容易出现向后不兼容的更改。每次这种情况发生时,我们都会增加一个小版本,因此请确保在您的 Cargo.toml 中指定确切的次要版本。我们预计我们的版本号将不断相互远离,直到 wlc 稳定下来。请小心,因为更新 wlc 可能会破坏 rustwlc。我们将尽量保持与上游的紧密一致。

如果您想使用 wlc 的自定义版本(例如,通过针对特定版本构建以确保兼容性或构建带有调试符号的库),则需要将 LD_LIBRARY_PATH 环境变量设置为共享库对象文件(.so)的完整路径。要验证 rust-wlc 是否可以看到正确的共享库,请使用 ldd 工具查看共享库的完整路径,以 "libwlc.so" 开头的条目应指向您的自定义路径。

因此,如果您的 wlc 安装在 /opt/wlc,则完整路径可能是 /opt/wlc/target/src。请注意,我们只包含包含 .so 的目录,而不是 .so 本身。有关 Linux 中使用 DLL 的更多信息,请参阅 此链接

文档

目前,我们在 doc.rs 上托管 Cargo 文档。您也可以使用 cargo doc 生成它

$ git clone "https://github.com/ImmingtonIndustries/rust-wlc.git"
$ cd rust-wlc
$ cargo doc

如果文档不够清晰或位置不正确,请告诉我们。

安全性

rust-wlc 是为了成为一个围绕 wlc 的简洁 Rust 封装而编写的。虽然我们已经尽力使代码更符合 Rust 风格(例如为 WlcViewWlcOutput 创建实例方法),但我们并不尝试扩展 wlc 本身。

callbacks 中注册的回调必须标记为 extern(或 extern "C"),因为它们是从 C 代码中调用的。此外,根据 Rust 规范,从 C 中抛出恐慌是未定义的行为(尽管它对我们有效)。

使用 rustwlc 的合成器可以在没有任何 unsafe 代码的情况下这样做。我们提供了使用 Rust 回调来处理日志的选项(而不是接受 *const c_char 的方法)。还有默认启用的 println!,它通过 rustwlc::log_set_default_handler() 来启用。此外,WlcViewWlcOutput 中的 get_user_dataset_user_data 方法是 unsafe,因为它们在底层使用 C 原始类型(void*),并且正确的使用需要深入了解 wlc 本身。

我们有一些(WIP)使用 wayland-sys 包的 Wayland 绑定,可以通过 wlc-wayland 功能启用。这允许使用 Rust 包 wayland-sys 从 wlc 访问 Wayland。这对于基本的合成器不是必需的,但对于一些复杂功能(我们使用它直接在 way-cooler 上的视图中绘制背景)可能需要。

贡献

我们接受拉取请求!如果您发现了一个错误或想做出贡献(wlc 没有版本,我们可能落后于他们的 API 几个提交),请提交一个问题/拉取请求。

依赖项

~140–270KB