6.7 KiB
6.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). - Current work has moved into Phase 3: stabilize schema/validation and continue filling the remaining common/runtime/editor gaps instead of replacing the old editor.
- The current stable editor-layer batch is centered on
LayoutLabas the widget proving ground for tree/list/property-section style controls.
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.- 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:
- Schema/validation is not yet landed in a stable form.
- 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.
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.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.
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:14/14core_ui_style_tests:5/5
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 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.
- Engine runtime layer added:
UIScreenPlayerUIDocumentScreenHostUISystem- layered screen composition and modal blocking semantics
- RHI image path improvements:
- clipped image UV adjustment
- mirrored image UV preservation
- external texture binding reuse
- per-batch scissor application
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/validation still needs a clean minimal landing instead of the current partially merged state in
UIDocumentCompiler.cpp. 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
- Cleanly stabilize schema/validation in
UIDocumentCompiler.cppand add targeted schema regression tests. - 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. - Move more diagnostics and shell affordances into XCUI-owned editor-layer surfaces instead of only ImGui HUDs.
- Continue phased validation, commit, push, and plan refresh after each stable batch.