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

commit0c22103e6ae03557738e02c2af01c93463080f6a
parent1d6879d158
authorLucas Galante <[email protected]>
date2026-07-09 16:21
docs(rfc): record Phase 6s — settings root+StatusBar dissolved; corner_frame; popup-anchor note

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

 docs/rfc-core-rebuild.md | 37 +++++++++++++++++++++++++++++++------
 1 file changed, 31 insertions(+), 6 deletions(-)

diff --git a/docs/rfc-core-rebuild.md b/docs/rfc-core-rebuild.md
index 7bf4925..053ee24 100644
--- a/docs/rfc-core-rebuild.md
+++ b/docs/rfc-core-rebuild.md
@@ -976,13 +976,38 @@ Constraint respected: **each crate still builds standalone** — the new core is
     partition the tuples by radius, and interleave [plain…, plate, rounded…]. Wheel in
     colors propagates per-slider; both apps answer dragging via `drag_allowed_at`.
     Files' view-dropdown popover + breadcrumb context menu re-verified live.
+  - **6s — settings' root Backplate + StatusBar dissolved; `Dropdown::set_corner_frame`
+    lands. DONE (WINDOW_PC tuple stream byte-identical; pixels AE=0; live: dropdown
+    popover → page switch to Processes with statusbar text following, wheel scroll,
+    service-list render).** Settings needed what colors/files didn't: its plate radius
+    is a hardcoded 12, so the legacy aggregate's corner RESOLUTION mattered — a child
+    plain quad flush with a window corner picks up the plate radius there (the
+    `render_widget` extra-corners logic against the ROOT rect). The hand assembly
+    replicates the full aggregate: child plain quads (window-clipped, root-corner-
+    resolved), plate, child rounded quads, root-clamped text, in the old child order.
+    Two parent couplings surfaced (the widgets read their Backplate ancestor):
+    (1) StatusBar — bg falls back from the backplate-statusbar theme color to
+    STATUS_BG, bottom corners round at the PARENT's radius, text color/font are
+    backplate-specific; it dissolves outright (pure chrome in this app) into tuples +
+    a `status_text` String. (2) Dropdown — the backplate-concentric corner cut walks
+    for a Backplate ancestor and silently degrades to a plain rounded box when the
+    walk finds nothing; new `Dropdown::set_corner_frame((rect, radius, corners))`
+    hands it the frame explicitly and takes precedence. Also found (pre-existing,
+    reproduced on the pre-6s baseline): the engine xdg-popup positioner anchors at
+    the widget's BOTTOM edge regardless of the app's open-upward popover rect, so
+    settings' page popover displays below the window while clicks land on the
+    app-side (invisible, in-window) popover rect — the engine popup path's last
+    consumer; fix when settings' popovers move to the 6l ui_context-only pattern.
+    The root's `with_border` was never rendered (a rounded Backplate emits no plain
+    bg quad; the border branch fires only on plain bg quads) — dropped, not ported.
   - **Still to do:**
-    settings' tree (Switcher/Page/SectionContainer/ScrollBox — the deep-composition
-    set); files' internal containers (splitters/BrowseContainer/List) and data-editor's
-    SplitBox/TreeList when their turns come; routed events + scene layout for the
-    widget-tree apps; the demo (`cce-ui/src/main.rs`) as the reference `Application`.
-    Delete the legacy `view*`/`text_items` paths, the per-widget text getters, and
-    finally `Element` + `Adapted` once the last app is across.
+    settings' page tree (Switcher/Page/SectionContainer/ScrollBox — the
+    deep-composition set; the root and status bar are gone as of 6s); files' internal
+    containers (splitters/BrowseContainer/List) and data-editor's SplitBox/TreeList
+    when their turns come; routed events + scene layout for the widget-tree apps; the
+    demo (`cce-ui/src/main.rs`) as the reference `Application`. Delete the legacy
+    `view*`/`text_items` paths, the per-widget text getters, and finally `Element` +
+    `Adapted` once the last app is across.
 
 Order rationale: each phase is independently valuable and reversible, and no phase requires the
 next to compile. Phase 0 can land immediately regardless of the rest.