From ba0ff4af98690faf8622bf84cd2b37415159688b Mon Sep 17 00:00:00 2001 From: unspeaker Date: Sat, 11 Jan 2025 16:30:15 +0100 Subject: [PATCH] somehow it is now aligned --- output/src/edn_view.rs | 25 ++++++++++++++++------ tek/examples/edn.rs | 1 + tek/examples/edn13.edn | 11 ++++++++++ tek/src/arranger.edn | 4 ++-- tek/src/arranger.rs | 48 ++++++++++++++---------------------------- 5 files changed, 49 insertions(+), 40 deletions(-) create mode 100644 tek/examples/edn13.edn diff --git a/output/src/edn_view.rs b/output/src/edn_view.rs index c9b58c23..dc475452 100644 --- a/output/src/edn_view.rs +++ b/output/src/edn_view.rs @@ -75,6 +75,13 @@ fn match_exp <'a, E: Output + 'a, State: EdnViewData> ( ) -> Box + 'a> { match (head, tail) { + (Key("when"), [c, a]) => When(s.get_bool(c.to_ref()), + s.get_content(a.to_ref())).boxed(), + + (Key("either"),[c, a, b]) => Either(s.get_bool(c.to_ref()), + s.get_content(a.to_ref()), + s.get_content(b.to_ref())).boxed(), + (Key("align/c"), [a]) => Align::c(s.get_content(a.to_ref())).boxed(), (Key("align/x"), [a]) => Align::x(s.get_content(a.to_ref())).boxed(), (Key("align/y"), [a]) => Align::y(s.get_content(a.to_ref())).boxed(), @@ -94,12 +101,12 @@ fn match_exp <'a, E: Output + 'a, State: EdnViewData> ( (Key("bsp/s"), [a, b]) => Bsp::s(s.get_content(a.to_ref()), s.get_content(b.to_ref()),).boxed(), (Key("bsp/w"), [a, b]) => Bsp::w(s.get_content(a.to_ref()), s.get_content(b.to_ref()),).boxed(), - (Key("fill/x"), [a]) => Fill::x(s.get_content(a.to_ref())).boxed(), - (Key("fill/y"), [a]) => Fill::y(s.get_content(a.to_ref())).boxed(), - (Key("fill/xy"), [a]) => Fill::xy(s.get_content(a.to_ref())).boxed(), + (Key("fill/x"), [a]) => Fill::x(s.get_content(a.to_ref())).boxed(), + (Key("fill/y"), [a]) => Fill::y(s.get_content(a.to_ref())).boxed(), + (Key("fill/xy"), [a]) => Fill::xy(s.get_content(a.to_ref())).boxed(), - (Key("fixed/x"), [x, a]) => Fixed::x(s.get_unit(x.to_ref()), s.get_content(a.to_ref())).boxed(), - (Key("fixed/y"), [y, a]) => Fixed::y(s.get_unit(y.to_ref()), s.get_content(a.to_ref())).boxed(), + (Key("fixed/x"), [x, a]) => Fixed::x(s.get_unit(x.to_ref()), s.get_content(a.to_ref())).boxed(), + (Key("fixed/y"), [y, a]) => Fixed::y(s.get_unit(y.to_ref()), s.get_content(a.to_ref())).boxed(), (Key("fixed/xy"), [x, y, a]) => Fixed::xy(s.get_unit(x.to_ref()), s.get_unit(y.to_ref()), s.get_content(a.to_ref())).boxed(), (Key("max/x"), [x, a]) => Max::x(s.get_unit(x.to_ref()), s.get_content(a.to_ref())).boxed(), @@ -108,7 +115,13 @@ fn match_exp <'a, E: Output + 'a, State: EdnViewData> ( (Key("push/x"), [x, a]) => Push::x(s.get_unit(x.to_ref()), s.get_content(a.to_ref())).boxed(), (Key("push/y"), [y, a]) => Push::y(s.get_unit(y.to_ref()), s.get_content(a.to_ref())).boxed(), - (Key("when"), [c, a]) => When(s.get_bool(c.to_ref()), s.get_content(a.to_ref())).boxed(), + (Key("pad/x"), [x, a]) => Padding::x(s.get_unit(x.to_ref()), s.get_content(a.to_ref())).boxed(), + (Key("pad/y"), [y, a]) => Padding::y(s.get_unit(y.to_ref()), s.get_content(a.to_ref())).boxed(), + (Key("pad/xy"), [x, y, a]) => Padding::xy(s.get_unit(x.to_ref()), s.get_unit(y.to_ref()), s.get_content(a.to_ref())).boxed(), + + (Key("grow/x"), [x, a]) => Margin::x(s.get_unit(x.to_ref()), s.get_content(a.to_ref())).boxed(), + (Key("grow/y"), [y, a]) => Margin::y(s.get_unit(y.to_ref()), s.get_content(a.to_ref())).boxed(), + (Key("grow/xy"), [x, y, a]) => Margin::xy(s.get_unit(x.to_ref()), s.get_unit(y.to_ref()), s.get_content(a.to_ref())).boxed(), _ => todo!("{:?} {:?}", &head, &tail) } diff --git a/tek/examples/edn.rs b/tek/examples/edn.rs index fa6b75e7..b1601f5b 100644 --- a/tek/examples/edn.rs +++ b/tek/examples/edn.rs @@ -16,6 +16,7 @@ const EDN: &'static [&'static str] = &[ include_str!("edn10.edn"), include_str!("edn11.edn"), include_str!("edn12.edn"), + include_str!("edn13.edn"), ]; fn main () -> Usually<()> { diff --git a/tek/examples/edn13.edn b/tek/examples/edn13.edn new file mode 100644 index 00000000..8fe81c3a --- /dev/null +++ b/tek/examples/edn13.edn @@ -0,0 +1,11 @@ +(bsp/s + (bsp/e (grow/xy 1 1 (fixed/xy 8 5 (align/nw :hello))) + (bsp/e (grow/xy 1 1 (fixed/xy 8 5 (align/n :hello))) + (grow/xy 1 1 (fixed/xy 8 5 (align/ne :hello))))) + (bsp/s + (bsp/e (grow/xy 1 1 (fixed/xy 8 5 (align/w :hello))) + (bsp/e (grow/xy 1 1 (fixed/xy 8 5 (align/c :hello))) + (grow/xy 1 1 (fixed/xy 8 5 (align/e :hello))))) + (bsp/e (grow/xy 1 1 (fixed/xy 8 5 (align/sw :hello))) + (bsp/e (grow/xy 1 1 (fixed/xy 8 5 (align/s :hello))) + (grow/xy 1 1 (fixed/xy 8 5 (align/se :hello))))))) diff --git a/tek/src/arranger.edn b/tek/src/arranger.edn index 1d1ac948..9edea7de 100644 --- a/tek/src/arranger.edn +++ b/tek/src/arranger.edn @@ -1,3 +1,3 @@ (bsp/s :toolbar - (fill/x (align/c (bsp/w :pool - (bsp/n :outputs (bsp/n :inputs (bsp/n :tracks :scenes))))))) + (bsp/w :pool (fill/x (align/c + (bsp/s :outputs (bsp/s :inputs (bsp/s :tracks :scenes))))))) diff --git a/tek/src/arranger.rs b/tek/src/arranger.rs index cd6d6d05..d9a8218e 100644 --- a/tek/src/arranger.rs +++ b/tek/src/arranger.rs @@ -309,28 +309,24 @@ impl Arranger { } fn scene_row (&self, tracks_w: u16) -> impl Content + '_ { - let h = self.size.h() as u16; + let h = (self.size.h() as u16).saturating_sub(8).max(8); let border = |x|Skinny(Style::default().fg(Color::Rgb(0,0,0)).bg(Color::Reset)).enclose2(x); - Fill::y(Bsp::e( - Tui::bg(Color::Reset, Fixed::x(self.sidebar_w() as u16, self.scene_headers())), + Bsp::e( + Tui::bg(Color::Reset, Fixed::xy(self.sidebar_w() as u16, h, self.scene_headers())), Tui::bg(Color::Reset, Fill::x(Align::c(Fixed::xy(tracks_w, h, border(self.scene_cells()))))) - )) + ) } fn scene_headers <'a> (&'a self) -> BoxThunk<'a, TuiOut> { (||{ let last_color = Arc::new(RwLock::new(ItemPalette::from(Color::Rgb(0, 0, 0)))); - let selected_scene = match self.selected { - ArrangerSelection::Scene(s) => Some(s), - _ => None - }; + let selected = self.selected.scene(); Fill::y(Align::c(Map::new(||self.scenes_with_sizes(2), move|(_, scene, y1, y2), i| { let h = (y2 - y1) as u16; let name = format!("🭬{}", &scene.name); let color = scene.color(); - let top = (selected_scene.map(|s|s + 1) == Some(i)) - .then(||last_color.read().unwrap().base.rgb); - let active = selected_scene == Some(i); + let active = selected == Some(i); let mid = if active { color.light } else { color.base }; + let top = Some(last_color.read().unwrap().base.rgb); let cell = phat_sel_3( active, Tui::bold(true, name.clone()), @@ -346,12 +342,10 @@ impl Arranger { } fn scene_cells <'a> (&'a self) -> BoxThunk<'a, TuiOut> { let editing = self.is_editing(); - let (selected_track, selected_scene) = match self.selected { - ArrangerSelection::Clip(t, s) => (Some(t), Some(s)), - _ => (None, None) - }; - let tracks = move||self.tracks_with_sizes(); - let scenes = ||self.scenes_with_sizes(2); + let tracks = move||self.tracks_with_sizes(); + let scenes = ||self.scenes_with_sizes(2); + let selected_track = self.selected.track(); + let selected_scene = self.selected.scene(); (move||Fill::y(Align::c(Map::new(tracks, move|(_, track, x1, x2), t| { let w = (x2 - x1) as u16; let color: ItemPalette = track.color().dark.into(); @@ -391,7 +385,7 @@ impl Arranger { map_south( y1 as u16, h + 1, - Fill::x(cell) + Fill::x(Fixed::y(h + 1, cell)) ) }); let column = Fixed::x(w, Tui::bg(Color::Reset, Align::y(cells)).boxed()); @@ -654,7 +648,6 @@ impl Arranger { } } } - #[derive(Clone, Debug)] pub enum ArrangerCommand { History(isize), Color(ItemPalette), @@ -669,7 +662,6 @@ impl Arranger { StopAll, Clear, } - #[derive(Clone, Debug)] pub enum ArrangerClipCommand { Get(usize, usize), @@ -679,10 +671,6 @@ pub enum ArrangerClipCommand { SetLoop(usize, usize, bool), SetColor(usize, usize, ItemPalette), } - -//handle!(TuiIn: |self: Arranger, input|ArrangerCommand::execute_with_state(self, input.event())); -//input_to_command!(ArrangerCommand: |state: Arranger, input: Event|{KEYS_ARRANGER.handle(state, input)?}); - keymap!(KEYS_ARRANGER = |state: Arranger, input: Event| ArrangerCommand { key(Char('u')) => Cmd::History(-1), key(Char('U')) => Cmd::History(1), @@ -713,14 +701,10 @@ keymap!(KEYS_ARRANGER = |state: Arranger, input: Event| ArrangerCommand { kpat!(Char('0')) => Some(Cmd::StopAll), kpat!(Char('c')) => Some(Cmd::Color(ItemPalette::random())), - kpat!(Up) => - return None, - kpat!(Down) => Some( - Cmd::Select(Selected::Scene(0))), - kpat!(Left) => - return None, - kpat!(Right) => Some( - Cmd::Select(Selected::Track(0))), + kpat!(Up) => return None, + kpat!(Down) => Some( Cmd::Select(Selected::Scene(0))), + kpat!(Left) => return None, + kpat!(Right) => Some( Cmd::Select(Selected::Track(0))), _ => None },