a2ui-egui 0.3.0

egui immediate-mode GUI backend for A2UI (Agent to UI)
Documentation

a2ui-egui

crates.io docs.rs MIT

English | 中文

📦 a2ui crate 生态成员 · egui 即时模式桌面后端(可选)

本 crate 是 a2ui workspace 的第三渲染后端,完整介绍见根目录 README

A2UI 组件树渲染到原生桌面窗口,基于 egui(即时模式 GUI,固定 0.34)。与 Slint 后端不同,egui 原生支持递归,因此无需展平组件树或 build.rs 有界深度代码生成 —— walker::render_node 直接在 &mut egui::Ui 上递归渲染。egui 还提供真正的可交互原生控件(TextField / Slider / CheckBox / ComboBox)。16 个 A2UI 组件均可原生渲染(仅 Video / AudioPlayer 为占位符):交互控件全部真输入写回 data model;DateTimeInput 是绑定到 value 的可编辑 ISO 文本框;Tabs 有可点击 tab 栏;Icon 经内嵌的 ~12 KB NotoEmoji 子集字体显示 emoji;Image 经 image crate 解码为 egui::ColorImageTextureHandle 真实渲染(本地路径即时解码,远程 URL 渲染前同步拉取 + 缓存)。Button 的点击复用共享的 core::components::dispatch_event + apply_event_result,与其它后端一致;Modal 用原生的 egui::Window 浮层呈现。

可选依赖:本 crate 是 workspace 的非默认成员(会拉取 winit + glow),普通 cargo build 不编译它。

在生态中的位置

┌───────────────────────────────────────────────────────────────────────┐
│  apps:   a2ui-gallery (TUI)   a2ui-slint-gallery   a2ui-egui-gallery  │
│  umbrella:   a2ui  (re-export core + tui [+ slint] [+ egui])          │
│  ▶ backends:   a2ui-tui (ratatui)   a2ui-slint   a2ui-egui            │
│  a2ui-base  (框架无关:Protocol / Model / Catalog / Processor)         │
└───────────────────────────────────────────────────────────────────────┘

a2ui-egui 依赖 a2ui-base;被 a2ui-egui-gallery 与(在 egui feature 下的)umbrella a2ui 依赖。

构建

一切代码都在 backend cargo feature 之后,它才拉入 egui + eframe 运行时。不带该 feature 时,本 crate 只是个空壳(除 a2ui-base 外无依赖),保持 workspace 默认构建轻量。

cargo build -p a2ui-egui --features backend

渲染器使用 glow(OpenGL),需要 GL 栈但无需专用 GPU 驱动。

即时模式状态桥(实现要点)

egui 控件每帧都需要一个稳定的 &mut 缓冲区(保留光标 / 滚动位置、检测值变化),但 A2UI 的值存在于 data model(每帧经由 DataContext 重新解析)。EditBuffers 这个持久化、按组件 id 索引的 map 桥接二者:每帧用 data model 值播种(若过期)→ 把 &mut 交给 egui 控件 → 检测变化 → 收集为 PendingInteraction,在整棵树遍历结束后(drops 掉 data model 的借用)再统一回写。

这与 TUI gallery 的「drop 借用再 mutate」、Slint host 的「回调再 redraw」是同构的。

模块

模块 职责
walker 递归渲染 A2UI 组件树 → &mut egui::Ui
app EguiApp —— 持有 surface 状态、驱动即时模式渲染循环
components 各 A2UI 组件的 egui 实现(真实原生控件)
images Image 组件的字节抓取 + 解码 → egui::ColorImage
edit_state EditBuffers —— 即时模式 ↔ data model 状态桥
interaction 把 egui 交互映射回共享的 core 交互层

许可证

MIT