From c88cb86532d65d659d45cdda002a0613c32bb69f Mon Sep 17 00:00:00 2001 From: unspeaker Date: Tue, 22 Oct 2024 23:27:26 +0300 Subject: [PATCH] scale and highlight playhead properly --- crates/tek_sequencer/src/sequencer.rs | 2 +- crates/tek_sequencer/src/sequencer_tui.rs | 24 ++++++++++++----------- 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/crates/tek_sequencer/src/sequencer.rs b/crates/tek_sequencer/src/sequencer.rs index 8fc79126..3a235392 100644 --- a/crates/tek_sequencer/src/sequencer.rs +++ b/crates/tek_sequencer/src/sequencer.rs @@ -230,7 +230,7 @@ impl PhraseEditor { keys: keys_vert(), buffer: Default::default(), note_axis: FixedAxis { start: 12, point: Some(36), clamp: Some(127) }, - time_axis: ScaledAxis { start: 0, point: Some(0), clamp: Some(0), scale: 24 }, + time_axis: ScaledAxis { start: 00, point: Some(00), clamp: Some(000), scale: 24 }, focused: false, entered: false, mode: false, diff --git a/crates/tek_sequencer/src/sequencer_tui.rs b/crates/tek_sequencer/src/sequencer_tui.rs index 10465187..e7198092 100644 --- a/crates/tek_sequencer/src/sequencer_tui.rs +++ b/crates/tek_sequencer/src/sequencer_tui.rs @@ -97,22 +97,22 @@ impl Content for PhraseEditor { Ok(()) }); let playhead_inactive = Style::default().fg(Color::Rgb(255,255,255)).bg(Color::Rgb(0,0,0)); - let playhead_active = playhead_inactive.yellow().bold().not_dim(); + let playhead_active = playhead_inactive.clone().yellow().bold().not_dim(); let playhead = CustomWidget::new( |to:[u16;2]|Ok(Some(to.clip_h(1))), move|to: &mut TuiOutput|{ if let Some(_) = phrase { let now = 0; // TODO FIXME: self.now % phrase.read().unwrap().length; - let ScaledAxis { start: first_beat, scale: time_zoom, .. } = time_axis; - for x in 0..10 { - let this_step = (first_beat + 0) * time_zoom; - let next_step = (first_beat + 1) * time_zoom; - let x = to.area().x() + x; - to.blit(&"-", x, to.area.y(), Some(if this_step <= now && now < next_step { - playhead_active - } else { - playhead_active - })); + let ScaledAxis { start: first_beat, scale: time_zoom, clamp, .. } = time_axis; + let clamp = clamp.expect("time_axis of sequencer expected to be clamped"); + for x in 0..clamp/time_zoom { + let this_step = (x * time_zoom + first_beat + 0) * time_zoom; + let next_step = (x * time_zoom + first_beat + 1) * time_zoom; + let x = to.area().x() + x as u16; + let active = this_step <= now && now < next_step; + let character = if active { "|" } else { "ยท" }; + let style = if active { playhead_active } else { playhead_inactive }; + to.blit(&character, x, to.area.y(), Some(style)); } } Ok(()) @@ -169,9 +169,11 @@ impl PhraseEditor { pub fn show (&mut self, phrase: Option<&Arc>>) { if let Some(phrase) = phrase { self.phrase = Some(phrase.clone()); + self.time_axis.clamp = Some(phrase.read().unwrap().length); self.buffer = Self::redraw(&*phrase.read().unwrap()); } else { self.phrase = None; + self.time_axis.clamp = Some(0); self.buffer = Default::default(); } }