#lv2 #api-bindings

sys pugl-sys

Rust 对 pugl 的包装

9 个不稳定版本 (3 个破坏性更新)

0.4.2 2020年12月23日
0.4.1 2020年11月24日
0.3.3 2020年7月4日
0.3.1 2020年6月28日
0.1.0 2020年6月25日

#568 in GUI

每月41次下载
pugl-ui 中使用

ISC 许可证

2MB
39K SLoC

Python 27K SLoC // 0.3% comments C 7K SLoC // 0.1% comments Rust 1.5K SLoC // 0.0% comments Objective-C 1.5K SLoC // 0.1% comments C++ 1.5K SLoC // 0.1% comments GLSL 49 SLoC // 0.2% comments

pugl-sys – pugl 的 Rust 包装

Build Status Current Crates.io Version Documentation Version

pugl 是一个最小化、可嵌入的 GUI API https://gitlab.com/lv2/pugl/

本库旨在为 Rust 提供库绑定。

目标

小型轻量级自包含 GUI 工具包的基础,特别是实现 LV2 插件的 UI。LV2 插件的 GUI 需要自包含,即它们应该静态链接,并且不能动态链接任何其他 GUI 工具包。否则,不同插件在不同宿主中运行时,会冲突使用不同版本的同一样本。

状态

测试阶段。pugl 的所有功能尚未全部可用(见下文)。目前仅在 Linux/X11 上进行了测试。鼓励对编程小型可嵌入 GUI 感兴趣的 Rust 开发者尝试。

API 稳定性

在达到 1.0.0 版本之前,可能会发生不兼容的 API 变更。目前还没有大量应用程序使用 pugl-sys,因此 API 的使用经验有限。1.0.0 版本的发布将不会在多个开发者使用 pugl-sys 并提供反馈之前进行。

如果发现更好的 API 设计方式,将会进行修改。

在 1.0.0 版本发布后,不兼容的 API 变更将很少发生。只有在 pugl 以不兼容的方式更改 API,且这不会在抽象层中隐藏的情况下,才会发生变更。

如何使用

它可在 crates.io 上找到,因此只需将其添加到您的 Cargo.toml 中的依赖项即可。

用法

本库的文档中只有一个最小示例。还有一个 pugl-ui 库,它是一个实现小部件布局和事件传播的 GUI 工具包的占位符。也许您想检查一下。

待办事项

并非 pugl 的所有功能都得到实现。

  • 作为可单独访问的实体

    到目前为止,World 只能通过 View 和不安全的 FFI 函数访问。目前仅封装了 puglUpdate() 这个 World 函数。

    要实现这一点,需要一个机制来在多个 View 之间共享对同一 World 的引用,确保在至少一个 View 仍然存在时不会销毁 World。

  • 手动发送事件的支持

    这基本上是对函数 puglSendEvent() 的封装。为了实现它,需要将 pugl::Event 转换为 PuglEvent FFI 类型。

  • 剪贴板支持

    对于纯文本来说可能很简单。对于其他 MIME 数据,可能需要其他依赖项。

  • 支持除 Cairo 之外的后端

    目前,当发生曝光事件时,视图只需设置 Cairo 后端并将句柄转换为 cairo::Context

  • 一些小函数尚未封装

  • 正确实现 PuglViewHint

  • 在其他平台(如 Linux)上测试(并使其工作)

依赖项

~2.1–4.5MB
~96K SLoC