diff --git a/crates/tek_sequencer/src/arranger_tui.rs b/crates/tek_sequencer/src/arranger_tui.rs index fde56abc..d255cc91 100644 --- a/crates/tek_sequencer/src/arranger_tui.rs +++ b/crates/tek_sequencer/src/arranger_tui.rs @@ -118,19 +118,19 @@ impl<'a> Content for VerticalArranger<'a, Tui> { type Engine = Tui; fn content (&self) -> impl Widget { let Self(state, factor) = self; - let cols = state.track_widths(); - let rows = Scene::ppqs(state.scenes.as_slice(), *factor); - let tracks = state.tracks.as_ref() as &[ArrangementTrack]; - let scenes = state.scenes.as_ref(); - let offset = 3 + Scene::longest_name(scenes) as u16; // x of 1st track - let bg = state.color; - let clip_bg = Color::Rgb(40, 50, 30); - let border_bg = Color::Rgb(40, 50, 30); - let border_hi = Color::Rgb(100, 110, 40); - let border_lo = Color::Rgb(70, 80, 50); - let border_fg = if self.0.focused { border_hi } else { border_lo }; - let border = Lozenge(Style::default().bg(border_bg).fg(border_fg)); - let title_h = 3u16; + let cols = state.track_widths(); + let rows = Scene::ppqs(state.scenes.as_slice(), *factor); + let tracks = state.tracks.as_ref() as &[ArrangementTrack]; + let scenes = state.scenes.as_ref(); + let bg = state.color; + let clip_bg = Color::Rgb(40, 50, 30); + let border_bg = Color::Rgb(40, 50, 30); + let border_hi = Color::Rgb(100, 110, 40); + let border_lo = Color::Rgb(70, 80, 50); + let border_fg = if self.0.focused { border_hi } else { border_lo }; + let border = Lozenge(Style::default().bg(border_bg).fg(border_fg)); + let track_title_h = 3u16; + let scene_title_w = 3 + Scene::longest_name(scenes) as u16; // x of 1st track Layers::new(move |add|{ let rows: &[(usize, usize)] = rows.as_ref(); let cols: &[(usize, usize)] = cols.as_ref(); @@ -140,7 +140,7 @@ impl<'a> Content for VerticalArranger<'a, Tui> { let area = to.area(); let style = Some(Style::default().fg(COLOR_SEPARATOR)); for x in cols.iter().map(|col|col.1) { - let x = offset + area.x() + x as u16 - 1; + let x = scene_title_w + area.x() + x as u16; for y in area.y()..area.y2() { to.blit(&"▎", x, y, style); } } Ok(()) @@ -180,16 +180,16 @@ impl<'a> Content for VerticalArranger<'a, Tui> { .map(|(t, _)|format!("▎{:>}", clock.format_beats(t.load(Ordering::Relaxed)))) .unwrap_or(String::from("▎")); col!(name, elapsed, until_next) - .min_xy(w as u16, title_h) + .min_xy(w as u16, track_title_h) .bg(track.color) - .push_x(offset - 1) + .push_x(scene_title_w) }); // scene titles let scene_name = |scene, playing: bool, height|row!( if playing { "▶ " } else { " " }, TuiStyle::bold((scene as &Scene).name.read().unwrap().as_str(), true), - ).fixed_xy(offset.saturating_sub(1), height); + ).fixed_xy(scene_title_w, height); // scene clips let scene_clip = |scene, track: usize, w: u16, h: u16|Layers::new(move |add|{ @@ -230,20 +230,20 @@ impl<'a> Content for VerticalArranger<'a, Tui> { let focused = state.focused; let selected = state.selected; let get_track_area = |t: usize| [ - offset + area.x() + cols[t].1 as u16 - 1, + scene_title_w + area.x() + cols[t].1 as u16, area.y(), cols[t].0 as u16, area.h(), ]; let get_scene_area = |s: usize| [ area.x(), - title_h + area.y() + (rows[s].1 / PPQ) as u16, + track_title_h + area.y() + (rows[s].1 / PPQ) as u16, area.w(), (rows[s].0 / PPQ) as u16 ]; let get_clip_area = |t: usize, s: usize| [ - offset+area.x()+cols[t].1 as u16 - 1, - title_h + area.y() + (rows[s].1/PPQ) as u16, + scene_title_w + area.x() + cols[t].1 as u16, + track_title_h + area.y() + (rows[s].1/PPQ) as u16, cols[t].0 as u16, (rows[s].0 / PPQ) as u16 ]; @@ -277,13 +277,13 @@ impl<'a> Content for VerticalArranger<'a, Tui> { to.render_in(clip_area, &CORNERS)?; //to.fill_bg(clip_area, Color::Rgb(40, 50, 30)); } else if let Some(track_area) = track_area { - to.render_in(track_area.clip_h(2), &CORNERS)?; + to.render_in(track_area.clip_h(track_title_h), &CORNERS)?; //to.fill_bg(track_area, Color::Rgb(40, 50, 30)); } else if let Some(scene_area) = scene_area { - to.render_in(scene_area.clip_w(offset-1), &CORNERS)?; + to.render_in(scene_area.clip_w(scene_title_w), &CORNERS)?; //to.fill_bg(scene_area, Color::Rgb(40, 50, 30)); } else { - to.render_in(area.clip_w(offset-1).clip_h(2), &CORNERS)?; + to.render_in(area.clip_w(scene_title_w).clip_h(track_title_h), &CORNERS)?; } } Ok(()) diff --git a/crates/tek_sequencer/src/sequencer_tui.rs b/crates/tek_sequencer/src/sequencer_tui.rs index 5ad61980..730b7c20 100644 --- a/crates/tek_sequencer/src/sequencer_tui.rs +++ b/crates/tek_sequencer/src/sequencer_tui.rs @@ -31,6 +31,7 @@ impl Content for PhrasePool { if let Some(PhrasePoolMode::Rename(phrase, _)) = mode { if *focused && i == *phrase { row2 = format!("{row2}▄"); } }; + let row2 = TuiStyle::bold(row2, true); let bg = if i == self.phrase { color } else { color }; add(&col!(row1, row2).fill_x().bg(bg))?; if *focused && i == self.phrase { add(&CORNERS)?; }