pass size

This commit is contained in:
🪞👃🪞 2024-12-10 16:38:59 +01:00
parent 0bd8df1e57
commit 5828214c6f
4 changed files with 58 additions and 57 deletions

View file

@ -99,34 +99,33 @@ impl Audio for SequencerTui {
} }
} }
render!(|self: SequencerTui|{ render!(|self: SequencerTui|lay!([
//col_up!([ self.size,
//Tui::max_y(2, SequencerStatusBar::from(self)), col!([
col!([ TransportView::from((self, if let SequencerFocus::Transport(_) = self.focus.inner() {
TransportView::from((self, if let SequencerFocus::Transport(_) = self.focus.inner() { true
true } else {
} else { false
false })),
})), row!([
row!([ Tui::fixed_x(20, col!([
Tui::fixed_x(20, col!([ PhraseSelector::play_phrase(
PhraseSelector::play_phrase( &self.player,
&self.player, self.focused() == SequencerFocus::PhrasePlay,
self.focused() == SequencerFocus::PhrasePlay, self.entered()
self.entered() ),
), PhraseSelector::next_phrase(
PhraseSelector::next_phrase( &self.player,
&self.player, self.focused() == SequencerFocus::PhraseNext,
self.focused() == SequencerFocus::PhraseNext, self.entered()
self.entered() ),
), PhraseListView::from(self)
PhraseListView::from(self) ])),
])), PhraseView::from(self)
PhraseView::from(self)
])
]) ])
//]) ]),
}); Tui::fill_xy(Tui::at_s(SequencerStatusBar::from(self))),
]));
impl HasClock for SequencerTui { impl HasClock for SequencerTui {
fn clock (&self) -> &ClockModel { fn clock (&self) -> &ClockModel {
@ -308,21 +307,17 @@ impl From<&SequencerTui> for SequencerStatusBar {
} }
render!(|self: SequencerStatusBar|{ render!(|self: SequencerStatusBar|{
lay!(|add|if self.width > 60 { lay!(|add|if self.width > 60 {
add(&row!(![ add(&row!(![
SequencerMode::from(self), SequencerMode::from(self),
SequencerStats::from(self), SequencerStats::from(self),
])) ]))
} else if self.width > 0 { } else {
add(&col!(![ add(&col!(![
SequencerMode::from(self), SequencerMode::from(self),
SequencerStats::from(self), SequencerStats::from(self),
])) ]))
} else {
Ok(())
}) })
}); });
struct SequencerMode { struct SequencerMode {
@ -339,14 +334,15 @@ impl From<&SequencerStatusBar> for SequencerMode {
} }
render!(|self:SequencerMode|{ render!(|self:SequencerMode|{
let orange = Color::Rgb(255,128,0); let orange = Color::Rgb(255,128,0);
let light = Color::Rgb(100,100,100); let light = Color::Rgb(50,50,50);
let white = Color::Rgb(255,255,255);
let yellow = Color::Rgb(255,255,0); let yellow = Color::Rgb(255,255,0);
let black = Color::Rgb(0,0,0); let black = Color::Rgb(0,0,0);
row!([ row!([
Tui::bg(orange, Tui::fg(black, Tui::bold(true, self.mode))), Tui::bg(orange, Tui::fg(black, Tui::bold(true, self.mode))),
Tui::bg(light, row!((prefix, hotkey, suffix) in self.help.iter() => { Tui::bg(light, Tui::fg(white, row!((prefix, hotkey, suffix) in self.help.iter() => {
row!([" ", prefix, Tui::fg(yellow, *hotkey), suffix]) row!([" ", prefix, Tui::fg(yellow, *hotkey), suffix])
})) })))
]) ])
}); });
@ -366,7 +362,7 @@ impl<'a> From<&'a SequencerStatusBar> for SequencerStats<'a> {
} }
render!(|self:SequencerStats<'a>|{ render!(|self:SequencerStats<'a>|{
let orange = Color::Rgb(255,128,0); let orange = Color::Rgb(255,128,0);
let dark = Color::Rgb(100,100,100); let dark = Color::Rgb(25,25,25);
let cpu = &self.cpu; let cpu = &self.cpu;
let res = &self.res; let res = &self.res;
let size = &self.size; let size = &self.size;

View file

@ -123,7 +123,11 @@ render!(|self: TransportView|{
if self.focused { if self.focused {
add(&Tui::fill_x(Lozenge(border_style)))?; add(&Tui::fill_x(Lozenge(border_style)))?;
} }
add(&Tui::outset_x(2, row!([ add(&Tui::outset_x(1, row!([
TransportField("Beat", "00X+0/0B+00/00P"),
" ",
TransportField("BPM ", self.bpm.as_str()),
" ",
col!(|add|{ col!(|add|{
if self.started { if self.started {
add(&col!([Tui::fg(Color::Rgb(0, 255, 0), "▶ PLAYING "), ""])) add(&col!([Tui::fg(Color::Rgb(0, 255, 0), "▶ PLAYING "), ""]))
@ -132,17 +136,11 @@ render!(|self: TransportView|{
} }
}), }),
" ", " ",
row!([ TransportField("Second", self.current_second.as_str()),
TransportField("Beat", "00X+0/0B+00/00P"), " ",
" ", TransportField("SR ", self.sr.as_str()),
TransportField("BPM ", self.bpm.as_str()), " ",
" ", TransportField("Sample", self.current_sample.as_str()),
TransportField("Second", self.current_second.as_str()),
" ",
TransportField("SR ", self.sr.as_str()),
" ",
TransportField("Sample", self.current_sample.as_str()),
]),
]))) ])))
}) })
}); });

View file

@ -206,18 +206,20 @@ render!(|self: PhraseView<'a>|{
phrase, view_mode, buffer, phrase, view_mode, buffer,
note_point, note_len, note_point, note_len,
note_range: (note_lo, note_hi), note_range: (note_lo, note_hi),
note_names: (note_lo_name, note_hi_name),
time_start, time_point, time_start, time_point,
//now: _, //now: _,
.. ..
} = self; } = self;
lay!([ lay!([
lay!(move|add|{ lay!(move|add|{
if *focused {
add(&Lozenge(Style::default().bg(Color::Rgb(40, 50, 30)).fg(TuiTheme::border_fg(true))))?;
}
let title_color = if *focused{Color::Rgb(150, 160, 90)}else{Color::Rgb(120, 130, 100)}; let title_color = if *focused{Color::Rgb(150, 160, 90)}else{Color::Rgb(120, 130, 100)};
let upper_left = format!("{note_hi} {note_hi_name} {}", let upper_left = format!("{}",
phrase.as_ref().map(|p|p.read().unwrap().name.clone()).unwrap_or(String::new()) phrase.as_ref().map(|p|p.read().unwrap().name.clone()).unwrap_or(String::new())
); );
let lower_left = format!("{note_lo} {note_lo_name}"); let lower_left = format!("");
let mut lower_right = format!(" {} ", size.format()); let mut lower_right = format!(" {} ", size.format());
if *focused && *entered { if *focused && *entered {
lower_right = format!("Note: {} ({}) {} {lower_right}", lower_right = format!("Note: {} ({}) {} {lower_right}",
@ -236,7 +238,11 @@ render!(|self: PhraseView<'a>|{
add(&Tui::fill_xy(Tui::at_se(Tui::pull_x(1, Tui::fg(title_color, lower_right)))))?; add(&Tui::fill_xy(Tui::at_se(Tui::pull_x(1, Tui::fg(title_color, lower_right)))))?;
Ok(()) Ok(())
}), }),
Tui::bg(Color::Rgb(40, 50, 30), Tui::fill_x(row!([ Tui::bg(if self.focused {
TuiTheme::bg()
} else {
Color::Reset
}, Tui::fill_x(row!([
Tui::push_y(1, Tui::fill_y(Widget::new(|to:[u16;2]|Ok(Some(to.clip_w(5))), move|to: &mut TuiOutput|{ Tui::push_y(1, Tui::fill_y(Widget::new(|to:[u16;2]|Ok(Some(to.clip_w(5))), move|to: &mut TuiOutput|{
Ok(if to.area().h() >= 2 { view_mode.render_keys(to, *note_hi, *note_lo) }) Ok(if to.area().h() >= 2 { view_mode.render_keys(to, *note_hi, *note_lo) })
}))), }))),

View file

@ -109,7 +109,7 @@ pub struct PhraseListView<'a> {
impl<'a, T: HasPhraseList> From<&'a T> for PhraseListView<'a> { impl<'a, T: HasPhraseList> From<&'a T> for PhraseListView<'a> {
fn from (state: &'a T) -> Self { fn from (state: &'a T) -> Self {
Self { Self {
title: "Phrases", title: "Pool:",
focused: state.phrases_focused(), focused: state.phrases_focused(),
entered: state.phrases_entered(), entered: state.phrases_entered(),
phrases: state.phrases(), phrases: state.phrases(),
@ -122,15 +122,16 @@ impl<'a, T: HasPhraseList> From<&'a T> for PhraseListView<'a> {
// TODO: Display phrases always in order of appearance // TODO: Display phrases always in order of appearance
render!(|self: PhraseListView<'a>|{ render!(|self: PhraseListView<'a>|{
let Self { title, focused, entered, phrases, index, mode } = self; let Self { title, focused, entered, phrases, index, mode } = self;
let border_color = if *focused {Color::Rgb(100, 110, 40)} else {Color::Rgb(70, 80, 50)}; let border_bg = if *entered {Color::Rgb(40, 50, 30)} else {TuiTheme::bg()};
let border_color = if *entered {Color::Rgb(100, 110, 40)} else {Color::Rgb(70, 80, 50)};
let title_color = if *focused {Color::Rgb(150, 160, 90)} else {Color::Rgb(120, 130, 100)}; let title_color = if *focused {Color::Rgb(150, 160, 90)} else {Color::Rgb(120, 130, 100)};
let upper_left = format!("[{}] {title}", if *entered {""} else {" "}); let upper_left = format!("{title}");
let upper_right = format!("({})", phrases.len()); let upper_right = format!("({})", phrases.len());
lay!(move|add|{ lay!(move|add|{
if *focused { if *focused {
add(&Lozenge(Style::default().bg(Color::Rgb(40, 50, 30)).fg(border_color)))?; add(&Lozenge(Style::default().bg(border_bg).fg(border_color)))?;
} }
add(&Tui::inset_xy(1, 1, Tui::fill_xy(col!(move|add|match mode { add(&Tui::inset_xy(0, 1, Tui::fill_xy(col!(move|add|match mode {
Some(PhrasesMode::Import(_, ref browser)) => { Some(PhrasesMode::Import(_, ref browser)) => {
add(browser) add(browser)
}, },