implementing Fixed constraint

This commit is contained in:
🪞👃🪞 2024-09-12 20:19:07 +03:00
parent a57bb60ac9
commit 4b19abd98a
4 changed files with 66 additions and 10 deletions

View file

@ -379,7 +379,7 @@ impl<'a, 'b> Content for ArrangerViewVertical<'a, 'b, Tui> {
add(&ColumnSeparators(offset, cols))?;
add(&RowSeparators(rows))?;
add(&CursorFocus(state.selected, offset, cols, rows))?;
add(&Split::right(|add|{
add(&Split::down(|add|{
add(&TracksHeader(offset, cols, tracks))?;
add(&SceneRows(offset, cols, rows, tracks, scenes))
}))
@ -496,7 +496,9 @@ impl<'a> Widget for CursorFocus<'a> {
}
}
struct TracksHeader<'a>(u16, &'a[(usize, usize)], &'a [Sequencer<Tui>]);
struct TracksHeader<'a>(
u16, &'a[(usize, usize)], &'a [Sequencer<Tui>]
);
impl<'a> Content for TracksHeader<'a> {
type Engine = Tui;
@ -514,22 +516,28 @@ impl<'a> Content for TracksHeader<'a> {
}
}
struct SceneRows<'a>(u16, &'a[(usize, usize)], &'a[(usize, usize)], &'a[Sequencer<Tui>], &'a[Scene]);
struct SceneRows<'a>(
u16, &'a[(usize, usize)], &'a[(usize, usize)], &'a[Sequencer<Tui>], &'a[Scene]
);
impl<'a> Content for SceneRows<'a> {
type Engine = Tui;
fn content (&self) -> impl Widget<Engine = Tui> {
let Self(offset, columns, rows, tracks, scenes) = *self;
Split::down(move |add| {
for (scene, (_pulses, _)) in scenes.iter().zip(rows) {
add(&SceneRow(tracks, scene, columns, offset))?;
for (scene, (pulses, _)) in scenes.iter().zip(rows) {
add(&Fixed::H(1.max((pulses / 96) as u16), SceneRow(
tracks, scene, columns, offset
)))?;
}
Ok(())
})
}
}
struct SceneRow<'a>(&'a[Sequencer<Tui>], &'a Scene, &'a[(usize, usize)], u16);
struct SceneRow<'a>(
&'a[Sequencer<Tui>], &'a Scene, &'a[(usize, usize)], u16
);
impl<'a> Content for SceneRow<'a> {
type Engine = Tui;
@ -538,8 +546,10 @@ impl<'a> Content for SceneRow<'a> {
let playing = scene.is_playing(tracks);
Split::right(move |add| {
add(&Layers::new(|add|{
add(&if playing { "" } else { " " })?;
add(&scene.name.read().unwrap().as_str())?;
add(&Split::right(|add|{
add(&if playing { "" } else { " " })?;
add(&scene.name.read().unwrap().as_str())
}))?;
add(&FillBg(COLOR_BG1))
}))?;
for (track, (_w, _x)) in columns.iter().enumerate() {