diff --git a/crates/tek/src/audio/mixer.rs b/crates/tek/src/audio/mixer.rs index 8e5f0135..a0ac9366 100644 --- a/crates/tek/src/audio/mixer.rs +++ b/crates/tek/src/audio/mixer.rs @@ -1,5 +1,4 @@ use crate::*; - #[derive(Debug)] pub struct Mixer { /// JACK client handle (needs to not be dropped for standalone mode to work). @@ -9,15 +8,8 @@ pub struct Mixer { pub selected_track: usize, pub selected_column: usize, } - pub struct MixerAudio { model: Arc> } - -impl From<&Arc>> for MixerAudio { - fn from (model: &Arc>) -> Self { - Self { model: model.clone() } - } -} - +from!(|mode: &Arc>| MixerAudio = Self { model: model.clone() }); audio!(|self: MixerAudio, _, _|Control::Continue); diff --git a/crates/tek/src/tui/app_transport.rs b/crates/tek/src/tui/app_transport.rs index f368a621..7b00645d 100644 --- a/crates/tek/src/tui/app_transport.rs +++ b/crates/tek/src/tui/app_transport.rs @@ -147,12 +147,7 @@ pub enum TransportFocus { Clock, Quant, } - -impl From<&TransportTui> for Option { - fn from (state: &TransportTui) -> Self { - Some(state.focus.inner()) - } -} +from!(|state: &TransportTui|Option = Some(state.focus.inner())); impl FocusWrap for TransportFocus { fn wrap <'a, W: Render> (self, focus: TransportFocus, content: &'a W) diff --git a/crates/tek/src/tui/arranger_mode_v.rs b/crates/tek/src/tui/arranger_mode_v.rs index 1a6c4608..8056f3a2 100644 --- a/crates/tek/src/tui/arranger_mode_v.rs +++ b/crates/tek/src/tui/arranger_mode_v.rs @@ -1,5 +1,4 @@ use crate::*; - pub struct ArrangerVColSep { cols: Vec<(usize, usize)>, scenes_w: u16, @@ -19,21 +18,14 @@ render!(|self: ArrangerVColSep|render(move|to: &mut TuiOutput|{ } }) })); - pub struct ArrangerVRowSep { rows: Vec<(usize, usize)>, sep_fg: Color, } - -impl From<(&ArrangerTui, usize)> for ArrangerVRowSep { - fn from ((state, factor): (&ArrangerTui, usize)) -> Self { - Self { - rows: ArrangerScene::ppqs(state.scenes(), factor), - sep_fg: TuiTheme::separator_fg(false), - } - } -} - +from!(|args:(&ArrangerTui, usize)|ArrangerVRowSep = Self { + rows: ArrangerScene::ppqs(args.0.scenes(), args.1), + sep_fg: TuiTheme::separator_fg(false), +}); render!(|self: ArrangerVRowSep|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; @@ -47,7 +39,6 @@ render!(|self: ArrangerVRowSep|render(move|to: &mut TuiOutput|{ } }) })); - pub struct ArrangerVCursor { cols: Vec<(usize, usize)>, rows: Vec<(usize, usize)>, @@ -56,20 +47,14 @@ pub struct ArrangerVCursor { scenes_w: u16, header_h: u16, } - -impl From<(&ArrangerTui, usize)> for ArrangerVCursor { - fn from ((state, factor): (&ArrangerTui, usize)) -> Self { - Self { - cols: track_widths(state.tracks()), - rows: ArrangerScene::ppqs(state.scenes(), factor), - focused: true, - selected: state.selected, - scenes_w: 3 + ArrangerScene::longest_name(state.scenes()) as u16, - header_h: 3, - } - } -} - +from!(|args:(&ArrangerTui, usize)|ArrangerVCursor = Self { + cols: track_widths(state.tracks()), + rows: ArrangerScene::ppqs(args.0.scenes(), args.1), + focused: true, + selected: state.selected, + scenes_w: 3 + ArrangerScene::longest_name(state.scenes()) as u16, + header_h: 3, +}); render!(|self: ArrangerVCursor|render(move|to: &mut TuiOutput|{ let area = to.area(); let focused = self.focused; diff --git a/crates/tek/src/tui/phrase_list.rs b/crates/tek/src/tui/phrase_list.rs index 21979c00..f8b58e8f 100644 --- a/crates/tek/src/tui/phrase_list.rs +++ b/crates/tek/src/tui/phrase_list.rs @@ -167,14 +167,12 @@ impl Default for PhraseListModel { } } } -impl From<&Arc>> for PhraseListModel { - fn from (phrase: &Arc>) -> Self { - let mut model = Self::default(); - model.phrases.push(phrase.clone()); - model.phrase.store(1, Relaxed); - model - } -} +from!(|phrase:<&Arc>>| PhraseListModel = { + let mut model = Self::default(); + model.phrases.push(phrase.clone()); + model.phrase.store(1, Relaxed); + model +}); has_phrases!(|self:PhraseListModel|self.phrases); has_phrase!(|self:PhraseListModel|self.phrases[self.phrase_index()]); impl PhraseListModel {