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

commit8720592dec8f226c73d168928497d3263be2bb1d
parent3a978d8715
authorLucas Galante <[email protected]>
date2026-07-23 10:50
fix: exempt ListRow buttons from the raised inset-plate relief

control_relief() made every Button paint an inset_plate — including
ListRow, whose idle fill is deliberately transparent, so the plate's
edges-only degrade stacked a permanent carved groove ring on every idle
row of a list (cce-email's inbox, cce-fonts' family list). List rows are
transparent-until-hover/selected surfaces, not controls; they now take
the flat/rounded fill path, so idle rows paint nothing and hover/selected
tints render as plain rounded fills. Real buttons keep the relief.

Live-verified in cce-email and cce-fonts (the two paint-walk consumers).

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

 src/widget/input/button.rs | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/src/widget/input/button.rs b/src/widget/input/button.rs
index b91aaf0..ce7225a 100644
--- a/src/widget/input/button.rs
+++ b/src/widget/input/button.rs
@@ -265,7 +265,10 @@ impl Paint for Button {
         // carved groove ring with its beveled lip rising back to the surface
         // plane, face level with the surface. Transparent fills degrade to
         // edges-only inside the groove (an opaque hover_color fills the face).
-        if self.raised {
+        // List rows are exempt: they are transparent-until-hover/selected
+        // surfaces, and the edges-only groove would stack a permanent carved
+        // ring on every idle row of a list.
+        if self.raised && self.kind != ButtonKind::ListRow {
             let depth = crate::layout::bevel_width().min(h * 0.2);
             ctx.inset_plate(rect, (radius, radius, radius, radius), color, depth);
         } else