canonize custom_render; duh flipped again

This commit is contained in:
🪞👃🪞 2024-12-10 00:06:51 +01:00
parent 8bdd088f70
commit 43154c486d
4 changed files with 27 additions and 30 deletions

View file

@ -37,6 +37,10 @@ mod phrase_select; pub(crate) use phrase_select::*;
}
}
pub fn render <F: Fn(&mut TuiOutput)->Usually<()>+Send+Sync> (render: F) -> impl Render<Tui> {
Widget::new(|_|Ok(Some([0u16,0u16].into())), render)
}
////////////////////////////////////////////////////////
pub struct Tui {

View file

@ -391,10 +391,6 @@ fn any_size <E: Engine> (_: E::Size) -> Perhaps<E::Size>{
Ok(Some([0.into(),0.into()].into()))
}
fn custom_render <F: Fn(&mut TuiOutput)->Usually<()>+Send+Sync> (render: F) -> impl Render<Tui> {
Widget::new(|_|Ok(Some([0u16,0u16].into())), render)
}
pub fn arranger_content_vertical (
view: &ArrangerTui,
factor: usize
@ -429,7 +425,7 @@ impl From<&ArrangerTui> for ArrangerVerticalColumnSeparator {
}
}
}
render!(|self: ArrangerVerticalColumnSeparator|custom_render(move|to: &mut TuiOutput|{
render!(|self: ArrangerVerticalColumnSeparator|render(move|to: &mut TuiOutput|{
let style = Some(Style::default().fg(self.sep_fg));
Ok(for x in self.cols.iter().map(|col|col.1) {
let x = self.scenes_w + to.area().x() + x as u16;
@ -452,7 +448,7 @@ impl From<(&ArrangerTui, usize)> for ArrangerVerticalRowSeparator {
}
}
render!(|self: ArrangerVerticalRowSeparator|custom_render(move|to: &mut TuiOutput|{
render!(|self: ArrangerVerticalRowSeparator|render(move|to: &mut TuiOutput|{
Ok(for y in self.rows.iter().map(|row|row.1) {
let y = to.area().y() + (y / PPQ) as u16 + 1;
if y >= to.buffer.area.height { break }
@ -486,7 +482,7 @@ impl From<(&ArrangerTui, usize)> for ArrangerVerticalCursor {
}
}
}
render!(|self: ArrangerVerticalCursor|custom_render(move|to: &mut TuiOutput|{
render!(|self: ArrangerVerticalCursor|render(move|to: &mut TuiOutput|{
let area = to.area();
let focused = self.focused;
let selected = self.selected;

View file

@ -196,23 +196,6 @@ render!(|self: PhraseView<'a>|{
//now: _,
..
} = self;
let keys = move|to: &mut TuiOutput|{
Ok(if to.area().h() >= 2 { view_mode.render_keys(to, *note_hi, *note_lo) })
};
let notes = |to: &mut TuiOutput|{
size.set_wh(to.area.w(), to.area.h() as usize - 1);
let draw = to.area().h() >= 2;
Ok(if draw { view_mode.render_notes(to, buffer, *time_start, *note_hi) })
};
let cursor = move|to: &mut TuiOutput|{
Ok(if *focused && *entered {
view_mode.render_cursor(
to,
*time_point, *time_start, view_mode.time_zoom(),
*note_point, *note_len, *note_hi, *note_lo,
)
})
};
lay!([
lay!(move|add|{
let title_color = if *focused{Color::Rgb(150, 160, 90)}else{Color::Rgb(120, 130, 100)};
@ -239,10 +222,24 @@ render!(|self: PhraseView<'a>|{
Ok(())
}),
Tui::bg(Color::Rgb(40, 50, 30), Tui::fill_x(row!([
Tui::push_y(1, Tui::fill_y(Widget::new(|to:[u16;2]|Ok(Some(to.clip_w(2))), keys))),
Tui::push_y(1, Tui::fill_y(Widget::new(|to:[u16;2]|Ok(Some(to.clip_w(2))), move|to: &mut TuiOutput|{
Ok(if to.area().h() >= 2 { view_mode.render_keys(to, *note_hi, *note_lo) })
}))),
Tui::fill_x(lay!([
Tui::push_y(1, Tui::fill_x(Widget::new(|to|Ok(Some(to)), notes))),
Tui::push_y(1, Widget::new(|to|Ok(Some(to)), cursor))
Tui::push_y(1, Tui::fill_x(render(|to: &mut TuiOutput|{
size.set_wh(to.area.w(), to.area.h() as usize - 1);
let draw = to.area().h() >= 2;
Ok(if draw { view_mode.render_notes(to, buffer, *time_start, *note_hi) })
}))),
Tui::push_y(1, render(move|to: &mut TuiOutput|{
Ok(if *focused && *entered {
view_mode.render_cursor(
to,
*time_point, *time_start, view_mode.time_zoom(),
*note_point, *note_len, *note_hi, *note_lo,
)
})
}))
])),
])))
])
@ -444,7 +441,7 @@ impl PhraseViewMode {
for (x, time_start) in (0..phrase.length).step_by(time_zoom).enumerate() {
let time_end = time_start + time_zoom;
for (y, note) in (0..127).rev().enumerate() {
let cell = target.get_mut(x, 127 - note).unwrap();
let cell = target.get_mut(x, note).unwrap();
if notes_on[note] {
cell.set_fg(Color::Rgb(255, 255, 255));
cell.set_bg(Color::Rgb(0, 0, 0));
@ -457,7 +454,7 @@ impl PhraseViewMode {
match event {
MidiMessage::NoteOn { key, .. } => {
let note = key.as_int() as usize;
let cell = target.get_mut(x, 127 - note).unwrap();
let cell = target.get_mut(x, note).unwrap();
cell.set_char('█');
cell.set_style(style);
notes_on[note] = true

View file

@ -49,7 +49,7 @@ render!(|self: PhraseSelector<'a>|{
let row1 = Tui::fill_x(lay!([Tui::fill_x(Tui::at_w(format!(" "))), length]));
let row2 = format!(" {name}");
let row2 = Tui::bold(true, row2);
add(&Tui::bg(color.base.rgb, Tui::fill_x(Tui::to_south(row1, row2))))?;
add(&Tui::bg(color.base.rgb, Tui::fill_x(col!([row1, row2]))))?;
}
Ok(())
})))),