9.7 KiB
9.7 KiB
XCUI Phase Status 2026-04-05
Scope
Current execution stays inside the XCUI module and new_editor.
Old editor replacement is explicitly out of scope for this phase.
Latest Checkpoint
- Phase 1 sandbox batch committed and pushed as
67a28bd(Add XCUI new editor sandbox phase 1). - Phase 2 common/runtime batch committed and pushed as
ade5be3(Add XCUI runtime screen layer and demo textarea). - Phase 3 has now produced a stable mixed batch across common/runtime/editor:
- schema document definition data is now retained on
UIDocumentModeland round-trips through the UI artifact path - schema self-definition validation is now stricter around enum/document-only metadata combinations
- engine runtime coverage was tightened again around
UISystemand concrete document-host rendering LayoutLabcontinues as the editor widget proving ground for tree/list/property-section style controls- the demo sandbox and editor bridge APIs were tightened again without touching the old editor replacement scope
new_editornow has an explicit window-level compositor seam throughIEditorHostCompositor/ImGuiHostCompositor
- schema document definition data is now retained on
- Old
editorreplacement remains deferred; all active execution still stays inside XCUI shared code andnew_editor.
Three-Layer Status
1. Common Core
UI::DrawData, input event types, focus routing, style/theme resolution are in active use.UIDocumentCompileris buildable again after repairing the duplicated schema helper regression introduced by overlapping schema work.UIDocumentModel/UIDocumentResourcenow retain schema definition metadata explicitly, including memory accounting andUISchemaaccessors..xcschemaround-trip coverage is now present through compile, loader, artifact write, and artifact read paths.- Build-system hardening for MSVC/PDB output paths has started in root CMake,
engine/CMakeLists.txt,new_editor/CMakeLists.txt, andtests/NewEditor/CMakeLists.txt. - Shared engine-side XCUI runtime scaffolding is now present under
engine/include/XCEngine/UI/Runtimeandengine/src/UI/Runtime. - Shared engine-side
UIDocumentScreenHostnow compiles.xcui/.xcthemescreen documents into a runtime-facing document host path instead of leaving all document ownership innew_editor. - Core regression coverage now includes
UIContext, layout, style, runtime screen player/system, and real document-host tests throughcore_ui_tests.
Current gap:
- Minimal schema self-definition support is landed, including consistency checks for enum/document-only schema metadata, but schema-driven validation for
.xcui/.xcthemeinstances is still not implemented. - Shared widget/runtime instantiation is still thin and mostly editor-side.
- Common widget primitives are still incomplete: multiline text editing, tree/list virtualization, property-grid composition, and native image/source-rect level APIs.
2. Runtime/Game Layer
- The main concrete progress here is that the retained-mode demo runtime now supports a real
TextFieldinput path with UTF-8 text entry and backspace handling. - The demo runtime has moved past single-line input: multiline
TextAreabehavior is now covered in the sandbox testbed. - Engine-side runtime ownership is no longer zero:
UIScreenPlayer,UIDocumentScreenHost, andUISystemnow define a shared runtime contract for loading a screen document, ticking it with input, and collectingUI::UIDrawData. UISystemnow supports layered screen composition semantics: stacked screen players, top-interactive input routing, and modal layers that block lower screens.- Runtime screen emission now also carries concrete button text in the shared document host path instead of silently dropping button labels.
Current gap:
- No production game-loop integration has been wired yet from scene/runtime systems into
UISystem. - The runtime widget library is still shallow and missing the editor-grade controls that will later be shared downward.
3. Editor Layer
new_editorremains the isolated XCUI sandbox.- Native hosted preview is working as
RHI offscreen surface -> ImGui shell texture embed. XCUI Demoremains the long-lived effect and behavior testbed.XCUI Demonow covers both single-line and multiline text authoring behavior, including click caret placement, delete/backspace, tab indentation, and optional text-area line numbers.LayoutLabnow includes aScrollViewprototype and a more editor-like three-column authored layout.LayoutLabnow also covers editor-facing widget prototypes:TreeView,TreeItem,ListView,ListItem,PropertySection, andFieldRow.- Panel diagnostics were expanded to clearly separate preview/runtime/input state and native vs legacy paths.
- The editor bridge layer now has smoke coverage for swapchain after-UI rendering hooks and SRV-backed ImGui texture descriptor registration.
Applicationno longer owns the ImGui backend directly; window presentation now routes throughIEditorHostCompositorwith anImGuiHostCompositorimplementation.XCNewEditorbuilds successfully tobuild/new_editor/bin/Debug/XCNewEditor.exe.
Current gap:
- The shell is still ImGui-hosted.
- Editor-specialized widgets are still incomplete at the shared-module level: the authored prototypes exist, but virtualization, selection models, command routing, property editing models, toolbar/menu chrome, and icon-atlas widgets are not yet extracted into reusable XCUI modules.
Validated This Phase
new_editor_xcui_demo_runtime_tests:7/7new_editor_xcui_layout_lab_runtime_tests:6/6new_editor_xcui_rhi_command_compiler_tests:6/6new_editor_xcui_rhi_render_backend_tests:5/5XCNewEditorDebug target builds successfullycore_ui_tests:16/16core_ui_style_tests:5/5ui_resource_tests:11/11editor_teststargeted bridge smoke:3/3
Landed This Phase
- Demo runtime
TextFieldwith UTF-8 text insertion, caret state, and backspace. - Demo runtime multiline
TextAreapath in the sandbox and test coverage for caret movement / multiline input. - Demo runtime text editing was extended with:
- click-to-place caret
DeletesupportTab/Shift+Tabindentation for text areas- optional text-area line-number gutter rendering
- Demo authored resources updated to exercise the input field.
- LayoutLab
ScrollViewprototype with clipping and hover rejection outside clipped content. - LayoutLab editor-widget prototypes for tree/list/property-style sections with dedicated runtime coverage.
- Schema document support extended with:
- retained
UISchemaDefinitiondata onUIDocumentModel - artifact schema version bump for UI documents
- loader/resource accessors and memory accounting
- schema compile/load/artifact regression coverage
- schema consistency rules for:
allowedValuesonly onenumdocumentKind/restrictDocumentKindonly ondocument- explicit
documentKindrequired whenrestrictDocumentKind=true
- retained
- Engine runtime layer added:
UIScreenPlayerUIDocumentScreenHostUIScreenStackControllerUISystem- layered screen composition and modal blocking semantics
- Runtime/game integration scaffolding now includes reusable
HUD/menu/modalstack helpers on top ofUISystem. - Runtime document-host draw emission now preserves button labels for shared screen rendering.
- RHI image path improvements:
- clipped image UV adjustment
- mirrored image UV preservation
- external texture binding reuse
- per-batch scissor application
- Editor bridge helpers now expose:
- an
afterUiRenderswapchain callback hook inD3D12WindowRenderer - SRV-view based texture descriptor registration in
ImGuiBackendBridge - smoke tests for window renderer, ImGui backend bridge, and console sink registration
- an
new_editorhost presentation now has a first-class compositor seam:IEditorHostCompositorImGuiHostCompositorApplicationframe/present flow routed through the compositor instead of directm_imguiBackendownership
new_editorpanel/shell diagnostics improvements for hosted preview state.- XCUI asset document loading changed to prefer direct source compilation before
ResourceManagerfallback for the sandbox path, fixing the LayoutLab crash. UIDocumentCompiler.cpprepaired enough to restore full local builds after the duplicated schema-helper regression.- MSVC debug build hardening was tightened again so large parallel
enginerebuilds stop tripping over compile-PDB contention.
Phase Risks Still Open
- Schema instance validation is still open beyond
.xcschemaself-definition and artifact round-trip coverage. ScrollViewis still authored/static; no wheel-driven scrolling or virtualization yet.Imagewidgets still do not have source-rect/atlas-subregion level API in the high-level draw command model.- Editor shell still depends on ImGui as host chrome.
- Editor widget coverage is still prototype-driven inside
LayoutLab; it has not yet been promoted into a reusable shared widget/runtime layer.
Next Phase
- Expand runtime/game-layer ownership from the current document host + layered
UISysteminto reusable menu/HUD stack patterns and engine runtime integration. - Promote the current editor-facing widget prototypes out of authored
LayoutLabcontent and into reusable XCUI widget/runtime modules, then continue with toolbar/menu and more native shell-owned chrome. - Add a native XCUI host compositor on the existing window-level compositor seam so
new_editorcan present without going through ImGui-owned draw data. - Reduce remaining ImGui leakage in hosted preview surfaces and panel contracts now that the compositor seam is in place.
- Continue phased validation, commit, push, and plan refresh after each stable batch.