架构
UltimateUI 的核心设计是把 C# UI 操作变成紧凑、可校验的二进制 wire frame。 这让用户代码保持 JS-free,同时仍然能在现代 WebKit 中更新 DOM。
数据流
C# Element tree
-> MountContext / DomUpdateContext
-> RingEncoder
-> IDomBackend
-> WebKitGTK WebView
-> embedded shim decoder
-> DOM
事件反向路径:
DOM event
-> shim listener table
-> window.webkit.messageHandlers.uui
-> WebKitGtkSurface
-> EventDispatcher
-> C# delegate
主要模块
| 路径 | 职责 |
|---|---|
spec/*.json | opcode、元素、事件、样式的单一数据源 |
src/UltimateUI.SourceGen/ | 根据 spec 生成 DOM 类型、writer、dispatcher 和 shim asset |
src/UltimateUI.Core/ | 元素树、arena、encoder、mount/update transaction、listener registry |
src/UltimateUI.Hosting/ | render host、backend probe、WebKitGTK host、JS evaluate backend |
src/UltimateUI.Native/ | WebKitGTK、JSC、GLib、GTK 的 P/Invoke surface |
shim/ | TypeScript DOM decoder 和 renderer event bridge |
samples/Hello/ | CSX + WebKitGTK 端到端示例 |
为什么需要 shim
现代 WebKit 不再提供公开的 webkit_dom_* C API。外部进程修改 DOM 的可用
通道是 JavaScript 引擎。UltimateUI 把这个细节封装在固定 shim 内:用户调用
C# API,框架提交二进制 frame,shim 只负责解码和执行。