gui 域包 —— Ctron 窗口应用运行时(T3 平台面)
clay + raylib 窄桥、CTML 视图解析、域运行时与 headless 验收驱动的单域集合。
消费形态 = use gui.{...};包内速览(布局/能力面/坑位全形)以仓库
pkgs/gui/README.md 为单一真源,本页为站点导读。
参考页(签名面自动生成)
| 页 | 内容 |
|---|---|
| gui_parse.md | 迷你词法 + CTML 解析核心 + GUI-27 锚合并 |
| gui_expr.md | bxv 求值器 + 下标切分 + 事件表达式 + 实参解码 |
| gui_render.md | 交互态 + 渲染分派 + 聚焦 |
| gui_edit.md | input/textarea 管线 + 菜单右键缝 |
| gui_driver.md | 窗口循环 + 入口装配 + test/d_* 全族 + on:after |
| gui_anim.md | 动画面 |
注:门面 gui.ct(GuiTree + extern 窄桥 + 运行时辅助)的 iface 投影暂缺
(doc 驱动 use 合并 E5030 与真链分歧,登记债务)——入口 API
(run_kb_d / test / d_click / d_frame / d_type_char / d_expect_text /
theme_apply 等)以仓库 README 与 gui_widgets /
gui_theme / themes 三包页为准。
快速上手(headless 双口径)
use gui.{run_kb_d, test, d_click, d_frame, d_type_char, d_expect_text}
struct Model { var count: I32 }
fn inc() { } // on:click 处理函数声明(E8120)
fn bind_all(buf: List[Str], m: Box[Model]) {
if buf[0] == "count" { buf.push("i:" + m.count.to_string()) }
}
fn act(name: Str, m: Box[Model]) {
if name == "inc" { m.count = m.count + 1 }
}
fn main() -> I32 {
var src: Str = read_file("app.ctml") // 或 ctron_embedded()(内嵌 view)
var m = Box[Model](Model { count: 0 })
if env_get("CTRON_GUI_HEADLESS") != "" {
return test(src, 320, 640, |buf| bind_all(buf, m),
|name| act(name, m), |k| k, |t, a, key| { /* 断言脚本 */ })
}
run_kb_d("app", 320, 640, |buf| bind_all(buf, m), |name| act(name, m), |k| k)
return 0
}
相关包:gui_theme(Theme + 八主题族 + 令牌解析)、 gui_widgets(16 组件规范形态纯 prop)、 themes(主题作为可导入包)。
验收:永不进 std 通用门禁;泳道 headless 命令缓冲驱动(CTRON_GUI_HEADLESS)。