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

commitb76c49532c04e8dc1ede0e1bdf3f3f3a2d358e0d
parent2e363e9e79
authorLucas Galante <[email protected]>
date2026-08-27 13:24
style: carve the breadcrumb run with its face, not just its ring

breadcrumb_relief emitted only the ring, so the run kept the window
plate as its face regardless of the configured dropdown fill — while
the dropdown beside it got that fill from render_widget's per-type
inset_plate hook, which has a Dropdown arm and no Breadcrumb one. An
opaque `style.control.dropdown.color` therefore split the pair.

It now goes through the `inset_plate` bridge (face + ring, same depth
rule), reading the same color the widget does.

Co-Authored-By: Claude <[email protected]>

 src/pages/mod.rs | 20 +++++++++++++++++++-
 1 file changed, 19 insertions(+), 1 deletion(-)

diff --git a/src/pages/mod.rs b/src/pages/mod.rs
index 8c7e6ff..0e487ea 100644
--- a/src/pages/mod.rs
+++ b/src/pages/mod.rs
@@ -76,7 +76,25 @@ pub fn breadcrumb_relief(
     // The dropdown's flush inset plate on the segment run (mirroring
     // Breadcrumb::paint's relief branch) — the full-rect recessed well and
     // the raised run inside it are gone with the restyle.
-    pc.relief_inset(rx, ry, rw, rh, r.min(rh * 0.5));
+    //
+    // Face AND ring, through the `inset_plate` bridge, because the face is
+    // the dropdown's configured fill: `render_widget` offers that fill for a
+    // Dropdown through a per-type hook (layout.rs) but has no Breadcrumb arm,
+    // so a run carved here with no face would keep showing the window plate
+    // while the dropdown beside it went opaque. Both controls read
+    // `dropdown_background_color` now, so they match under any config —
+    // transparent leaves the plate as the face for both.
+    let radius = r.min(rh * 0.5);
+    let depth = cce_ui::layout::bevel_width().min(rh * 0.2);
+    let raw = cce_ui::color::dropdown_background_color();
+    let face = if raw[3] > 0.001 {
+        let mut c = raw;
+        c[3] = 1.0;
+        c
+    } else {
+        [0.0; 4]
+    };
+    pc.inset_plate(face, rx, ry, rw, rh, radius, depth);
     for (a, b) in breadcrumb.seams(rect) {
         pc.groove(a, b, cce_ui::widget::Breadcrumb::SEAM_WIDTH, run);
     }