4 个版本 (2 个重大更新)

0.3.0 2022 年 1 月 4 日
0.2.0 2021 年 12 月 27 日
0.1.1 2021 年 12 月 26 日
0.1.0 2021 年 12 月 14 日

#335 in 渲染

MIT/Apache

155KB
3.5K SLoC

Logo
为 Rust 提供的高级、响应式 UI 库
报告一个错误 · 请求一个特性 . 提出问题


什么是 agui?

Agui 是一个基于 Rust 的先进响应式 GUI 项目,受 Flutter 启发,并借鉴了其他相关 UI 系统的一些概念。

警告

Agui 目前仍在积极开发中。API 很可能会发生变化,并且尚未经过严格的测试。但这并不意味着它不适合适度使用。

🛠️ 安装

Agui 可在 crates.io 上找到,这是 Rust 的官方包仓库。只需将其添加到您的 Cargo.toml 文件中

[dependencies]
agui = "0.1" # ensure this is the latest version

🚀 使用

agui 的文档正在开发中,但您可以在 agui_agpu/examples 目录中查看基本设置,并在 agui_widgets 中查看许多关于创建小部件的示例。

创建新小部件

目前,小部件是通过使用 Widget 继承宏和实现 WidgetBuilder 特性来创建的。

#[derive(Default, Widget)]
// The default layout type is "column" but we want it to be a "row" instead.
pub struct MyWidget {
    // We can define parameters, here.
    pub layout: Ref<Layout>,
}

impl WidgetBuilder for MyWidget {
    // Widgets can return nothing, one or more children, or an error. BuildResult is the enum we use to cover those possibilities.
    fn build(&self, ctx: &WidgetContext) -> BuildResult {
        // `ctx.set_layout` is what we use to define this widget's layout parameters.
        ctx.set_layout_type(LayoutType::Row.into());
        
        // `ctx.set_layout` is what we use to define this widget's layout parameters.
        ctx.set_layout(Ref::clone(&self.layout));

        build! {
            Button { }
        }
    }
}

什么是 build!?

build! 宏使初始化新小部件变得更为简洁和容易。它所做的只是将结构体中未设置的字段初始化为其 Default::default(),并将 .into() 添加到结构体本身。

// It allows us to turn this:

fn build(&self, ctx: &WidgetContext) -> BuildResult {
    BuildResult::One(
        Button {
            layout: Layout::default(),
            color: Color::default(),
            child: Text {
                text: String::from("A Button")
            }
        }
    )
}

// Into this:

use agui::macros::build;

fn build(&self, ctx: &WidgetContext) -> BuildResult {
    build!{
        Button {
            child: Text {
                text: String::from("A Button")
            }
        }
    }
}

您可以在 按钮小部件 中看到一个更复杂的小部件实现(具有全局状态和计算值)。

功能小部件即将推出,这将使创建它们更加容易。

🤝 贡献

鼓励贡献,非常欢迎。如果您愿意,可以查看问题页面

请查阅现有问题和拉取请求,查看是否有人正在处理这个问题。在提交您的更改之前,请确保运行cargo test

依赖关系

~4.5MB
~96K SLoC