From 0ede0749f89e413d765e503725f119714724f75a Mon Sep 17 00:00:00 2001 From: Dukantic Date: Wed, 9 Jul 2025 09:33:26 +0200 Subject: [PATCH] add remove point --- src/main.rs | 7 ++++++- src/music.rs | 17 +++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/src/main.rs b/src/main.rs index 5a1aa50..308637b 100644 --- a/src/main.rs +++ b/src/main.rs @@ -57,6 +57,7 @@ enum Message { LengthChange(String), ChangeDelta(f32), AddPoint, + RemovePoint, } struct MyApp { @@ -173,6 +174,9 @@ impl MyApp { Message::AddPoint => { self.music.add_point(self.current_delta); } + Message::RemovePoint => { + self.music.remove_point(self.current_delta); + } } } @@ -315,7 +319,8 @@ impl MyApp { delta_to_string(self.music.length) )) .size(20.0), - button("Add Point").on_press(Message::AddPoint) + button("Add Point").on_press(Message::AddPoint), + button("Remove Point").on_press(Message::RemovePoint), ] .spacing(20), column![ diff --git a/src/music.rs b/src/music.rs index 8645df2..0e431c7 100644 --- a/src/music.rs +++ b/src/music.rs @@ -35,6 +35,17 @@ impl Music { &mut self.poly_frame.last_mut().unwrap().1 } } + fn find_index_frame(&mut self, delta: f32) -> usize { + if let Some(i) = self + .poly_frame + .windows(2) + .position(|w| w[0].0 <= delta && delta < w[1].0) + { + i + } else { + self.poly_frame.len() - 1 + } + } // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~PUBLIC~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ pub fn current_frame(&self, delta: f32) -> &PolygonFrame { if let Some(i) = self @@ -121,6 +132,12 @@ impl Music { self.poly_frame .insert(pos, (delta, self.current_frame(delta).clone())); } + pub fn remove_point(&mut self, delta: f32) { + let i = self.find_index_frame(delta); + if i != 0 { + self.poly_frame.remove(i); + } + } pub fn add_polygon(&mut self, delta: f32, polygon_name: String) { let current_frame = self.find_poly_frame(delta);