From 43154c486daf49766e1d5f047c40a8316ff759e4 Mon Sep 17 00:00:00 2001 From: unspeaker Date: Tue, 10 Dec 2024 00:06:51 +0100 Subject: [PATCH] canonize custom_render; duh flipped again --- crates/tek/src/tui.rs | 4 +++ crates/tek/src/tui/app_arranger.rs | 10 +++---- crates/tek/src/tui/phrase_editor.rs | 41 +++++++++++++---------------- crates/tek/src/tui/phrase_select.rs | 2 +- 4 files changed, 27 insertions(+), 30 deletions(-) diff --git a/crates/tek/src/tui.rs b/crates/tek/src/tui.rs index e17be900..65a68fdd 100644 --- a/crates/tek/src/tui.rs +++ b/crates/tek/src/tui.rs @@ -37,6 +37,10 @@ mod phrase_select; pub(crate) use phrase_select::*; } } +pub fn render Usually<()>+Send+Sync> (render: F) -> impl Render { + Widget::new(|_|Ok(Some([0u16,0u16].into())), render) +} + //////////////////////////////////////////////////////// pub struct Tui { diff --git a/crates/tek/src/tui/app_arranger.rs b/crates/tek/src/tui/app_arranger.rs index 23270cc0..f8755026 100644 --- a/crates/tek/src/tui/app_arranger.rs +++ b/crates/tek/src/tui/app_arranger.rs @@ -391,10 +391,6 @@ fn any_size (_: E::Size) -> Perhaps{ Ok(Some([0.into(),0.into()].into())) } -fn custom_render Usually<()>+Send+Sync> (render: F) -> impl Render { - 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; diff --git a/crates/tek/src/tui/phrase_editor.rs b/crates/tek/src/tui/phrase_editor.rs index 2334e78c..00977b6a 100644 --- a/crates/tek/src/tui/phrase_editor.rs +++ b/crates/tek/src/tui/phrase_editor.rs @@ -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 diff --git a/crates/tek/src/tui/phrase_select.rs b/crates/tek/src/tui/phrase_select.rs index d2ec9a41..eef00e33 100644 --- a/crates/tek/src/tui/phrase_select.rs +++ b/crates/tek/src/tui/phrase_select.rs @@ -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(()) })))),