# 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`). - Current work has moved into Phase 2: filling the three-layer XCUI structure instead of replacing the old editor. ## Three-Layer Status ### 1. Common Core - `UI::DrawData`, input event types, focus routing, style/theme resolution are in active use. - `UIDocumentCompiler` was restored to a stable buildable baseline after a broken parallel schema attempt corrupted the file. - Build-system hardening for MSVC/PDB output paths has started in root CMake, `engine/CMakeLists.txt`, `new_editor/CMakeLists.txt`, and `tests/NewEditor/CMakeLists.txt`. - Shared engine-side XCUI runtime scaffolding is now present under `engine/include/XCEngine/UI/Runtime` and `engine/src/UI/Runtime`. - Core regression coverage now includes `UIContext`, layout, style, and runtime screen-player tests through `core_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 - Runtime-side XCUI is still shallow. - The main concrete progress here is that the retained-mode demo runtime now supports a real `TextField` input path with UTF-8 text entry and backspace handling. - This proves that the runtime-facing layer is no longer limited to static cards/buttons. - Engine-side runtime ownership is no longer zero: `UIScreenPlayer` and `UISystem` now define a minimal shared runtime contract for loading a screen document, ticking it with input, and collecting `UI::UIDrawData`. Current gap: - No real game-facing screen host, menu stack, HUD stack, or shared runtime widget library yet. - The new runtime layer still needs a real XCUI document host implementation instead of the current host-facing contract only. ### 3. Editor Layer - `new_editor` remains the isolated XCUI sandbox. - Native hosted preview is working as `RHI offscreen surface -> ImGui shell texture embed`. - `XCUI Demo` remains the long-lived effect and behavior testbed. - `LayoutLab` now includes a `ScrollView` prototype and a more editor-like three-column authored layout. - Panel diagnostics were expanded to clearly separate preview/runtime/input state and native vs legacy paths. - `XCNewEditor` builds successfully to `build/new_editor/bin/Debug/XCNewEditor.exe`. Current gap: - The shell is still ImGui-hosted. - Editor-specialized widgets are still incomplete: tree, list virtualization, property grid, toolbar/menu, text area, icon atlas widgets. ## Validated This Phase - `new_editor_xcui_demo_runtime_tests`: `6/6` - `new_editor_xcui_layout_lab_runtime_tests`: `5/5` - `new_editor_xcui_rhi_command_compiler_tests`: `6/6` - `new_editor_xcui_rhi_render_backend_tests`: `5/5` - `XCNewEditor` Debug target builds successfully - `core_ui_tests`: `20/20` ## Landed This Phase - Demo runtime `TextField` with UTF-8 text insertion, caret state, and backspace. - Demo authored resources updated to exercise the input field. - LayoutLab `ScrollView` prototype with clipping and hover rejection outside clipped content. - RHI image path improvements: - clipped image UV adjustment - mirrored image UV preservation - external texture binding reuse - per-batch scissor application - `new_editor` panel/shell diagnostics improvements for hosted preview state. - XCUI asset document loading changed to prefer direct source compilation before `ResourceManager` fallback for the sandbox path, fixing the LayoutLab crash. ## Phase Risks Still Open - Schema/validation work must be restarted cleanly after the corrupted parallel attempt. - `ScrollView` is still authored/static; no wheel-driven scrolling or virtualization yet. - `Image` widgets 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. ## Next Phase 1. Re-open common-layer schema/validation on a clean baseline and land the smallest stable version. 2. Expand runtime/game-layer ownership from `UIScreenPlayer`/`UISystem` into a real XCUI document host plus menu/HUD stack patterns. 3. Add next editor-facing widgets: `TextArea`, list/tree, property-style sections. 4. Move more diagnostics and shell affordances into XCUI-owned editor-layer surfaces instead of only ImGui HUDs. 5. Continue phased validation, commit, push, and plan refresh after each stable batch.