2 个版本

使用旧的 Rust 2015

0.0.8 2017 年 2 月 21 日
0.0.7 2017 年 2 月 1 日

#21#compositor

27 每月下载次数
2 个 crate 中使用 (通过 wlc)

MIT 许可证

590KB
16K SLoC

C 16K SLoC // 0.0% comments Bitbake 143 SLoC // 0.0% comments Rust 96 SLoC // 0.0% comments Automake 33 SLoC Shell 14 SLoC // 0.1% comments M4 4 SLoC // 0.7% comments

包含 (神秘的 autoconf 代码, 2KB) configure.ac

wlc Rust 绑定 构建状态 Crates.io Crates.io

对 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)选择退出此行为。请确保永远不要将 ViewOutput 及其 Weak-Variants、PositionerWlc 传递给另一个线程。

添加到您的 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

功能 renderwayland 启用 wlc 提供的可选扩展。

在这种情况下,当使用 unsafe-stable 时,不应将 WlcSurfaceWlcSubSurfaceGLES2Renderer 传递到线程中。

关于 rust-wlc 的说明

rust-wlc 有一些缺点,此 crate 试图避免。它没有使用原始 rust-wlc 源代码的任何部分,并且可能有自己的问题,但它试图以不同的方式处理以下问题

(在下述语句中,wlc 指的是原始的 C 库,而 rust-wlc 指的是替代的 wlc 绑定)

  • wlc 不会将视图和输出结构体的所有权转移给实现者。相反,在 view_destroyed/output_destroyed 回调之后,库可能会释放任何视图或输出的资源。在我看来,rust-wlc 没有正确地建模这种关系。请参见 DESIGN.md 了解库如何建模 ViewOutput
  • 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