git.lucas.co / cce-files
file manager
git clone https://git.lucas.co/cce-files.git

commitd43648057b588433643da54b2891eddde76eb98e
parent326b03c2da
authorLucas Galante <[email protected]>
date2026-08-15 11:24
docs: RowList's paint order depends on which PageContent it lands in

Fourth pass of the relief audit (751d183, ea9b8a7, 326b03c). Nothing to fix
here either. Both mechanical checks are clean: `relief_recessed` is handed
the true rect so no depth can drift, and `set_rect` runs eight lines above
`push_prims` in browse.rs so the rect is never stale. There is also nothing
to restore parity WITH — cce-ui's `List` was deleted in Phase 6z and RowList
is the only consumer of the column model left, so unlike the dropdown there
is no widget paint() to mirror. Its fill/well pairing is instead the
reference the preview pane was just corrected against in 326b03c.

What the audit did surface is a latent trap worth a comment. The module
already documents the Phase 6v fix — plain quads (scrollbar, row overlays)
must not precede the rounded background, or they wash out under it — but not
what the fix rests on. `rebuild_layout` partitions `plain_pc`'s rects by
radius and appends all plain before all rounded, so call order survives only
in the page's own PageContent. RowList's bg is rounded (list_corner_radius
defaults to 4.0) and its scrollbar and overlays are radius-0, so routing this
through plain_pc/window_pc would re-sort the bg after them and reinstate the
sandwich. That is an easy refactor to reach for, since PreviewPane::push_prims
emits into plain_pc and looks like the house style, and it would fail
silently: a translucent bg washes the overlays rather than hiding them.

Exercised the scrollbar path while checking (3136 entries in /usr/bin, which
the earlier captures never covered) to confirm the thumb is not swallowed by
the well wall: it abuts the rim's shading rather than running under it.

Comment only; no behavior change.

 src/row_list.rs | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/src/row_list.rs b/src/row_list.rs
index 99f5567..cc93068 100644
--- a/src/row_list.rs
+++ b/src/row_list.rs
@@ -8,6 +8,16 @@
 //! One deliberate paint fix: `render_widget(List)` emitted the plain quads (scrollbar,
 //! row overlays) BEFORE the rounded background, washing them under the translucent bg —
 //! the same sandwich the settings lists had (Phase 6v). `push_prims` draws bg first.
+//!
+//! **That fix holds only because these prims go into the PAGE's `PageContent`.**
+//! `rebuild_layout` partitions `plain_pc`'s rects by radius and appends all the plain
+//! ones before all the rounded ones, so anything routed through there is re-sorted
+//! rather than drawn in call order. The bg here is rounded (`list_corner_radius`
+//! defaults to 4.0) while the scrollbar and row overlays are radius-0, so moving this
+//! emission to `plain_pc`/`window_pc` — as `PreviewPane::push_prims` does, which makes
+//! it look like the natural thing to do — would sort the bg back after them and
+//! reinstate the exact Phase 6v sandwich this note describes. It would also be silent:
+//! the bg is translucent, so the overlays wash out rather than disappear.
 
 use cce_ui::widget::{Justification, MouseScrollDelta};