diff --git a/Cargo.lock b/Cargo.lock index fe21dcef..65fb99c7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1521,6 +1521,7 @@ dependencies = [ "tek_device", "tek_engine", "tengri", + "tengri_proc", "toml", ] @@ -1601,6 +1602,15 @@ dependencies = [ "tengri_dsl", ] +[[package]] +name = "tengri_proc" +version = "0.13.0" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "tengri_tui" version = "0.13.0" diff --git a/Cargo.toml b/Cargo.toml index 63d91683..488cee90 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -23,15 +23,13 @@ lto = false [workspace.dependencies.tengri] path = "./deps/tengri/tengri" -#git = "https://codeberg.org/unspeaker/tengri" -#rev = "6048d24" features = [ "tui", "dsl" ] +[workspace.dependencies.tengri_proc] +path = "./deps/tengri/proc" + [workspace.dependencies.jack] -#git = "https://codeberg.org/unspeaker/rust-jack" -#rev = "a13c1c4" path = "./deps/rust-jack" -#default-features = false [workspace.dependencies] tek_device = { path = "./crates/device" } diff --git a/crates/app/src/view.rs b/crates/app/src/view.rs index 42ab6b4a..2c5559ac 100644 --- a/crates/app/src/view.rs +++ b/crates/app/src/view.rs @@ -2,12 +2,16 @@ use crate::*; pub(crate) use std::fmt::Write; pub(crate) use ::tengri::tui::ratatui::prelude::Position; -#[tengri_proc::view(self.config.view)] +#[tengri_proc::view(TuiOut)] impl Tek { - #[view(":nil")] "nil" + #[tengri::view(":nil")] + fn view_nil (&self) -> impl Content + use<'_> { + "nil" + } - #[view(":status")] { + #[tengri::view(":status")] + fn view_status (&self) -> impl Content + use<'_> { self.update_clock(); let cache = self.view_cache.read().unwrap(); view_status( @@ -16,7 +20,8 @@ impl Tek { ) } - #[view(":transport")] { + #[tengri::view(":transport")] + fn view_transport (&self) -> impl Content + use<'_> { self.update_clock(); let cache = self.view_cache.read().unwrap(); view_transport( @@ -25,34 +30,50 @@ impl Tek { ) } - #[view(":arranger")] ArrangerView::new(self) + #[tengri::view(":arranger")] + fn view_arranger (&self) -> impl Content + use<'_> { + ArrangerView::new(self) + } - #[view(":pool")] self.pool() - .map(|p|Fixed::x(self.w_sidebar(), PoolView(self.is_editing(), p))) + #[tengri::view(":pool")] + fn view_pool (&self) -> impl Content + use<'_> { + self.pool().map(|p|Fixed::x(self.w_sidebar(), PoolView(self.is_editing(), p))) + } - #[view(":editor")] self.editor() - .map(|e|Bsp::n(Bsp::e(e.clip_status(), e.edit_status()), e)) + #[tengri::view(":editor")] + fn view_editor (&self) -> impl Content + use<'_> { + self.editor().map(|e|Bsp::n(Bsp::e(e.clip_status(), e.edit_status()), e)) + } - #[view(":samples-keys")] self.sampler() - .map(|s|s.view_list(false, self.editor().unwrap())) + #[tengri::view(":samples-keys")] + fn view_samples_keys (&self) -> impl Content + use<'_> { + self.sampler().map(|s|s.view_list(false, self.editor().unwrap())) + } - #[view(":samples-grid")] self.sampler() - .map(|s|s.view_grid()) + #[tengri::view(":samples-grid")] + fn view_samples_grid (&self) -> impl Content + use<'_> { + self.sampler().map(|s|s.view_grid()) + } - #[view(":sample-viewer")] self.sampler() - .map(|s|s.view_sample(self.editor().unwrap().note_pos())) + #[tengri::view(":sample-viewer")] + fn view_sample_viewer (&self) -> impl Content + use<'_> { + self.sampler().map(|s|s.view_sample(self.editor().unwrap().note_pos())) + } - #[view(":modal")] When::new(self.modal.is_some(), Bsp::b( - Fill::xy(Tui::fg_bg(Rgb(64,64,64), Rgb(32,32,32), "")), - Fixed::xy(30, 15, Tui::fg_bg(Rgb(255,255,255), Rgb(16,16,16), Bsp::b( - Repeat(" "), - Outer(true, Style::default().fg(Tui::g(96))) - .enclose(self.modal.map(|modal|match modal { - Modal::Menu => self.view_modal_menu().boxed(), - Modal::Help => self.view_modal_help().boxed(), - })) - ))) - )) + #[tengri::view(":modal")] + fn view_modal (&self) -> impl Content + use<'_> { + When::new(self.modal.is_some(), Bsp::b( + Fill::xy(Tui::fg_bg(Rgb(64,64,64), Rgb(32,32,32), "")), + Fixed::xy(30, 15, Tui::fg_bg(Rgb(255,255,255), Rgb(16,16,16), Bsp::b( + Repeat(" "), + Outer(true, Style::default().fg(Tui::g(96))) + .enclose(self.modal.map(|modal|match modal { + Modal::Menu => self.view_modal_menu().boxed(), + Modal::Help => self.view_modal_help().boxed(), + })) + ))) + )) + } fn view_modal_menu (&self) -> impl Content { let options = ||["Projects", "Settings", "Help", "Quit"].iter(); @@ -189,7 +210,7 @@ impl Tek { TrackClip { track, .. } if editing => Some(track), _ => None }; - let bigger = self.editor_w(); + let bigger = self.editor_w(); self.tracks().iter().enumerate().map(move |(index, track)|{ let width = if Some(index) == active.copied() { bigger } else { track.width.max(8) }; let data = (index, track, x, x + width); diff --git a/deps/tengri b/deps/tengri index 21f7f6b3..b543c43e 160000 --- a/deps/tengri +++ b/deps/tengri @@ -1 +1 @@ -Subproject commit 21f7f6b38afc966b7b45af442935d48c8c5067d3 +Subproject commit b543c43e68154f049019da648064f36af1537434