diff --git a/tek/src/view.rs b/tek/src/view.rs index d0f94bb6..57b712eb 100644 --- a/tek/src/view.rs +++ b/tek/src/view.rs @@ -1,5 +1,25 @@ use crate::*; use std::fmt::Write; +#[derive(Debug, Default)] struct ViewMemo { + value: T, + view: Arc> +} +impl ViewMemo { + fn new (value: T, view: U) -> Self { + Self { + value, + view: Arc::new(view.into()) + } + } + fn update (&mut self, newval: T, render: impl Fn(&mut U, &T, &T)->R) -> Option { + if newval != self.value { + let result = render(&mut*self.view.write().unwrap(), &newval, &self.value); + self.value = newval; + return Some(result); + } + None + } +} #[derive(Debug)] pub(crate) struct ViewCache { sr: ViewMemo, String>, buf: ViewMemo, String>, @@ -26,20 +46,6 @@ impl Default for ViewCache { } } } -#[derive(Debug, Default)] struct ViewMemo { value: T, view: Arc> } -impl ViewMemo { - fn new (value: T, view: U) -> Self { Self { value, view: Arc::new(view.into()) } } -} -impl ViewMemo { - fn update (&mut self, newval: T, render: impl Fn(&mut U, &T, &T)->R) -> Option { - if newval != self.value { - let result = render(&mut*self.view.write().unwrap(), &newval, &self.value); - self.value = newval; - return Some(result); - } - None - } -} view!(TuiOut: |self: Tek| self.size.of(View(self, self.view)); { ":editor" => (&self.editor).boxed(), ":pool" => self.view_pool().boxed(), @@ -97,7 +103,8 @@ impl Tek { let pulse = clock.timebase.usecs_to_pulse(now); let time = now/1000000.; let bpm = clock.timebase.bpm.get(); - fmtd.beat.update(Some(pulse), |buf, _, _|clock.timebase.format_beats_1_to(buf, pulse)); + fmtd.beat.update(Some(pulse), + |buf, _, _|{buf.clear();clock.timebase.format_beats_1_to(buf, pulse)}); fmtd.time.update(Some(time), rewrite!(buf, "{:.3}s", time)); fmtd.bpm.update(Some(bpm), rewrite!(buf, "{:.3}", bpm)); } else { @@ -182,8 +189,8 @@ impl Tek { fn view_row <'a> ( &'a self, w: u16, h: u16, a: impl Content + 'a, b: impl Content + 'a ) -> impl Content + 'a { - Fixed::y(h, Bsp::e( - Fixed::x(self.w_sidebar() as u16, a), + Fixed::y(h, Bsp::a( + Fill::x(Align::w(Fixed::x(self.w_sidebar() as u16, a))), Fill::x(Align::c(Fixed::xy(w, h, b))) )) } @@ -191,11 +198,16 @@ impl Tek { let fg = Tui::g(224); let bg = Tui::g(64); let h = 1 + self.midi_ins.len() as u16; - let header: ThunkBox<_> = io_header!(self, " I ", " midi ins", self.midi_ins.len(), self.midi_ins().get(0).map( - move|input: &JackPort|Bsp::s( - Fill::x(Tui::bold(true, Tui::fg_bg(fg, bg, Align::w(input.name.clone())))), - input.connect.get(0).map(|connect|Fill::x(Align::w(Tui::bold(false, - Tui::fg_bg(fg, bg, connect.info())))))))); + let header: ThunkBox<_> = io_header!( + self, + " I ", + " midi ins", + self.midi_ins.len(), + self.midi_ins().get(0).map( + move|input: &JackPort|Bsp::s( + Fill::x(Tui::bold(true, Tui::fg_bg(fg, bg, Align::w(input.name.clone())))), + input.connect.get(0).map(|connect|Fill::x(Align::w(Tui::bold(false, + Tui::fg_bg(fg, bg, connect.info())))))))); let rec = false; let mon = false; let cells: ThunkBox<_> = per_track!(|self, track, _t|Bsp::s(Tui::bold(true, row!( diff --git a/tek/src/view_arranger.edn b/tek/src/view_arranger.edn index af4b588c..109ddf7f 100644 --- a/tek/src/view_arranger.edn +++ b/tek/src/view_arranger.edn @@ -1,5 +1,5 @@ -(bsp/s (max/y 1 :toolbar) - (fill/x (align/c (bsp/w (fixed/x :pool-w :pool) - (bsp/n - (bsp/s :scene-add (bsp/s :tracks (bsp/n :inputs :outputs))) - :scenes))))) +(bsp/a (fill/xy (align/n (max/y 1 :toolbar))) + (fill/x (align/c (bsp/a (fill/xy (align/e (fixed/x :pool-w :pool))) + (bsp/a + (fill/xy (align/s (bsp/s :scene-add (bsp/s :tracks (bsp/n :inputs :outputs))))) + (fill/xy :scenes))))))