#declarative-ui #ui-framework #declarative #cross-platform-gui #ui #compose-ui

ribir_core

一个非侵入式声明式 GUI 框架,用于构建现代原生/wasm 跨平台应用程序

35 个版本 (4 个重大变更)

0.4.0-alpha.6 2024 年 8 月 21 日
0.4.0-alpha.32024 年 6 月 26 日
0.3.0 2024 年 8 月 26 日
0.3.0-alpha.12024 年 3 月 27 日
0.0.0 2023 年 2 月 26 日

#1329GUI

Download history 4/week @ 2024-05-05 6/week @ 2024-05-12 20/week @ 2024-05-19 164/week @ 2024-05-26 127/week @ 2024-06-02 114/week @ 2024-06-09 116/week @ 2024-06-16 122/week @ 2024-06-23 21/week @ 2024-06-30 103/week @ 2024-07-07 8/week @ 2024-07-14 1/week @ 2024-07-21 95/week @ 2024-07-28 112/week @ 2024-08-04 125/week @ 2024-08-11 117/week @ 2024-08-18

449 每月下载量
4 crates 中使用

MIT 许可证

1MB
22K SLoC

Ribir - Rust 的非侵入式 GUI 框架

Ribir-logo

使用 Rust 从单个代码库构建多平台应用程序。

什么是 Ribir?

Ribir 是一个 Rust GUI 框架,帮助您从单个代码库构建美观且原生的多平台应用程序。

体验一种基于您的数据结构 API 的全新 UI 开发方法。任何数据变更都会触发精确的 UI 更新。您应该专注于设计数据结构和其 API。然后,您可以描述数据的 UI 而不干扰其逻辑。

初识

计数器的简单示例

use ribir::prelude::*;
fn main() {
  let counter = fn_widget! {
    let cnt = Stateful::new(0);
    @Row {
      @FilledButton {
        on_tap: move |_| *$cnt.write() += 1,
        @{ Label::new("Inc") }
      }
      @H1 { text: pipe!($cnt.to_string()) }
    }
  };
  App::run(counter);
}

不使用 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许可

依赖关系

~18–37MB
~646K SLoC