#widgets #user-interface #reactive #cross-platform-gui #ui #data-model

gooey

一个由 wgpu 驱动的图形用户界面(GUI)库,具有反应式数据模型

6 个版本

0.2.0 2023 年 12 月 28 日
0.1.3 2023 年 12 月 20 日
0.0.0-reserved.02021 年 5 月 12 日

#126GUI

Download history 21/week @ 2024-04-04

每月 72 次下载

MIT/Apache

2.5MB
19K SLoC

Cushy

Cushy is considered alpha and unsupported crate version Documentation for main branch

此 crate 已从 gooey 重命名为 cushy。不再以该名称发布新版本。

Cushy 是 Rust 编程语言的实验性图形用户界面(GUI)crate。它具有反应式数据模型,旨在轻松创建响应式、高效的用户界面。为了实现跨平台开发的便捷性,Cushy 使用其自己的样式一致的 Widget 集合。

Cushy 驱动于

  • Kludgine,一个由 winit 驱动的 2d 图形库
    • 用于窗口/输入
    • wgpu 用于图形
    • cosmic_text 用于文本布局 + 光栅化
  • palette 用于基于 OKLab 的 HSL 颜色计算
  • arboard 用于剪贴板支持
  • figures 用于基于整数的 2d 数学

开始使用 Cushy

Widget trait 是 Cushy 的构建块:每个用户界面元素都实现了 Widget。有关 Cushy 的工作原理,请参阅 Widget trait 的 文档。内置 widget 的列表可以在 cushy::widgets 模块中找到。

Cushy 使用反应式数据模型。要了解反应式数据模型的工作原理,请考虑以下示例,该示例显示一个按钮,该按钮增加其自己的标签

fn main() -> gooey::Result {
    // Create a dynamic usize.
    let count = Dynamic::new(0_isize);
    // Create a dynamic that contains `count.to_string()`
    let count_label = count.map_each(ToString::to_string);

    // Create a new button whose text is our dynamic string.
    count_label
        .into_button()
        // Set the `on_click` callback to a closure that increments the counter.
        .on_click(move |_| count.set(count.get() + 1))
        // Run the application
        .run()
}

探索 示例目录 是了解 Cushy 的好方法。Cushy 中的几乎所有功能最初都是通过创建示例来测试的。

项目状态

此项目处于早期开发阶段,但正在迅速成为一个不错的框架。目前被视为alpha版本且不受支持,@ecton的主要关注点是将其用于自己的项目。功能请求和错误修复将根据@ecton的需求进行优先排序。

如果您想贡献,错误修复总是受欢迎的。在开发新功能之前,请打开一个问题,提出该功能及其旨在解决的问题。这样做将有助于避免合并拉取请求时的摩擦,因为它确保更改符合维护者对Cushy的愿景。

开源许可

此项目,如Khonsu Labs的所有项目一样,是开源的。此存储库可在MIT许可Apache许可证2.0下获得。

有关更多贡献信息,请参阅CONTRIBUTING.md

依赖项

~23–61MB
~1M SLoC