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 渲染
155KB
3.5K SLoC
什么是 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