git.lucas.co / cce-system-interface
system settings
git clone https://git.lucas.co/cce-system-interface.git

commit45d96acd1a91b66f1a54c55a83d92fa3dbf85c87
parent15c929db60
authorLucas Galante <[email protected]>
date2026-08-01 22:52
feat: taller Processes list (220 -> 400) drawn frameless on the well

ScrollRegion gains a draw_frame flag (with_frame): off skips the
border + background plate in push_prims while keeping the scrollbar.
The process list uses it; the services list keeps its frame.

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

 src/pages/processes.rs |  6 +++---
 src/scroll_region.rs   | 49 ++++++++++++++++++++++++++++++-------------------
 2 files changed, 33 insertions(+), 22 deletions(-)

diff --git a/src/pages/processes.rs b/src/pages/processes.rs
index 0d51f1f..18b4850 100644
--- a/src/pages/processes.rs
+++ b/src/pages/processes.rs
@@ -44,7 +44,7 @@ impl Default for ProcessesState {
         Self {
             loaded: false,
             processes: Vec::new(),
-            cpu_list: ScrollRegion::new(24.0, 2.0),
+            cpu_list: ScrollRegion::new(24.0, 2.0).with_frame(false),
 
             services_loaded: false,
             services: Vec::new(),
@@ -93,7 +93,7 @@ pub async fn fetch_processes_state() -> ProcessesState {
     ProcessesState {
         loaded: true,
         processes,
-        cpu_list: ScrollRegion::new(24.0, 2.0),
+        cpu_list: ScrollRegion::new(24.0, 2.0).with_frame(false),
         services_loaded: false,
         services: Vec::new(),
         services_active_tab: ServiceTab::System,
@@ -121,7 +121,7 @@ pub fn view(state: &mut ProcessesState, cx: f32, cy: f32, cw: f32, ch: f32, root
             let list_box_x = rx + 12.0;
             let list_box_y = sec.ay();
             let list_box_w = sec.cw - 24.0;
-            let list_box_h = 220.0;
+            let list_box_h = 400.0;
             
             // Dissolved List (Phase 6v): scroll state + frame prims are app-owned. The
             // scrollable viewport starts below the header.
diff --git a/src/scroll_region.rs b/src/scroll_region.rs
index 9ae139d..c1b05fe 100644
--- a/src/scroll_region.rs
+++ b/src/scroll_region.rs
@@ -32,6 +32,9 @@ pub struct ScrollRegion {
     /// Local stand-in for the legacy global focus flag (`ScrollBox::focus()` on any press
     /// inside the frame): set on a press that hits the region, cleared on one that misses.
     pub focused: bool,
+    /// Draw the border + background plate in `push_prims`. Off = frameless: rows
+    /// sit directly on the window plate (the scrollbar still draws).
+    pub draw_frame: bool,
 }
 
 impl ScrollRegion {
@@ -52,9 +55,15 @@ impl ScrollRegion {
             drag_offset_y: 0.0,
             hovered: false,
             focused: false,
+            draw_frame: true,
         }
     }
 
+    pub fn with_frame(mut self, draw_frame: bool) -> Self {
+        self.draw_frame = draw_frame;
+        self
+    }
+
     pub fn set_rect(&mut self, x: f32, y: f32, w: f32, h: f32) {
         self.x = x;
         self.y = y;
@@ -222,25 +231,27 @@ impl ScrollRegion {
     /// The legacy frame, single-drawn: 1px rounded border (focus/hover tinted, from
     /// `List::solid_border`), inset rounded bg, then the scrollbar track and thumb ON TOP.
     pub fn push_prims(&self, pc: &mut dyn cce_ui::layout::RenderTarget) {
-        let radius = cce_ui::layout::list_corner_radius();
-        let border_color = if self.focused {
-            [0.30, 0.50, 0.32, 1.0]
-        } else if self.hovered {
-            [0.25, 0.25, 0.35, 1.0]
-        } else {
-            [0.18, 0.18, 0.24, 1.0]
-        };
-        let all = (true, true, true, true);
-        pc.rect_with_radius_corners(border_color, self.x, self.y, self.w, self.h, radius, all);
-        pc.rect_with_radius_corners(
-            cce_ui::color::list_bg_color(),
-            self.x + 1.0,
-            self.y + 1.0,
-            self.w - 2.0,
-            self.h - 2.0,
-            (radius - 1.0).max(0.0),
-            all,
-        );
+        if self.draw_frame {
+            let radius = cce_ui::layout::list_corner_radius();
+            let border_color = if self.focused {
+                [0.30, 0.50, 0.32, 1.0]
+            } else if self.hovered {
+                [0.25, 0.25, 0.35, 1.0]
+            } else {
+                [0.18, 0.18, 0.24, 1.0]
+            };
+            let all = (true, true, true, true);
+            pc.rect_with_radius_corners(border_color, self.x, self.y, self.w, self.h, radius, all);
+            pc.rect_with_radius_corners(
+                cce_ui::color::list_bg_color(),
+                self.x + 1.0,
+                self.y + 1.0,
+                self.w - 2.0,
+                self.h - 2.0,
+                (radius - 1.0).max(0.0),
+                all,
+            );
+        }
         if self.content_h > self.viewport_h {
             let (sb_x, track_y, sb_w, track_h, thumb_y, thumb_h) = self.scrollbar_geom();
             pc.rect(cce_ui::color::scrollbar_track_color(), sb_x, track_y, sb_w, track_h);