From 914b5698397dcdd6b1ec08ab2fa7f65c4c669f57 Mon Sep 17 00:00:00 2001 From: unspeaker Date: Tue, 17 Dec 2024 19:36:43 +0100 Subject: [PATCH] Tui::at_ -> Align::_ --- crates/tek/src/layout/align.rs | 60 ++++++++++++++--------------- crates/tek/src/tui/app_arranger.rs | 2 +- crates/tek/src/tui/app_sequencer.rs | 4 +- crates/tek/src/tui/phrase_list.rs | 8 ++-- 4 files changed, 36 insertions(+), 38 deletions(-) diff --git a/crates/tek/src/layout/align.rs b/crates/tek/src/layout/align.rs index 2e11791a..9cfa1ec5 100644 --- a/crates/tek/src/layout/align.rs +++ b/crates/tek/src/layout/align.rs @@ -1,48 +1,33 @@ use crate::*; -impl LayoutAlign for E {} - -pub trait LayoutAlign { - fn center_x > (w: W) -> Align { Align::X(w) } - fn center_y > (w: W) -> Align { Align::Y(w) } - fn center > (w: W) -> Align { Align::Center(w) } - fn at_n > (w: W) -> Align { Align::N(w) } - fn at_s > (w: W) -> Align { Align::S(w) } - fn at_e > (w: W) -> Align { Align::E(w) } - fn at_w > (w: W) -> Align { Align::W(w) } - fn at_nw > (w: W) -> Align { Align::NW(w) } - fn at_sw > (w: W) -> Align { Align::SW(w) } - fn at_ne > (w: W) -> Align { Align::NE(w) } - fn at_se > (w: W) -> Align { Align::SE(w) } -} - /// Override X and Y coordinates, aligning to corner, side, or center of area -pub enum Align { +pub enum Align> { + _Unused(PhantomData), /// Draw at center of container - Center(L), + Center(T), /// Draw at center of X axis - X(L), + X(T), /// Draw at center of Y axis - Y(L), + Y(T), /// Draw at upper left corner of contaier - NW(L), + NW(T), /// Draw at center of upper edge of container - N(L), + N(T), /// Draw at right left corner of contaier - NE(L), + NE(T), /// Draw at center of left edge of container - W(L), + W(T), /// Draw at center of right edge of container - E(L), + E(T), /// Draw at lower left corner of container - SW(L), + SW(T), /// Draw at center of lower edge of container - S(L), + S(T), /// Draw at lower right edge of container - SE(L) + SE(T) } -impl Align { +impl> Align { pub fn inner (&self) -> &T { match self { Self::Center(inner) => inner, @@ -56,11 +41,23 @@ impl Align { Self::SW(inner) => inner, Self::S(inner) => inner, Self::SE(inner) => inner, + _ => unreachable!(), } } + pub fn c (w: T) -> Self { Self::Center(w) } + pub fn x (w: T) -> Self { Self::X(w) } + pub fn y (w: T) -> Self { Self::Y(w) } + pub fn n (w: T) -> Self { Self::N(w) } + pub fn s (w: T) -> Self { Self::S(w) } + pub fn e (w: T) -> Self { Self::E(w) } + pub fn w (w: T) -> Self { Self::W(w) } + pub fn nw (w: T) -> Self { Self::NW(w) } + pub fn sw (w: T) -> Self { Self::SW(w) } + pub fn ne (w: T) -> Self { Self::NE(w) } + pub fn se (w: T) -> Self { Self::SE(w) } } -fn align + From<[N;4]>> (align: &Align, outer: R, inner: R) -> Option { +fn align, N: Coordinate, R: Area + From<[N;4]>> (align: &Align, outer: R, inner: R) -> Option { if outer.w() < inner.w() || outer.h() < inner.h() { None } else { @@ -78,11 +75,12 @@ fn align + From<[N;4]>> (align: &Align, outer: R Align::SW(_) => [ox, oy + oh - ih, iw, ih,].into(), Align::S(_) => [ox + (ow - iw) / 2.into(), oy + oh - ih, iw, ih,].into(), Align::SE(_) => [ox + ow - iw, oy + oh - ih, iw, ih,].into(), + _ => unreachable!() }) } } -impl> Render for Align { +impl> Render for Align { fn min_size (&self, outer_area: E::Size) -> Perhaps { self.inner().min_size(outer_area) } diff --git a/crates/tek/src/tui/app_arranger.rs b/crates/tek/src/tui/app_arranger.rs index 9fe0c3ff..a0fc36f1 100644 --- a/crates/tek/src/tui/app_arranger.rs +++ b/crates/tek/src/tui/app_arranger.rs @@ -645,7 +645,7 @@ pub fn arranger_content_vertical ( factor: usize ) -> impl Render + use<'_> { lay!([ - Tui::at_se(Fill::wh(Tui::pull_x(1, Tui::fg(TuiTheme::title_fg(view.arranger_focused()), + Align::se(Fill::wh(Tui::pull_x(1, Tui::fg(TuiTheme::title_fg(view.arranger_focused()), format!("{}x{}", view.size.w(), view.size.h())) ))), Tui::bg(view.color.rgb, lay!(![ diff --git a/crates/tek/src/tui/app_sequencer.rs b/crates/tek/src/tui/app_sequencer.rs index e719c8d1..8386fd12 100644 --- a/crates/tek/src/tui/app_sequencer.rs +++ b/crates/tek/src/tui/app_sequencer.rs @@ -140,7 +140,7 @@ render!(|self: SequencerTui|{ let w = self.size.w(); let phrase_w = if w > 60 { 20 } else if w > 40 { 15 } else { 10 }; let pool_w = if self.show_pool { phrase_w } else { 0 }; - let pool = Fill::h(Tui::at_e(PhraseListView(&self.phrases))); + let pool = Fill::h(Align::e(PhraseListView(&self.phrases))); let with_pool = move|x|Tui::split_w(false, pool_w, pool, x); let status = SequencerStatusBar::from(self); let with_status = |x|Tui::split_n(false, if self.status { 2 } else { 0 }, status, x); @@ -244,7 +244,7 @@ render!(|self: SequencerStatusBar|Fixed::h(2, lay!([ double(("q", "enqueue"), ("e", "edit"), ), ])) }, - Fill::wh(Tui::at_se({ + Fill::wh(Align::se({ Tui::fg_bg(TuiTheme::orange(), TuiTheme::g(25), row!([ &self.cpu, &self.res, diff --git a/crates/tek/src/tui/phrase_list.rs b/crates/tek/src/tui/phrase_list.rs index fe23cbb1..71d57d3d 100644 --- a/crates/tek/src/tui/phrase_list.rs +++ b/crates/tek/src/tui/phrase_list.rs @@ -229,8 +229,8 @@ render!(|self: PhraseListView<'a>|{ } add(&Tui::bg(color.base.rgb, Fill::w(col!([ Fill::w(lay!(|add|{ - add(&Fill::w(Tui::at_w(format!(" {i}"))))?; - add(&Fill::w(Tui::at_e(Tui::pull_x(1, length.clone())))) + add(&Fill::w(Align::w(format!(" {i}"))))?; + add(&Fill::w(Align::e(Tui::pull_x(1, length.clone())))) })), Tui::bold(true, { let mut row2 = format!(" {name}"); @@ -249,8 +249,8 @@ render!(|self: PhraseListView<'a>|{ }))?; }) }))))?; - add(&Fill::w(Tui::at_nw(Tui::push_x(1, Tui::fg(title_color, upper_left.to_string())))))?; - add(&Fill::w(Tui::at_ne(Tui::pull_x(1, Tui::fg(title_color, upper_right.to_string())))))?; + add(&Fill::w(Align::nw(Tui::push_x(1, Tui::fg(title_color, upper_left.to_string())))))?; + add(&Fill::w(Align::ne(Tui::pull_x(1, Tui::fg(title_color, upper_right.to_string())))))?; add(&self.0.size) })) });