From 1ce5ab6f272739bd6d0ff743e6d5fa1ba0855f75 Mon Sep 17 00:00:00 2001 From: unspeaker Date: Mon, 28 Oct 2024 20:36:39 +0200 Subject: [PATCH] vertical scroll sequencer, pt.2 --- crates/tek_sequencer/src/sequencer_cmd.rs | 22 +++++++++++++++++++--- crates/tek_sequencer/src/sequencer_tui.rs | 2 +- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/crates/tek_sequencer/src/sequencer_cmd.rs b/crates/tek_sequencer/src/sequencer_cmd.rs index 8a058b1e..f9309de9 100644 --- a/crates/tek_sequencer/src/sequencer_cmd.rs +++ b/crates/tek_sequencer/src/sequencer_cmd.rs @@ -90,10 +90,26 @@ impl Handle for PhraseEditor { key!(KeyCode::Char('`')) => { self.mode = !self.mode; }, key!(KeyCode::Enter) => { self.entered = true; }, key!(KeyCode::Esc) => { self.entered = false; }, - key!(KeyCode::PageUp) => { self.note_axis.write().unwrap().start_dec(3); }, - key!(KeyCode::PageDown) => { self.note_axis.write().unwrap().start_inc(3); }, + key!(KeyCode::PageUp) => { + let mut axis = self.note_axis.write().unwrap(); + axis.start_dec(3); + axis.point_dec(3); + }, + key!(KeyCode::PageDown) => { + let mut axis = self.note_axis.write().unwrap(); + axis.start_inc(3); + axis.point_inc(3); + }, key!(KeyCode::Up) => match self.entered { - true => { self.note_axis.write().unwrap().point_dec(1); }, + true => { + let mut axis = self.note_axis.write().unwrap(); + axis.point_dec(1); + if let Some(point) = axis.point { + if point < axis.start { + axis.start = point; + } + } + }, false => { self.note_axis.write().unwrap().start_dec(1); }, }, key!(KeyCode::Down) => match self.entered { diff --git a/crates/tek_sequencer/src/sequencer_tui.rs b/crates/tek_sequencer/src/sequencer_tui.rs index 5e021ac5..bb633a71 100644 --- a/crates/tek_sequencer/src/sequencer_tui.rs +++ b/crates/tek_sequencer/src/sequencer_tui.rs @@ -105,7 +105,7 @@ impl Content for PhraseEditor { if let (Some(time), Some(note)) = (time_point, note_point) { let x1 = area.x() + (time / time_scale) as u16; let x2 = x1 + (self.note_len / time_scale) as u16; - let y = area.y() + note as u16 / 2; + let y = area.y() + note.saturating_sub(note_start) as u16 / 2; let c = if note % 2 == 0 { "▀" } else { "▄" }; for x in x1..x2 { to.blit(&c, x, y, Some(Style::default().fg(color)));