2026-04-05 04:55:25 +08:00
# 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.
2026-04-05 05:14:16 +08:00
## Latest Checkpoint
- Phase 1 sandbox batch committed and pushed as `67a28bd` (`Add XCUI new editor sandbox phase 1` ).
2026-04-05 05:17:20 +08:00
- Phase 2 common/runtime batch committed and pushed as `ade5be3` (`Add XCUI runtime screen layer and demo textarea` ).
2026-04-05 05:45:51 +08:00
- Phase 3 has now produced a stable mixed batch across common/runtime/editor:
- schema document definition data is now retained on `UIDocumentModel` and round-trips through the UI artifact path
- engine runtime coverage was tightened again around `UISystem` and concrete document-host rendering
- `LayoutLab` continues as the editor widget proving ground for tree/list/property-section style controls
2026-04-05 05:59:54 +08:00
- the demo sandbox and editor bridge APIs were tightened again without touching the old editor replacement scope
2026-04-05 05:45:51 +08:00
- Old `editor` replacement remains deferred; all active execution still stays inside XCUI shared code and `new_editor` .
2026-04-05 05:14:16 +08:00
2026-04-05 04:55:25 +08:00
## Three-Layer Status
### 1. Common Core
- `UI::DrawData` , input event types, focus routing, style/theme resolution are in active use.
2026-04-05 05:16:40 +08:00
- `UIDocumentCompiler` is buildable again after repairing the duplicated schema helper regression introduced by overlapping schema work.
2026-04-05 05:45:51 +08:00
- `UIDocumentModel` / `UIDocumentResource` now retain schema definition metadata explicitly, including memory accounting and `UISchema` accessors.
- `.xcschema` round-trip coverage is now present through compile, loader, artifact write, and artifact read paths.
2026-04-05 04:55:25 +08:00
- 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` .
2026-04-05 05:14:16 +08:00
- Shared engine-side XCUI runtime scaffolding is now present under `engine/include/XCEngine/UI/Runtime` and `engine/src/UI/Runtime` .
2026-04-05 05:16:40 +08:00
- Shared engine-side `UIDocumentScreenHost` now compiles `.xcui` / `.xctheme` screen documents into a runtime-facing document host path instead of leaving all document ownership in `new_editor` .
- Core regression coverage now includes `UIContext` , layout, style, runtime screen player/system, and real document-host tests through `core_ui_tests` .
2026-04-05 04:55:25 +08:00
Current gap:
2026-04-05 05:45:51 +08:00
- Minimal schema self-definition support is landed, but schema-driven validation for `.xcui` / `.xctheme` instances is still not implemented.
2026-04-05 04:55:25 +08:00
- Shared widget/runtime instantiation is still thin and mostly editor-side.
2026-04-05 05:14:16 +08:00
- Common widget primitives are still incomplete: multiline text editing, tree/list virtualization, property-grid composition, and native image/source-rect level APIs.
2026-04-05 04:55:25 +08:00
### 2. Runtime/Game Layer
- 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.
2026-04-05 05:16:40 +08:00
- The demo runtime has moved past single-line input: multiline `TextArea` behavior is now covered in the sandbox testbed.
- Engine-side runtime ownership is no longer zero: `UIScreenPlayer` , `UIDocumentScreenHost` , and `UISystem` now define a shared runtime contract for loading a screen document, ticking it with input, and collecting `UI::UIDrawData` .
- `UISystem` now supports layered screen composition semantics: stacked screen players, top-interactive input routing, and modal layers that block lower screens.
2026-04-05 05:45:51 +08:00
- Runtime screen emission now also carries concrete button text in the shared document host path instead of silently dropping button labels.
2026-04-05 04:55:25 +08:00
Current gap:
2026-04-05 05:16:40 +08:00
- 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.
2026-04-05 04:55:25 +08:00
### 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.
2026-04-05 05:59:54 +08:00
- `XCUI Demo` now covers both single-line and multiline text authoring behavior, including click caret placement, delete/backspace, tab indentation, and optional text-area line numbers.
2026-04-05 04:55:25 +08:00
- `LayoutLab` now includes a `ScrollView` prototype and a more editor-like three-column authored layout.
2026-04-05 05:44:07 +08:00
- `LayoutLab` now also covers editor-facing widget prototypes: `TreeView` , `TreeItem` , `ListView` , `ListItem` , `PropertySection` , and `FieldRow` .
2026-04-05 04:55:25 +08:00
- Panel diagnostics were expanded to clearly separate preview/runtime/input state and native vs legacy paths.
2026-04-05 05:59:54 +08:00
- The editor bridge layer now has smoke coverage for swapchain after-UI rendering hooks and SRV-backed ImGui texture descriptor registration.
2026-04-05 04:55:25 +08:00
- `XCNewEditor` builds successfully to `build/new_editor/bin/Debug/XCNewEditor.exe` .
Current gap:
- The shell is still ImGui-hosted.
2026-04-05 05:44:07 +08:00
- 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.
2026-04-05 04:55:25 +08:00
## Validated This Phase
2026-04-05 05:16:40 +08:00
- `new_editor_xcui_demo_runtime_tests` : `7/7`
2026-04-05 05:44:07 +08:00
- `new_editor_xcui_layout_lab_runtime_tests` : `6/6`
2026-04-05 04:55:25 +08:00
- `new_editor_xcui_rhi_command_compiler_tests` : `6/6`
- `new_editor_xcui_rhi_render_backend_tests` : `5/5`
- `XCNewEditor` Debug target builds successfully
2026-04-05 05:44:07 +08:00
- `core_ui_tests` : `14/14`
2026-04-05 05:17:20 +08:00
- `core_ui_style_tests` : `5/5`
2026-04-05 05:45:51 +08:00
- `ui_resource_tests` : `7/7`
2026-04-05 05:59:54 +08:00
- `editor_tests` targeted bridge smoke: `3/3`
2026-04-05 04:55:25 +08:00
## Landed This Phase
- Demo runtime `TextField` with UTF-8 text insertion, caret state, and backspace.
2026-04-05 05:16:40 +08:00
- Demo runtime multiline `TextArea` path in the sandbox and test coverage for caret movement / multiline input.
2026-04-05 05:59:54 +08:00
- Demo runtime text editing was extended with:
- click-to-place caret
- `Delete` support
- `Tab` / `Shift+Tab` indentation for text areas
- optional text-area line-number gutter rendering
2026-04-05 04:55:25 +08:00
- Demo authored resources updated to exercise the input field.
- LayoutLab `ScrollView` prototype with clipping and hover rejection outside clipped content.
2026-04-05 05:44:07 +08:00
- LayoutLab editor-widget prototypes for tree/list/property-style sections with dedicated runtime coverage.
2026-04-05 05:45:51 +08:00
- Schema document support extended with:
- retained `UISchemaDefinition` data on `UIDocumentModel`
- artifact schema version bump for UI documents
- loader/resource accessors and memory accounting
- schema compile/load/artifact regression coverage
2026-04-05 05:16:40 +08:00
- Engine runtime layer added:
- `UIScreenPlayer`
- `UIDocumentScreenHost`
- `UISystem`
- layered screen composition and modal blocking semantics
2026-04-05 05:45:51 +08:00
- Runtime document-host draw emission now preserves button labels for shared screen rendering.
2026-04-05 04:55:25 +08:00
- RHI image path improvements:
- clipped image UV adjustment
- mirrored image UV preservation
- external texture binding reuse
- per-batch scissor application
2026-04-05 05:59:54 +08:00
- Editor bridge helpers now expose:
- an `afterUiRender` swapchain callback hook in `D3D12WindowRenderer`
- SRV-view based texture descriptor registration in `ImGuiBackendBridge`
- smoke tests for window renderer, ImGui backend bridge, and console sink registration
2026-04-05 04:55:25 +08:00
- `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.
2026-04-05 05:16:40 +08:00
- `UIDocumentCompiler.cpp` repaired enough to restore full local builds after the duplicated schema-helper regression.
2026-04-05 05:44:07 +08:00
- MSVC debug build hardening was tightened again so large parallel `engine` rebuilds stop tripping over compile-PDB contention.
2026-04-05 04:55:25 +08:00
## Phase Risks Still Open
2026-04-05 05:45:51 +08:00
- Schema instance validation is still open beyond `.xcschema` self-definition and artifact round-trip coverage.
2026-04-05 04:55:25 +08:00
- `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.
2026-04-05 05:44:07 +08:00
- Editor widget coverage is still prototype-driven inside `LayoutLab` ; it has not yet been promoted into a reusable shared widget/runtime layer.
2026-04-05 04:55:25 +08:00
## Next Phase
2026-04-05 05:45:51 +08:00
1. Expand schema rules just one level further inside `UIDocumentCompiler.cpp` :
- `allowedValues` only for `Enum`
- `documentKind` / `restrictDocumentKind` only for `Document`
- `restrictDocumentKind=true` requires explicit `documentKind`
2026-04-05 05:16:40 +08:00
2. Expand runtime/game-layer ownership from the current document host + layered `UISystem` into reusable menu/HUD stack patterns and engine runtime integration.
2026-04-05 05:44:07 +08:00
3. Promote the current editor-facing widget prototypes out of authored `LayoutLab` content and into reusable XCUI widget/runtime modules, then continue with toolbar/menu and more native shell-owned chrome.
2026-04-05 05:45:51 +08:00
4. Start the window-level compositor split in `new_editor` so the editor shell can run through `ImGuiHostCompositor` first and then grow a native XCUI compositor path on the same seam.
2026-04-05 05:14:16 +08:00
5. Continue phased validation, commit, push, and plan refresh after each stable batch.