git.lucas.co / cce-list
things-to-remember checklist
git clone https://git.lucas.co/cce-list.git

commitd4a10cc673e462ceaf7721aa0d5d4866d5941dbd
parentb129263123
authorLucas Galante <lsgalante12@gmail.com>
date2026-10-06 06:13
fix: list rows run across the bottom roll to the window edge

5fa4e68 stopped the row clip at the face edge, where the bottom roll
begins, so text still cut off about a bevel width above the plate's
visible bottom. The clip now runs to the window edge. The compositor
already cuts the window to its rounded silhouette, so the corners need
no clip of their own. Scrolled to the end, the last row still rests the
plate inset clear of the edge, the same as at the other edges.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

 src/main.rs | 17 +++++++++--------
 1 file changed, 9 insertions(+), 8 deletions(-)

diff --git a/src/main.rs b/src/main.rs
index 156531b..b08586a 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -428,15 +428,16 @@ impl ListApp {
         self.needs_rebuild = true;
     }
 
-    /// Where rows show: from under the input down to the plate's edge — the
-    /// face's, where the bottom roll begins — so a scrolled list runs to the
-    /// edge rather than stopping a padding short of it.
+    /// Where rows show: from under the input down to the plate's bottom edge —
+    /// the window's, across the bottom roll — so a scrolled list runs off the
+    /// plate rather than stopping short of it. The rounded corners need no clip
+    /// here: the compositor cuts every window to its silhouette.
     fn list_viewport(&self, m: &Metrics) -> Rect {
         Rect {
             x: 0.0,
             y: m.list_top,
             width: self.width as f32,
-            height: (self.height as f32 - m.list_top - cce_ui::layout::bevel_width()).max(0.0),
+            height: (self.height as f32 - m.list_top).max(0.0),
         }
     }
 
@@ -459,10 +460,10 @@ impl ListApp {
         }
     }
 
-    /// Scrolled to the end, the last row rests a padding clear of the edge,
-    /// as it would if the viewport stopped there.
+    /// Scrolled to the end, the last row rests the plate inset clear of the
+    /// edge — a padding of flat face past the roll, as at every other edge.
     fn max_scroll(&self, m: &Metrics) -> f32 {
-        let content = self.row_count() as f32 * ROW_H + cce_ui::layout::root_plate_padding();
+        let content = self.row_count() as f32 * ROW_H + m.pad;
         (content - self.list_viewport(m).height).max(0.0)
     }
 
@@ -692,7 +693,7 @@ impl Application for ListApp {
         cce_ui::scene::painter::paint_root_into(&self.ui_context, &self.input_box, &mut pc);
 
         // The rows, clipped to the viewport so a scrolled list never bleeds
-        // into the input or onto the plate's bottom roll.
+        // into the input.
         let (family, font_size) = cce_ui::layout::list_font_parsed();
         let vp = self.list_viewport(&m);
         let items = self.rows();