Skip to content

Repository files navigation

FXGui 图标

FXGui

面向多平台移植的保留式 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。可直接从下列完整示例开始:

构建与测试

要求 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

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages