From 3a4f069aa6c2cbec2401369ceda369d0c17aecf2 Mon Sep 17 00:00:00 2001 From: unspeaker Date: Mon, 23 Dec 2024 20:00:17 +0100 Subject: [PATCH] fix arranger cursor width --- crates/tek/src/cli/cli_arranger.rs | 5 +---- crates/tek/src/tui/arranger_mode_v.rs | 22 +++++++++++++--------- 2 files changed, 14 insertions(+), 13 deletions(-) diff --git a/crates/tek/src/cli/cli_arranger.rs b/crates/tek/src/cli/cli_arranger.rs index 95ad7f32..509edab8 100644 --- a/crates/tek/src/cli/cli_arranger.rs +++ b/crates/tek/src/cli/cli_arranger.rs @@ -10,16 +10,13 @@ pub fn main () -> Usually<()> { pub struct ArrangerCli { /// Name of JACK client #[arg(short, long)] - name: Option, - + name: Option, /// Whether to include a transport toolbar (default: true) #[arg(short, long, default_value_t = true)] transport: bool, - /// Number of tracks #[arg(short = 'x', long, default_value_t = 4)] tracks: usize, - /// Number of scenes #[arg(short, long, default_value_t = 8)] scenes: usize, diff --git a/crates/tek/src/tui/arranger_mode_v.rs b/crates/tek/src/tui/arranger_mode_v.rs index 8a17ccf1..b862e3ab 100644 --- a/crates/tek/src/tui/arranger_mode_v.rs +++ b/crates/tek/src/tui/arranger_mode_v.rs @@ -1,11 +1,15 @@ use crate::*; -const HEADER_H: u16 = 3; +const HEADER_H: u16 = 5; const SCENES_W_OFFSET: u16 = 3; impl ArrangerTui { pub fn render_mode_v (state: &ArrangerTui, factor: usize) -> impl Render + use<'_> { lay!([ - ArrangerVColSep::from(state), ArrangerVRowSep::from((state, factor)), - col!([ArrangerVHead::from(state), ArrangerVBody::from((state, factor))]), + ArrangerVColSep::from(state), + ArrangerVRowSep::from((state, factor)), + col!([ + ArrangerVHead::from(state), + ArrangerVClips::from((state, factor)) + ]), ArrangerVCursor::from((state, factor)), ]) } @@ -172,8 +176,8 @@ render!(|self: ArrangerVCursor|render(move|to: &mut TuiOutput|{ to.fill_fg([x + width, y, 1, height], bg); } if let Some([_, y, _, height]) = scene_area { - to.fill_ul([area.x(), y - 1, area.w(), 1], bg); - to.fill_ul([area.x(), y + height - 1, area.w(), 1], bg); + to.fill_ul([area.x(), y - 1, area.w() + self.scenes_w, 1], bg); + to.fill_ul([area.x(), y + height - 1, area.w() + self.scenes_w, 1], bg); } Ok(if focused { to.render_in(if let Some(clip_area) = clip_area { clip_area } @@ -182,25 +186,25 @@ render!(|self: ArrangerVCursor|render(move|to: &mut TuiOutput|{ else { area.clip_w(self.scenes_w).clip_h(HEADER_H) }, &RETICLE)? }) })); -pub struct ArrangerVBody<'a> { +pub struct ArrangerVClips<'a> { size: &'a Measure, scenes: &'a Vec, tracks: &'a Vec, rows: Vec<(usize, usize)>, } -from!(<'a>|args:(&'a ArrangerTui, usize)|ArrangerVBody<'a> = Self { +from!(<'a>|args:(&'a ArrangerTui, usize)|ArrangerVClips<'a> = Self { size: &args.0.size, scenes: &args.0.scenes, tracks: &args.0.tracks, rows: ArrangerScene::ppqs(args.0.scenes(), args.1), }); -render!(|self: ArrangerVBody<'a>|Fixed::h( +render!(|self: ArrangerVClips<'a>|Fixed::h( (self.size.h() as u16).saturating_sub(HEADER_H), col!((scene, pulses) in self.scenes.iter().zip(self.rows.iter().map(|row|row.0)) => { Self::format_scene(&self.tracks, scene, pulses) }) )); -impl<'a> ArrangerVBody<'a> { +impl<'a> ArrangerVClips<'a> { fn format_scene ( tracks: &'a [ArrangerTrack], scene: &'a ArrangerScene, pulses: usize ) -> impl Render + use<'a> {