mirror of
https://codeberg.org/unspeaker/tek.git
synced 2025-12-06 19:56:42 +01:00
almost centered arranger
This commit is contained in:
parent
d3d1670af2
commit
54414e2114
2 changed files with 26 additions and 22 deletions
10
cli/tek.rs
10
cli/tek.rs
|
|
@ -43,16 +43,16 @@ pub enum TekMode {
|
|||
Sequencer,
|
||||
/// A MIDI-controlled audio sampler.
|
||||
Sampler,
|
||||
/// Sequencer and sampler together.
|
||||
/// Sequencer and sampler together.12
|
||||
Groovebox,
|
||||
/// Multi-track MIDI sequencer.
|
||||
Arranger {
|
||||
/// Number of scenes
|
||||
#[arg(short = 'y', long, default_value_t = 12)] scenes: usize,
|
||||
/// Number of tracks
|
||||
#[arg(short = 'x', long, default_value_t = 4)] tracks: usize,
|
||||
#[arg(short = 'x', long, default_value_t = 8)] tracks: usize,
|
||||
/// Width of tracks
|
||||
#[arg(short = 'w', long, default_value_t = 8)] track_width: usize,
|
||||
/// Number of scenes
|
||||
#[arg(short = 'y', long, default_value_t = 16)] scenes: usize,
|
||||
},
|
||||
/// TODO: A MIDI-controlled audio mixer
|
||||
Mixer,
|
||||
|
|
@ -177,7 +177,7 @@ pub fn main () -> Usually<()> {
|
|||
clock,
|
||||
pool: (&clip).into(),
|
||||
editor: (&clip).into(),
|
||||
selected: ArrangerSelection::Scene(4),
|
||||
selected: ArrangerSelection::Clip(0, 0),
|
||||
scenes: vec![],
|
||||
tracks: vec![],
|
||||
splits: [12, 20],
|
||||
|
|
|
|||
|
|
@ -111,9 +111,14 @@ pub(crate) const HEADER_H: u16 = 0; // 5
|
|||
pub(crate) const SCENES_W_OFFSET: u16 = 0;
|
||||
render!(TuiOut: (self: Arranger) => {
|
||||
let scenes_w = 16;
|
||||
let tracks_w = self.tracks_with_widths().last().unwrap().3 as u16;
|
||||
let row = move|h, header, cells|Fixed::y(h, Bsp::e(
|
||||
Fixed::x(scenes_w, header),
|
||||
Fixed::y(h, Fill::x(Align::x(cells)))
|
||||
Fill::x(Align::c(Fixed::xy(tracks_w, h, cells)))
|
||||
));
|
||||
let big = move|h, header, cells|Fixed::y(h, Bsp::e(
|
||||
Fill::y(Align::c(Fixed::x(scenes_w, header))),
|
||||
Fill::x(Align::c(Fixed::xy(tracks_w, h, cells)))
|
||||
));
|
||||
//let row = move|h, header, cells|Align::w(Bsp::e(
|
||||
//Align::w(Fixed::xy(scenes_w, h, header)),
|
||||
|
|
@ -126,10 +131,10 @@ render!(TuiOut: (self: Arranger) => {
|
|||
let outputs = |x|Bsp::s(row(2, self.output_row_header(), self.output_row_cells()), Fill::y(x));
|
||||
let playing = |x|Bsp::s(row(2, self.elapsed_row_header(), self.elapsed_row_cells()), Fill::y(x));
|
||||
let next = |x|Bsp::s(row(2, self.next_row_header(), self.next_row_cells()), Fill::y(x));
|
||||
let tracks = |x|Bsp::s(row(3, self.track_row_header(), self.track_row_cells()), Fill::y(x));
|
||||
let scenes = |x|Bsp::s(row(h.saturating_sub(13), self.scene_row_headers(), self.scene_row_cells()), x);
|
||||
let tracks = |x|Bsp::s(row(3, self.track_row_header(), self.track_row_cells()), Fill::y(Align::c(x)));
|
||||
let scenes = |x|Bsp::s(big(h.saturating_sub(13), self.scene_row_headers(), Tui::bg(Color::Green, self.scene_row_cells())), x);
|
||||
let inputs = |x|Bsp::n(row(2, self.input_row_header(), self.input_row_cells()), Fill::y(x));
|
||||
self.size.of(toolbar(pool(editing(inputs(outputs(playing(next(tracks(scenes(Fill::xy("")))))))))))
|
||||
self.size.of(toolbar(pool(Fill::xy(Align::c(editing(inputs(outputs(playing(next(tracks(scenes(Fill::xy("")))))))))))))
|
||||
//let enclosed = |x|Outer(Style::default().fg(Color::Rgb(72,72,72))).enclose(x);
|
||||
//.max(SCENES_W_OFFSET + ArrangerScene::longest_name(&self.scenes) as u16);
|
||||
//Bsp::s(arrrrrr, enclosed(&self.editor))
|
||||
|
|
@ -182,7 +187,7 @@ impl Arranger {
|
|||
}
|
||||
fn output_row_cells <'a> (&'a self) -> BoxThunk<'a, TuiOut> {
|
||||
//let scenes_w = 16;//.max(SCENES_W_OFFSET + ArrangerScene::longest_name(&self.scenes) as u16);
|
||||
(move||Fixed::y(2, Map::new(||self.tracks_with_widths(), move|(_, track, x1, x2), i| {
|
||||
(move||Align::x(Map::new(||self.tracks_with_widths(), move|(_, track, x1, x2), i| {
|
||||
let w = (x2 - x1) as u16;
|
||||
let color: ItemPalette = track.color().dark.into();
|
||||
let cell = Bsp::s(format!(" M S "), phat_hi(color.dark.rgb, color.darker.rgb));
|
||||
|
|
@ -194,7 +199,7 @@ impl Arranger {
|
|||
(||Tui::bold(true, Tui::fg(TuiTheme::g(128), "Playing")).boxed()).into()
|
||||
}
|
||||
fn elapsed_row_cells <'a> (&'a self) -> BoxThunk<'a, TuiOut> {
|
||||
(move||Fixed::y(2, Map::new(||self.tracks_with_widths(), move|(_, track, x1, x2), i| {
|
||||
(move||Align::x(Map::new(||self.tracks_with_widths(), move|(_, track, x1, x2), i| {
|
||||
//let color = track.color();
|
||||
let color: ItemPalette = track.color().dark.into();
|
||||
let timebase = self.clock().timebase();
|
||||
|
|
@ -215,7 +220,7 @@ impl Arranger {
|
|||
(||Tui::bold(true, Tui::fg(TuiTheme::g(128), "Next")).boxed()).into()
|
||||
}
|
||||
fn next_row_cells <'a> (&'a self) -> BoxThunk<'a, TuiOut> {
|
||||
(move||Fixed::y(2, Map::new(||self.tracks_with_widths(), move|(_, track, x1, x2), i| {
|
||||
(move||Align::x(Map::new(||self.tracks_with_widths(), move|(_, track, x1, x2), i| {
|
||||
let color: ItemPalette = track.color();
|
||||
let color: ItemPalette = track.color().dark.into();
|
||||
let cell = Self::cell_until_next(track, &self.clock().playhead);
|
||||
|
|
@ -231,20 +236,20 @@ impl Arranger {
|
|||
}
|
||||
fn track_row_cells <'a> (&'a self) -> BoxThunk<'a, TuiOut> {
|
||||
let iter = ||self.tracks_with_widths();
|
||||
(move||Fixed::y(2, Map::new(iter, move|(_, track, x1, x2), i| {
|
||||
(move||Align::x(Map::new(iter, move|(_, track, x1, x2), i| {
|
||||
let color = track.color();
|
||||
let name = Push::x(1, &track.name);
|
||||
Tui::bg(color.base.rgb, map_east(x1 as u16, (x2 - x1) as u16,
|
||||
Tui::fg_bg(color.lightest.rgb, color.base.rgb,
|
||||
phat_cell(color, color.darkest.rgb.into(),
|
||||
Tui::bold(true, name))))) })).boxed()).into()
|
||||
//phat_cell(color, color.darkest.rgb.into(),
|
||||
Tui::bold(true, Fill::x(Align::x(name)))))) })).boxed()).into()
|
||||
}
|
||||
|
||||
fn input_row_header <'a> (&'a self) -> BoxThunk<'a, TuiOut> {
|
||||
(||Fill::x(Tui::bold(true, Tui::fg_bg(TuiTheme::g(0), TuiTheme::g(200), "[ ] In 1: Korg"))).boxed()).into()
|
||||
}
|
||||
fn input_row_cells <'a> (&'a self) -> BoxThunk<'a, TuiOut> {
|
||||
(move||Fixed::y(2, Map::new(||self.tracks_with_widths(), move|(_, track, x1, x2), i| {
|
||||
(move||Align::x(Map::new(||self.tracks_with_widths(), move|(_, track, x1, x2), i| {
|
||||
let w = (x2 - x1) as u16;
|
||||
let cell = Bsp::s("[Rec]", "[Mon]");
|
||||
let color: ItemPalette = track.color().dark.into();
|
||||
|
|
@ -260,7 +265,7 @@ impl Arranger {
|
|||
ArrangerSelection::Scene(s) => Some(s),
|
||||
_ => None
|
||||
};
|
||||
Tui::bg(Color::Rgb(0,0,0), Fill::y(Map::new(
|
||||
Tui::bg(Color::Reset, Fill::y(Map::new(
|
||||
||self.scenes_with_heights(2),
|
||||
move|(_, scene, y1, y2), i| {
|
||||
let h = (y2 - y1) as u16;
|
||||
|
|
@ -296,9 +301,8 @@ impl Arranger {
|
|||
};
|
||||
let tracks = move||self.tracks_with_widths();
|
||||
let scenes = ||self.scenes_with_heights(2);
|
||||
(move||Fixed::y(2, Map::new(tracks, move|(_, track, x1, x2), t| {
|
||||
let w = (x2 - x1) as u16;
|
||||
let cell = Bsp::s("[Rec]", "[Mon]");
|
||||
(move||Align::x(Map::new(tracks, move|(_, track, x1, x2), t| {
|
||||
let w = (x2 - x1) as u16;
|
||||
let color: ItemPalette = track.color().dark.into();
|
||||
let last_color = Arc::new(RwLock::new(ItemPalette::from(Color::Rgb(0, 0, 0))));
|
||||
let cells = Map::new(scenes, move|(_, scene, y1, y2), s| {
|
||||
|
|
@ -318,7 +322,7 @@ impl Arranger {
|
|||
//TuiTheme::g(32).into(),
|
||||
//TuiTheme::g(32).into(),
|
||||
//);
|
||||
let active = editing && selected_track == Some(t) && selected_scene == Some(s);
|
||||
let active = editing && selected_scene == Some(s) && selected_track == Some(t);
|
||||
let editor = Thunk::new(||&self.editor);
|
||||
let cell = Thunk::new(move||phat_sel_3(
|
||||
selected_track == Some(t) && selected_scene == Some(s),
|
||||
|
|
@ -342,7 +346,7 @@ impl Arranger {
|
|||
map_east(
|
||||
x1 as u16,
|
||||
w,
|
||||
Fixed::x(w, Tui::bg(Color::Rgb(0,0,0), Fill::y(cells)).boxed())
|
||||
Fixed::x(w, Tui::bg(Color::Reset, Fill::y(cells)).boxed())
|
||||
)
|
||||
})).boxed()).into()
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue