git.lucas.co / cce-ui
GPU-accelerated UI toolkit (Vulkan)
git clone https://git.lucas.co/cce-ui.git

commit9a73c94cb71202a36958bcfdd92182e1e590560d
parent376bb54c06
authorLucas Galante <[email protected]>
date2026-07-09 11:00
docs(rfc): record Phase 6f — cce-files flips display_list_text; app-side occlusion pattern

Co-Authored-By: Claude Fable 5 <[email protected]>
Claude-Session: https://claude.ai/code/session_016MjP3pGQEDLkJbV5WEmYBe

 docs/rfc-core-rebuild.md | 15 ++++++++++++++-
 1 file changed, 14 insertions(+), 1 deletion(-)

diff --git a/docs/rfc-core-rebuild.md b/docs/rfc-core-rebuild.md
index 8404a8f..e861c63 100644
--- a/docs/rfc-core-rebuild.md
+++ b/docs/rfc-core-rebuild.md
@@ -815,8 +815,21 @@ Constraint respected: **each crate still builds standalone** — the new core is
     neither the popover-occlusion gap nor the 6d embedded-base double-emit applies; its
     root `Backplate` remains for legacy layout/events (full definition-of-done still
     pending events + layout).
+  - **6f — `cce-files` flips `display_list_text`. DONE (live-A/B pixel-identical, AE=0;
+    dropdown popover + breadcrumb context menu re-verified live).** Same mechanical shape
+    as 6e: rebuild check into `display_list()`, `rebuild_layout`'s text tuples emitted as
+    `text_with` prims, `view*`/`CCE_LEGACY_PAINT`/TextItem assembly deleted. Two deltas
+    from colors: the app-side `FontSystem` STAYS (TextBox/List `prepare_text` measurement
+    still needs it — it's `create_font_system()`, bundled-only, so no 6e invisibility
+    hazard), and popover occlusion needed nothing from the engine — cce-files folds
+    popover/context-menu/dialog occlusion into each text's clip bounds app-side
+    (`occlude_against`, both axes), and those bounds ride along as prim bounds. That's
+    the general pattern for flat-list-bridge apps with popovers: the engine's missing
+    dl-text occlusion pass only blocks apps that rely on the DEFAULT `text_areas`
+    popover clamp (`ui_context().active_popovers`), e.g. widget-tree apps whose popovers
+    register through `register_popover`.
   - **Still to do (per-app, roughly smallest-first):**
-    the remaining six display_list() adopters (flip `display_list_text` + drop their TextItem
+    the remaining five display_list() adopters (flip `display_list_text` + drop their TextItem
     assembly, one at a time, each A/B'd — precondition: embedded-base-free tree, see 6d),
     then the widget-tree apps (routed events + scene
     layout + dissolving the embedded-base containers), the demo (`cce-ui/src/main.rs`) as the