# UI **命名空间**: `XCEngine::Editor::UI` **类型**: `submodule` **描述**: 编辑器基于 Dear ImGui 的 UI 基础设施层,负责会话、主题 token、面板 chrome、树视图、属性布局和通用控件封装。 ## 概述 `XCEngine::Editor::UI` 不是单个 widget 库,而是一组逐层叠加的编辑器 UI 基建。它的目标是把 Dear ImGui 这种非常自由、非常底层的即时模式 API 收束成一套可维护的“编辑器内建控件层”。 当前源码里,这一层大致可以分成四层: 1. **会话与后端层** 负责 ImGui 上下文、ini 持久化、后端桥接和纹理描述符分配。 2. **主题与设计 token 层** 负责颜色、尺寸、间距、dock host 风格与常用视觉常量。 3. **chrome 与布局层** 负责面板窗口、工具栏、树视图、splitter、divider、属性行布局和自定义 dock 标签栏。 4. **语义化控件层** 负责属性网格、资产卡片、面包屑、弹窗、组件折叠段和各种编辑器专用小部件。 这类分层方式非常接近商业级游戏引擎编辑器的组织方式。原因很简单:如果每个面板都直接拼原始 ImGui 调用,代码很快就会变成不可维护的样式杂糅体;而先建设统一 UI 层,后续任何面板重构、主题调整和交互升级都会容易很多。 ## 聚合头文件 **源文件**: `editor/src/UI/UI.h` `UI.h` 当前是一个标准的 umbrella header。它的职责是把 Editor UI 常用 helper 聚合到同一个入口,而不是声明新的运行时类型。 因此这页文档直接承担 `UI.h` 的说明职责,不再额外创建一个重复的类型页。 ## 当前架构重点 结合当前 `editor/src/UI/**` 与最近一次 Editor UI 重构,以下几层是现在最值得读的核心: - `ImGuiSession + ImGuiBackendBridge` 管理 ImGui 上下文、DPI、SRV 描述符与窗口后端对接。 - `BaseTheme + StyleTokens + DockHostStyle` 管理设计 token 和 dock host 外观,是全局视觉风格的起点。 - `Core + DividerChrome + SplitterChrome + DockTabBarChrome + PanelChrome` 管理窗口 chrome、底边线、拖拽分隔条与自定义 dock 标签栏。 - `TreeView + BuiltInIcons` 管理层级树 / 目录树的共享节点表现与图标前缀。 - `PropertyLayout + ScalarControls + VectorControls + PropertyGrid` 管理 Inspector 的属性布局、标量控件、向量控件和高层属性编辑入口。 - `Widgets + PopupState + SceneStatusWidget + AboutEditorDialog` 提供更接近编辑器业务语义的通用 widget。 这次重构里,`TreeView`、`PropertyLayout`、`BuiltInIcons` 和 `DockTabBarChrome` 是最明显的新基础设施,它们共同把原先分散在具体面板中的 UI 技巧沉淀成了复用层。 ## 设计说明 如果把它和 Unity 一类成熟编辑器对照,可以把 `Editor::UI` 理解成“编辑器内部控件系统”,而不是游戏运行时 UI 框架: - 它面向工具开发,不面向游戏内 HUD。 - 它可以为编辑器体验服务而使用较强约束的 helper。 - 它允许把某些风格、布局和交互策略写死在共享层,以换取整个工具界面的统一性。 这种设计的好处是: - 面板作者写的代码更接近业务语义,而不是样式拼装。 - 主题、间距、树视图和 Inspector 布局能在全局范围内保持一致。 - 面板之间可以共享拖拽、上下文菜单、资产卡片、树节点前缀等成熟模式。 代价也很明确: - 当前 UI 层明显偏 Editor 私有实现,不是面向外部插件的稳定 ABI。 - 很多 helper 仍然是 header-only inline 形式,接口演化速度会比较快。 - 当前实现强依赖 Windows + D3D12 + Dear ImGui 的编辑器运行路径。 ## 头文件 - [AboutEditorDialog](AboutEditorDialog/AboutEditorDialog.md) - `AboutEditorDialog.h`,关于对话框相关 UI。 - [BaseTheme](BaseTheme/BaseTheme.md) - `BaseTheme.h`,编辑器基础主题安装。 - [BuiltInIcons](BuiltInIcons/BuiltInIcons.md) - `BuiltInIcons.h`,内置资源/对象图标系统。 - [ConsoleFilterState](ConsoleFilterState/ConsoleFilterState.md) - `ConsoleFilterState.h`,Console 过滤状态。 - [ConsoleLogFormatter](ConsoleLogFormatter/ConsoleLogFormatter.md) - `ConsoleLogFormatter.h`,Console 日志格式化。 - [Core](Core/Core.md) - `Core.h`,底层 ImGui helper 与 popup chrome 包装。 - [DividerChrome](DividerChrome/DividerChrome.md) - `DividerChrome.h`,统一分隔线绘制。 - [DockHostStyle](DockHostStyle/DockHostStyle.md) - `DockHostStyle.h`,dock host 风格压栈。 - [DockTabBarChrome](DockTabBarChrome/DockTabBarChrome.md) - `DockTabBarChrome.h`,自定义 dock 标签栏。 - [ImGuiBackendBridge](ImGuiBackendBridge/ImGuiBackendBridge.md) - `ImGuiBackendBridge.h`,ImGui 与 D3D12 之间的桥接层。 - [ImGuiSession](ImGuiSession/ImGuiSession.md) - `ImGuiSession.h`,ImGui 会话生命周期。 - [PanelChrome](PanelChrome/PanelChrome.md) - `PanelChrome.h`,面板窗口 / 工具栏 / 内容区 RAII 外壳。 - [PopupState](PopupState/PopupState.md) - `PopupState.h`,延迟弹窗与目标型弹窗状态。 - [PropertyGrid](PropertyGrid/PropertyGrid.md) - `PropertyGrid.h`,Inspector 级属性编辑入口。 - [PropertyLayout](PropertyLayout/PropertyLayout.md) - `PropertyLayout.h`,属性行几何布局层。 - [ScalarControls](ScalarControls/ScalarControls.md) - `ScalarControls.h`,标量属性控件。 - [SceneStatusWidget](SceneStatusWidget/SceneStatusWidget.md) - `SceneStatusWidget.h`,场景状态部件。 - [SplitterChrome](SplitterChrome/SplitterChrome.md) - `SplitterChrome.h`,分隔条交互与绘制。 - [StyleTokens](StyleTokens/StyleTokens.md) - `StyleTokens.h`,Editor UI 设计 token 中心。 - [TreeView](TreeView/TreeView.md) - `TreeView.h`,树视图共享基础设施。 - [VectorControls](VectorControls/VectorControls.md) - `VectorControls.h`,向量属性控件。 - [Widgets](Widgets/Widgets.md) - `Widgets.h`,资产卡片、面包屑、组件折叠段等通用 widget。 ## 当前实现边界 - 这是 Editor 应用层 UI,不是运行时 `engine/include/XCEngine` 风格的公共引擎 API。 - 当前很多接口仍然直接暴露 ImGui 类型,如 `ImDrawList`、`ImVec2`、`ImGuiID`。 - 自定义 dock 标签栏、树视图和图标系统都明显面向当前编辑器产品形态,而不是通用 GUI 框架。 ## 相关文档 - [Editor](../Editor.md) - [Layout](../Layout/Layout.md) - [ComponentEditors](../ComponentEditors/ComponentEditors.md) - [Editor Architecture And Workflow](../../../_guides/Editor/Editor-Architecture-And-Workflow.md)