34 个版本 (4 个重大更新)
新 0.4.0-alpha.6 | 2024 年 8 月 21 日 |
---|---|
0.4.0-alpha.3 | 2024 年 6 月 26 日 |
0.3.0-alpha.1 | 2024 年 3 月 27 日 |
0.0.1-alpha.5 | 2023 年 7 月 4 日 |
0.0.0 | 2023 年 2 月 26 日 |
#646 在 GUI
253 每月下载量
用于 2 crate
305KB
7K SLoC
Ribir - Rust 的非侵入式 GUI 框架
使用 Rust 从单一代码库构建多平台应用程序。
什么是 Ribir?
Ribir 是一个 Rust GUI 框架,它帮助您从单一代码库构建美观且原生的多平台应用程序。
体验一种直接基于您的数据结构 API 的 UI 开发新方法。任何数据突变都会触发精确的 UI 更新。您应该专注于设计您的数据结构和它的 API。然后,您可以描述数据的 UI,而不干扰其逻辑。
初见
计数器的简单示例
|
不使用 DSL 使用 Ribir:
use ribir::prelude::*;
fn main() {
let counter = |ctx: &mut BuildCtx| {
let cnt = Stateful::new(0);
let c_cnt = cnt.clone_writer();
let inc_btn = FilledButton::declarer()
.on_tap(move |_| *c_cnt.write() += 1)
.finish(ctx)
.with_child(Label::new("Inc"));
let counter = H1::declarer()
.text(pipe!($cnt.to_string()))
.finish(ctx);
Row::declarer()
.finish(ctx)
.with_child(inc_btn)
.with_child(counter)
.into_widget()
};
App::run(counter);
}
更多 示例
特性
- 声明式语言 它不引入一种全新的语言。相反,它提供了一组 Rust 宏,以方便交互。您可以选择使用或不使用它。
- 小部件组合系统 有四种小部件类型以支持您,您可以以不同的方式实现您的组件
- 函数组件和
Compose
,从其他组件组合。 Render
,实现您的布局并绘制您想要的任何内容。ComposeChild
,控制父组件与子组件之间的组合逻辑,并指定子组件的模板。
- 函数组件和
- 非侵入状态将您的数据转换为可监听的状态,并根据状态的改变更新视图。
- 布局系统学习和受到Flutter非线性布局的启发,但并不相同。
- 事件系统是一个组合事件系统,支持事件冒泡和捕获。允许与任何组件组合,并且仅在您使用时存在。
- 主题系统:支持为子树的不同部分使用不同的主题,并允许在运行时修改主题。
- 绘制器将视图转换为2D路径。
- GPU渲染是绘制器的后端,进行路径细分,以便您可以在任何GPU渲染引擎中轻松渲染三角形。提供了一个wgpu实现作为默认的GPU渲染引擎。细分基于[lyon]。
- 文本支持基本的文本排印和IME输入,目前处于可使用但粗糙的阶段。
- 组件库提供20多个基本组件,但它们都处于粗糙阶段,API尚未稳定。
架构概述
支持平台
平台 | 支持情况 |
---|---|
Linux | ✅ |
Windows | ✅ |
macOS | ✅ |
iOS | 🚧 尚未 |
Android | 🚧 尚未 |
Web | ✅ |
Ribir正在积极开发和测试桌面平台,桌面和Web平台已集成到我们的CI/CD流程中。
虽然该框架可以在移动平台上编译和运行,但我们尚未完全测试或适配其用户界面。一旦核心框架稳定并发布了一个生产就绪的组件库,我们计划专注于移动支持。
喜欢Ribir吗?
如果您喜欢Ribir,请为我们⭐ STAR ⬆️我们的仓库,并通过WATCH 👀我们的仓库来获取最新发展!
每个鼓励和反馈都可以支持我们走得更远。
贡献
我们对社区为修复错误和改进所做的贡献表示感激。
😎 新手Ribir?
通过帮助我们改进文档来开始了解该框架。请随意打开新的“文档”问题。我们也非常欢迎
- 指出我们文档中的误解
- 提高测试覆盖率的拉取请求
- 添加未记录的代码(例如内置组件)
- 报告错别字
更多信息请参阅:
🤔 对某事感到困惑?
请随时前往讨论区并打开新的“Q&A”以从贡献者那里获得帮助。通常问题会导致框架的易用性改进、更好的文档,甚至新功能!
😱 发现了错误?
请报告所有错误!如果他们感兴趣且有时间,我们将很高兴帮助他们修复找到的错误。
谢谢
本项目之所以存在,要归功于所有贡献者
我们还从以下框架中汲取了灵感
许可
Ribir遵循MIT许可
依赖项
~21–52MB
~892K SLoC