fix arranger cursor width

This commit is contained in:
🪞👃🪞 2024-12-23 20:00:17 +01:00
parent 2b08738992
commit 3a4f069aa6
2 changed files with 14 additions and 13 deletions

View file

@ -10,16 +10,13 @@ pub fn main () -> Usually<()> {
pub struct ArrangerCli {
/// Name of JACK client
#[arg(short, long)]
name: Option<String>,
name: Option<String>,
/// 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,

View file

@ -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<Tui> + 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!(<Tui>|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!(<Tui>|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<Tui>,
scenes: &'a Vec<ArrangerScene>,
tracks: &'a Vec<ArrangerTrack>,
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!(<Tui>|self: ArrangerVBody<'a>|Fixed::h(
render!(<Tui>|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<Tui> + use<'a> {