面向多平台移植的保留式 UI 引擎
FXGui 提供从 UI 构建、样式与布局、输入路由到不可变绘制快照的统一核心。窗口、 事件循环、渲染表面和系统服务由宿主持有,通过明确的 Provider 与 backend 边界接入, 因此同一套 UI 逻辑可以迁移到不同操作系统、窗口系统和图形 API,而不依赖其他 UI 框架。
Android 与 Windows 是当前可运行的参考宿主,不是 Core 的平台边界。
- 平台无关 Core:节点树、样式、布局、输入、动画、语义和资源系统不包含 Android、Win32、EGL、GLES、Vulkan、JNI 或 Java 私有类型。
- 宿主掌控生命周期:应用自行管理窗口、事件循环、Surface、线程和 Present, FXGui 不接管进程入口。
- 平台能力显式注入:显示参数、输入法、剪贴板、触觉、无障碍等能力通过 Provider 接入;未提供的能力会明确降级。
- 渲染后端可替换:Core 生成不可变
FrameSnapshot,渲染器只消费快照, 更换图形后端不需要重写 UI、布局或输入逻辑。 - 状态所有权清晰:每个
Context独立持有状态和资源,不依赖全局 Context、 单例或隐式线程状态。
平台宿主
├─ 窗口、事件循环、输入和系统服务
├─ Platform Providers ───────────────┐
└─ RenderSurface │
▼
Context / Ui / FrameRuntime
│
immutable FrameSnapshot
│
▼
GLES3 / Vulkan / 自定义后端
│
▼
平台 RenderSurface
移植到新平台时,主要工作集中在宿主窗口与生命周期、输入转换、所需的 Platform Providers,以及渲染表面的连接;Core 和 UI 代码保持不变。
- 声明式构建稳定节点树,失败帧不会破坏上一棵已提交树。
NodeBuilder::Retained(deps)保留子树:依赖与样式环境未变时跳过子树重建,节点、监听器和滚动/手势/焦点状态原样保留,交互状态变化自动失效。- 类型安全的样式、选择器、变量与级联,以及 Flex、Grid 和响应式布局。
- Pointer、Touch、Key、Focus、手势竞争、嵌套滚动与惯性/回弹。
- 文字、图片、SVG、Canvas、资源注册、字体塑形与回退。
- 不可变
FrameSnapshot、RenderGraph、GLES3 backend 与 Vulkan backend。 - Widgets、Charts、Material 3、Glass 和 Minimal 主题模块。
- 语义快照、无障碍 Provider、Inspector、Trace 与 Debug Hot Reload。
具体完成度和未覆盖项以开发进度为准。
| 目标 | 当前入口 | 渲染路径 | 状态 |
|---|---|---|---|
| Android ARM64 | Native Executable | EGL + GLES3 | 当前主要设备验证路径 |
| Android APK | JNI App | GLSurfaceView + GLES3 | 完整接入示例 |
| Windows | Win32 Desktop | ANGLE + GLES3 | 可运行桌面参考宿主 |
| 其他平台 | 自定义 Host、Provider 与 backend 连接 | 由移植方选择 | 尚无官方 Runtime |
GLES3 是当前完整可运行的渲染路径;Vulkan backend 已在仓库中开发,但仍需补齐目标 设备验证。这里的“面向多平台移植”描述的是架构边界,不表示所有平台已经完成适配。
将 FXGui 作为源码子目录引入:
add_subdirectory(path/to/FXGui)
target_link_libraries(your_app PRIVATE FXGui::FXGui)公共 API 可以通过单一入口包含:
#include <fxgui.h>
FXGui::Context context;
FXGui::Ui ui(context);真正的平台接入还需要把宿主帧、输入和 RenderSurface 交给
FXGui::FrameRuntime,并选择一个渲染 backend。可直接从下列完整示例开始:
- Windows:Win32 + ANGLE
- Android:Native ELF + EGL/GLES3
- Android:APK + GLSurfaceView/JNI
- 仅使用公开 API 的扩展组件
要求 CMake 3.21+ 和支持 C++17 的编译器。主机测试:
cmake --preset debug
cmake --build --preset debug
ctest --preset debug构建 Windows 参考宿主:
vcpkg install angle:x64-windows
cmake --preset desktop-win32
cmake --build --preset desktop-win32构建 Android ARM64 Native Executable:
cmake --preset android-arm64-release
cmake --build --preset android-arm64-release平台工具链、运行方法和已验证环境见各示例说明。
FXGui/
├─ fxgui.h # 推荐的单一公共入口
├─ include/fxgui/ # 平台无关的公开 API
├─ src/ # Core 实现和私有 internal 头
├─ backends/ # 渲染与平台适配
├─ examples/ # 各平台宿主和公开扩展示例
├─ tests/ # Core、backend、平台与公开头测试
├─ benchmarks/ # 可重复的主机性能基准
└─ docs/ # 架构、进度、需求与验收文档
FXGui 仍在开发中。公开 API、平台 Runtime、Vulkan 验证和完整设备矩阵尚未冻结; 生产使用前请检查开发进度中的当前能力、验证记录与未覆盖项。
FXGui 使用 MIT License。第三方源码及其原始许可见 THIRD_PARTY_NOTICES.md。