跳到主要内容

参考约 8 分钟

实现状态

GPUIX 各项能力的完成情况:已完成、待办与已知限制。

核心运行时

  • 基于 mutation 协议的 React reconciler
  • 通过 napi-rs 与 wasm-bindgen 实现的原子化 applyBatch() 变更传输
  • RetainedTree(Rust 侧元素存储)
  • 样式映射(CSS 属性 → GPUI 样式方法)

事件与输入

  • 鼠标事件(click、mouseDown、mouseUp、mouseMove、mouseEnter、mouseLeave)
  • 外侧点击(onMouseDownOutside)
  • 带 delta 与触摸相位的滚轮事件
  • 键盘事件(keyDown、keyUp),带焦点管理
  • 获得/失去焦点事件,自动创建 FocusHandle
  • 原生文本输入与多行 textarea

布局与绘制

  • 可滚动容器(overflow: "scroll"),带持久滚动状态
  • 编程式滚动 API(scrollTo、scrollToItem、scrollIntoView、getScrollOffset)
  • 虚拟列表(<virtual-list>)
  • 原生文本组件(<code>、<diff>、<markdown>)
  • 图像与 SVG 元素(<img>、<svg>),以及 <img> ref 上的 setImage / setImagePixels
  • 原生 hover 与 active 样式
  • 原生 motion.div 过渡,带确定性帧捕获
  • motion.div 的 AnimatePresence 退场过渡
  • Canvas 元素

文本能力

  • 跨元素文本选区
  • 文本高亮与搜索(highlight、useTextSearch)
  • 无样式 Select、Combobox 与 Tooltip

窗口

  • 窗口标题(setWindowTitle)
  • 原生窗口控制(minimizeWindow、zoomWindow、toggleFullscreen)
  • 窗口装饰(titlebarTransparent、windowBackground、红绿灯位置)
  • 带标准快捷键的 macOS 菜单栏(appName)
  • 后台启动(focus、show、activateWindow)
  • 最后一个窗口关闭时退出进程
  • 运行时错误保持 macOS 窗口存活并显示堆栈浮层
  • 调试边框浮层(debugFrameOverlay / setDebugFrameOverlay)
  • 应用声明的菜单与菜单回调
  • 多窗口

开发体验

  • 带截图的 GPU 支撑测试渲染器
  • 独立构建(锁定 GPUI 平台依赖)
  • bun --hot 下的 JS 重挂载(render() 保留原生窗口)
  • 原生 .node 插件的热重载。bun run dev 会重新编译并重启。原生模块无法卸载。
  • bun --hot 期间的 React Refresh(需要 Bun 运行时转换)

已知限制

限制 说明
没有嵌套滚动 只允许一个父元素滚动,见滚动
Linux 忽略 focus 窗口仍会以聚焦状态打开,见后台启动
浏览器渲染器无窗口控制 minimizeWindow 等在浏览器中不可用
浏览器渲染器无 AccessKit 无障碍 props 在 wasm 构建中是空操作,见无障碍
Linux 测试渲染器 暂不支持,等待 GPUI 的 wgpu 无头渲染器,见测试
颜色文法是 csscolorparser 0.8.3 hsv() / hsva() / hwba() 是解析器扩展而非 CSS Color 4 标准函数;不支持径向、锥形与重复渐变,也不支持超过两个色标的渐变,见支持的样式

文档

详细的架构、通信流程与贡献指南见 AGENTS.md。

许可证

Apache-2.0