rgpui 0.1.0

GUI UI framework
Documentation
rgpui-0.1.0 has been yanked.

RGPUI

基于 gpui + adabraka-gpui 进行修改。 主要测试了windows平台,linux和mac没有测试。

RGPUI 是一个混合即时/保留模式、GPU 加速的 Rust UI 框架,旨在支持广泛的应用程序开发。

主要特性

  • 混合即时/保留模式:结合即时模式的高性能与保留模式的状态管理优势
  • 基于 Entity 的状态管理:通过智能指针安全地在应用各部分之间共享和通信状态
  • 声明式视图(View):实现 Render trait 即可构建声明式 UI,每帧自动刷新
  • 命令式元素(Element):底层构建块,提供对渲染和布局的完全控制
  • GPU 加速渲染:利用 Metal/Vulkan 进行高性能图形渲染
  • Taffy 布局引擎:支持 Flexbox 和 Grid 布局
  • 丰富的文本系统:支持字体渲染、文本布局和高亮
  • 输入处理与快捷键:完整的键盘/鼠标事件处理和可配置的键位映射
  • 动画系统:内置动画支持
  • 跨平台:支持 macOS、Linux 和 Windows
  • Tailwind 风格 API:通过 div 元素提供熟悉的样式链式调用

快速开始

GPUI 目前处于活跃开发阶段(pre-1.0),版本之间可能会有破坏性变更。请确保使用最新稳定版 Rust。

安装依赖

macOS

xcode-select --install

sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer

Linux:需要安装相应的图形库依赖(如 Wayland/X11 开发包)。

添加依赖

Cargo.toml 中添加:

[dependencies]

rgpui = "0.2"

最小示例

use rgpui::*;

struct HelloWorld;

impl Render for HelloWorld {
    fn render(&mut self, _window: &mut Window, _cx: &mut Context<Self>) -> impl IntoElement {
        div()
            .flex()
            .items_center()
            .justify_center()
            .size_full()
            .child("Hello, GPUI!")
    }
}

fn main() {
    App::new().run(|cx: &mut App| {
        cx.open_window(WindowOptions::default(), |window, cx| {
            cx.new(|cx| HelloWorld)
        });
    });
}

更多示例请查看 examples 目录 或运行:

cargo run -p rgpui --example hello_world

架构概述

GPUI 提供三种不同层次的抽象,以满足不同场景的需求:

1. Entity — 状态管理

Entity 是 RGPUI 的状态容器,由框架统一管理生命周期。通过 Entity<T> 智能指针访问,类似 Rc,但支持跨组件通信和响应式更新。

// 创建 Entity
let counter = cx.new(|cx| Counter { value: 0 });

// 更新 Entity
cx.update_entity(&counter, |counter, cx| {
    counter.value += 1;
});

2. View — 声明式 UI

View 是可渲染的 Entity,通过实现 Render trait 定义 UI 结构。每帧开始时 GPUI 会调用根 View 的 render 方法,构建元素树。

impl Render for MyView {
    fn render(&mut self, _window: &mut Window, cx: &mut Context<Self>) -> impl IntoElement {
        div()
            .flex()
            .flex_col()
            .gap_2()
            .child("Title")
            .child(Button::new("click_me", "Click me"))
    }
}

3. Element — 命令式 UI

Element 是 UI 的底层构建块,提供对布局、绘制和事件处理的完全控制。适合实现高性能列表、自定义编辑器等场景。

核心概念

概念 说明
Application 应用入口点,管理全局状态和事件循环
Window 窗口上下文,处理渲染、输入和布局
Entity<T> 状态容器,由 GPUI 所有,通过智能指针访问
View 可渲染的 Entity,实现 Render trait
Element UI 构建块,控制布局和绘制
Context 上下文 trait,提供与 GPUI 交互的主要接口
Action 用户定义的操作,用于将按键映射到逻辑操作
Global 全局状态,在应用范围内共享

数据流

用户输入 → Action → Entity 更新 → View 重新渲染 → Element 树 → GPU 渲染

示例

分类 示例
入门 hello_world, input, uniform_list
布局与样式 grid_layout, opacity, shadow, text
交互 drag_drop, scrollable, tab_stop, popover
图像与动画 image, svg, gradient, animation
窗口行为 set_menus, window_positioning, window_shadow

完整示例列表请查看 examples/README.md

文档

许可证

GPUI 采用 Apache-2.0 许可证。详见 LICENSE

相关链接