add from! macro

This commit is contained in:
🪞👃🪞 2024-12-19 17:20:35 +01:00
parent d806014df2
commit 77ea2a9b02
2 changed files with 26 additions and 12 deletions

View file

@ -10,3 +10,13 @@ pub use self::{
input::Handle,
output::Render
};
/// Prototypal case of implementor macro.
/// Saves 4loc per data pats.
#[macro_export] macro_rules! from {
(|$self:ident: $Source:ty| $Target:ty = $cb:expr) => {
impl From<$Source> for $Target {
fn from (state: $Source) -> Self { $cb }
}
};
}

View file

@ -5,17 +5,11 @@ pub struct ArrangerVColSep {
scenes_w: u16,
sep_fg: Color,
}
impl From<&ArrangerTui> for ArrangerVColSep {
fn from (state: &ArrangerTui) -> Self {
Self {
from!(|source:&ArrangerTui|ArrangerVColSep = Self {
cols: track_widths(state.tracks()),
scenes_w: 3 + ArrangerScene::longest_name(state.scenes()) as u16,
sep_fg: TuiTheme::separator_fg(false),
}
}
}
});
render!(<Tui>|self: ArrangerVColSep|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) {
@ -145,8 +139,18 @@ pub struct ArrangerVHead<'a> {
timebase: &'a Arc<Timebase>,
current: &'a Arc<Moment>,
}
from!(<'a>|state: &'a ArrangerTui|ArrangerVHead<'a>, { // A
tracks: &state.tracks,
cols: track_widths(state.tracks()),
focused: true,
selected: state.selected,
scenes_w: 3 + ArrangerScene::longest_name(state.scenes()) as u16,
header_h: 3,
timebase: state.clock().timebase(),
current: &state.clock().playhead,
});
impl<'a> From<&'a ArrangerTui> for ArrangerVHead<'a> {
impl<'a> From<&'a ArrangerTui> for ArrangerVHead<'a> { // B
fn from (state: &'a ArrangerTui) -> Self {
Self {
tracks: &state.tracks,