2 个版本
使用旧的 Rust 2015
0.0.8 | 2017 年 2 月 21 日 |
---|---|
0.0.7 | 2017 年 2 月 1 日 |
#21 在 #compositor
27 每月下载次数
在 2 个 crate 中使用 (通过 wlc)
590KB
16K SLoC
包含 (神秘的 autoconf 代码, 2KB) configure.ac
wlc Rust 绑定
对 wayland 组件库的完全安全和惯用绑定。
文档
示例
// for a more functional example see /examples/example.rs
use wlc::*;
struct Compositor;
impl Callback for Compositor
{
fn view_created(&mut self, view: &View) -> bool
{
view.set_visibility(view.output().visibility());
view.bring_to_front();
view.focus();
true
}
fn view_focus(&mut self, view: &View, focus: bool)
{
view.set_state(ViewState::Activated, focus);
}
}
fn main()
{
wlc::init(Compositor).unwrap()
}
使用方法
此 crate 当前需要 nightly
Rust 来明确标记某些 ffi 相关的 struct
为非 Send
。
您可以通过功能标志(unsafe-stable)选择退出此行为。请确保永远不要将 View
、Output
及其 Weak-Variants、Positioner
或 Wlc
传递给另一个线程。
添加到您的 Cargo.toml
wlc = "0.1"
对于稳定版
wlc = { version = "1.0", features = "unsafe-stable" }
对于静态编译(组合是可能的)
wlc = { version = "1.0", features = "static" }
在静态构建时,请参阅 wlc 以获取构建依赖项。
此外,在构建过程中需要 libclang>=3.8
以进行代码生成。
如果您的 libclang
在另一个路径,则必须在构建二进制文件时提供它。
LIBCLANG_PATH=/usr/lib64 cargo build --release
有关更多选项,请参阅 https://github.com/KyleMayes/clang-sys#environment-variables。
功能 render
和 wayland
启用 wlc 提供的可选扩展。
在这种情况下,当使用 unsafe-stable
时,不应将 WlcSurface
、WlcSubSurface
和 GLES2Renderer
传递到线程中。
关于 rust-wlc 的说明
rust-wlc 有一些缺点,此 crate 试图避免。它没有使用原始 rust-wlc 源代码的任何部分,并且可能有自己的问题,但它试图以不同的方式处理以下问题
(在下述语句中,wlc
指的是原始的 C 库,而 rust-wlc
指的是替代的 wlc 绑定)
- wlc 不会将视图和输出结构体的所有权转移给实现者。相反,在
view_destroyed
/output_destroyed
回调之后,库可能会释放任何视图或输出的资源。在我看来,rust-wlc 没有正确地建模这种关系。请参见 DESIGN.md 了解库如何建模View
和Output
。 - rust-wlc 允许您使用
extern
函数并直接与 C 代码交互。这种实现几乎需要全局单例和lazy_static
的使用。这个包为您提供了一个用于您自定义合成器的 trait,并隐藏了这些实现细节。 - 这个包提供了对 wlc 的 userdata API 的更安全替代方案。在某些方面它仍然是不可安全的,并且应该由任何合成器实现进行抽象,但它更容易处理。
- 公开运行循环函数。
- 这个包实现了 wlc 的大部分渲染和 wayland API。
- rust-wlc 很可能经过了更好的测试,因为它可能拥有更多的用户,并且有一个简单的模拟库(如果我是正确的)。所以请报告您可能遇到的任何问题。
请注意,我并不试图以任何方式与 rust-wlc
竞争。我也尊重他们所做的工作,他们的窗口管理器 way-cooler
确实是一个有趣的项目。我只是不喜欢他们的设计决策,决定构建自己的 wlc 绑定和自己的 窗口管理器。
依赖关系
~0–2.2MB
~45K SLoC