From 61c84ac0300761983fa4d0dcce96929fd692e833 Mon Sep 17 00:00:00 2001 From: unspeaker Date: Sat, 20 Jul 2024 20:22:56 +0300 Subject: [PATCH] replace existing samples; dont crash on small screen --- src/devices/arranger.rs | 3 +++ src/devices/sampler.rs | 16 +++++++++++----- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/src/devices/arranger.rs b/src/devices/arranger.rs index b6375b20..478d0fd5 100644 --- a/src/devices/arranger.rs +++ b/src/devices/arranger.rs @@ -185,6 +185,9 @@ mod draw_vertical { move |buf: &mut Buffer, area: Rect| { for (_, y) in rows.iter() { let y = area.y + (*y / 96) as u16 + 1; + if y >= buf.area.height { + break + } for x in area.x..area.width+area.y-2 { let cell = buf.get_mut(x, y); cell.modifier = Modifier::UNDERLINED; diff --git a/src/devices/sampler.rs b/src/devices/sampler.rs index 4f8653c7..963c292f 100644 --- a/src/devices/sampler.rs +++ b/src/devices/sampler.rs @@ -61,7 +61,7 @@ handle!(Sampler |self, event| handle_keymap(self, event, KEYMAP_SAMPLER)); /// Key bindings for sampler device. pub const KEYMAP_SAMPLER: &'static [KeyBinding] = keymap!(Sampler { - [Up, NONE, "cursor_up", "move cursor up", |state: &mut Sampler| { + [Up, NONE, "cursor_up", "move cursor up", |state: &mut Sampler| { state.cursor.0 = if state.cursor.0 == 0 { state.mapped.len() + state.unmapped.len() - 1 } else { @@ -69,23 +69,29 @@ pub const KEYMAP_SAMPLER: &'static [KeyBinding] = keymap!(Sampler { }; Ok(true) }], - [Down, NONE, "cursor_down", "move cursor down", |state: &mut Sampler| { + [Down, NONE, "cursor_down", "move cursor down", |state: &mut Sampler| { state.cursor.0 = (state.cursor.0 + 1) % (state.mapped.len() + state.unmapped.len()); Ok(true) }], - [Char('t'), NONE, "sample_play", "play current sample", |state: &mut Sampler| { + [Char('t'), NONE, "sample_play", "play current sample", |state: &mut Sampler| { if let Some(sample) = state.sample() { state.voices.push(Sample::play(sample, 0, &100.into())) } Ok(true) }], - [Char('a'), NONE, "sample_add", "add a new sample", |state: &mut Sampler| { + [Char('a'), NONE, "sample_add", "add a new sample", |state: &mut Sampler| { let sample = Sample::new("", 0, 0, vec![]); *MODAL.lock().unwrap() = Some(Exit::boxed(AddSampleModal::new(&sample)?)); state.unmapped.push(sample); Ok(true) }], - [Enter, NONE, "sample_edit", "edit selected sample", |state: &mut Sampler| { + [Char('r'), NONE, "sample_replace", "replace selected sample", |state: &mut Sampler| { + if let Some(sample) = state.sample() { + *MODAL.lock().unwrap() = Some(Exit::boxed(AddSampleModal::new(&sample)?)); + } + Ok(true) + }], + [Enter, NONE, "sample_edit", "edit selected sample", |state: &mut Sampler| { if let Some(sample) = state.sample() { state.editing = Some(sample.clone()); }