GPU-accelerated UI toolkit (Vulkan)
git clone https://git.lucas.co/cce-ui.git
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