From d1fb0ca78a2af63e246b84fd1beec8570327576c Mon Sep 17 00:00:00 2001 From: electria Date: Sun, 16 Aug 2026 18:39:25 -0700 Subject: [PATCH 1/4] refactor: replace for with for_each --- src/app/mod.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/app/mod.rs b/src/app/mod.rs index 34d2e37..57aec5d 100644 --- a/src/app/mod.rs +++ b/src/app/mod.rs @@ -75,10 +75,10 @@ impl State { .map(|value| Graph::new(value)) .collect(); } else { - for (graph, value) in self.cpu_graphs.iter_mut().zip(snapshot.cpus.into_iter()) - { - graph.update(value); - } + self.cpu_graphs + .iter_mut() + .zip(snapshot.cpus.into_iter()) + .for_each(|(graph, value)| graph.update(value)); } } } From d3f94b4acccbdb1c3db67610f032473dcd4c2b30 Mon Sep 17 00:00:00 2001 From: electria Date: Sun, 16 Aug 2026 20:34:21 -0700 Subject: [PATCH 2/4] fix: improve anti-clipping for graphs --- src/app/graph.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/app/graph.rs b/src/app/graph.rs index 5b93a80..f370cfa 100644 --- a/src/app/graph.rs +++ b/src/app/graph.rs @@ -55,7 +55,8 @@ impl canvas::Program for Graph { &canvas::Path::new(|builder| { for (index, value) in self.timeline.iter().enumerate() { let x = index as f32 / self.timeline.len() as f32 * bounds.width; - let y = bounds.height - value / 100. * bounds.height - 1.; + let y = (bounds.height - value / 100. * bounds.height) + .clamp(1., bounds.height - 1.); builder.line_to(Point::new(x, y)) } }), From cb2461b64f748c07f8e1cfd7538c8694914c8ed4 Mon Sep 17 00:00:00 2001 From: electria Date: Sun, 16 Aug 2026 21:02:56 -0700 Subject: [PATCH 3/4] feat: hide borders when only main graph is shown --- src/app/graph.rs | 24 ++++++++++++++++++------ src/app/mod.rs | 20 +++++++++++++++++--- 2 files changed, 35 insertions(+), 9 deletions(-) diff --git a/src/app/graph.rs b/src/app/graph.rs index f370cfa..5dea431 100644 --- a/src/app/graph.rs +++ b/src/app/graph.rs @@ -6,12 +6,22 @@ use crate::app; const CYAN: Color = Color::from_rgb8(0, 255, 255); -#[derive(Default)] pub struct Graph { timeline: VecDeque, + pub show_borders: bool, pub cache: canvas::Cache, } +impl Default for Graph { + fn default() -> Self { + Self { + show_borders: true, + + timeline: Default::default(), + cache: Default::default(), + } + } +} impl Graph { pub fn new(value: f32) -> Self { @@ -46,11 +56,13 @@ impl canvas::Program for Graph { _cursor: mouse::Cursor, ) -> Vec> { let geometry = self.cache.draw(renderer, bounds.size(), |frame| { - frame.stroke_rectangle( - Point::new(0., 0.), - bounds.size(), - canvas::Stroke::default().with_color(Color::from_rgb8(255, 0, 0)), - ); + if self.show_borders { + frame.stroke_rectangle( + Point::new(0., 0.), + bounds.size(), + canvas::Stroke::default().with_color(Color::from_rgb8(255, 0, 0)), + ); + } frame.stroke( &canvas::Path::new(|builder| { for (index, value) in self.timeline.iter().enumerate() { diff --git a/src/app/mod.rs b/src/app/mod.rs index 57aec5d..c46d289 100644 --- a/src/app/mod.rs +++ b/src/app/mod.rs @@ -53,9 +53,18 @@ impl State { } fn update(&mut self, message: Message) -> Task { match message { - Message::ToggleMain => self.is_main_section_shown.toggle(), - Message::ToggleCpu => self.is_cpu_section_shown.toggle(), - Message::ToggleMemory => self.is_memory_section_shown.toggle(), + Message::ToggleMain => { + self.is_main_section_shown.toggle(); + self.check_borders(); + } + Message::ToggleCpu => { + self.is_cpu_section_shown.toggle(); + self.check_borders(); + } + Message::ToggleMemory => { + self.is_memory_section_shown.toggle(); + self.check_borders(); + } Message::Info(snapshot) => { self.uptime = snapshot.uptime(); @@ -140,6 +149,11 @@ impl State { fn title(&self) -> String { format!("itop {:?}", self.uptime) } + + fn check_borders(&mut self) { + self.total_cpu_graph.show_borders = + self.is_cpu_section_shown || self.is_memory_section_shown; + } } pub fn run() -> Result<(), Error> { From 5acc09b471988f0b90613ac89e282c67a9a15086 Mon Sep 17 00:00:00 2001 From: electria Date: Sun, 16 Aug 2026 21:10:44 -0700 Subject: [PATCH 4/4] build: improve server-only derivation --- flake.nix | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/flake.nix b/flake.nix index d37cbd5..a7a47ea 100644 --- a/flake.nix +++ b/flake.nix @@ -89,10 +89,11 @@ { packages.default = crate; - packages.server-only = craneLib.buildPackage { - name = name + "-server-only"; + packages."${name}-server-only" = craneLib.buildPackage { + name = "${name}-server-only"; src = ./.; - cargoExtraArgs = "--no-default-features"; + doCheck = false; + cargoExtraArgs = "--locked --no-default-features"; }; checks = {