mirror of
https://codeberg.org/unspeaker/tek.git
synced 2025-12-06 19:56:42 +01:00
Tui::at_ -> Align::_
This commit is contained in:
parent
e127924227
commit
914b569839
4 changed files with 36 additions and 38 deletions
|
|
@ -1,48 +1,33 @@
|
|||
use crate::*;
|
||||
|
||||
impl<E: Engine> LayoutAlign<E> for E {}
|
||||
|
||||
pub trait LayoutAlign<E: Engine> {
|
||||
fn center_x <W: Render<E>> (w: W) -> Align<W> { Align::X(w) }
|
||||
fn center_y <W: Render<E>> (w: W) -> Align<W> { Align::Y(w) }
|
||||
fn center <W: Render<E>> (w: W) -> Align<W> { Align::Center(w) }
|
||||
fn at_n <W: Render<E>> (w: W) -> Align<W> { Align::N(w) }
|
||||
fn at_s <W: Render<E>> (w: W) -> Align<W> { Align::S(w) }
|
||||
fn at_e <W: Render<E>> (w: W) -> Align<W> { Align::E(w) }
|
||||
fn at_w <W: Render<E>> (w: W) -> Align<W> { Align::W(w) }
|
||||
fn at_nw <W: Render<E>> (w: W) -> Align<W> { Align::NW(w) }
|
||||
fn at_sw <W: Render<E>> (w: W) -> Align<W> { Align::SW(w) }
|
||||
fn at_ne <W: Render<E>> (w: W) -> Align<W> { Align::NE(w) }
|
||||
fn at_se <W: Render<E>> (w: W) -> Align<W> { Align::SE(w) }
|
||||
}
|
||||
|
||||
/// Override X and Y coordinates, aligning to corner, side, or center of area
|
||||
pub enum Align<L> {
|
||||
pub enum Align<E: Engine, T: Render<E>> {
|
||||
_Unused(PhantomData<E>),
|
||||
/// 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<T> Align<T> {
|
||||
impl<E: Engine, T: Render<E>> Align<E, T> {
|
||||
pub fn inner (&self) -> &T {
|
||||
match self {
|
||||
Self::Center(inner) => inner,
|
||||
|
|
@ -56,11 +41,23 @@ impl<T> Align<T> {
|
|||
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<T, N: Coordinate, R: Area<N> + From<[N;4]>> (align: &Align<T>, outer: R, inner: R) -> Option<R> {
|
||||
fn align<E: Engine, T: Render<E>, N: Coordinate, R: Area<N> + From<[N;4]>> (align: &Align<E, T>, outer: R, inner: R) -> Option<R> {
|
||||
if outer.w() < inner.w() || outer.h() < inner.h() {
|
||||
None
|
||||
} else {
|
||||
|
|
@ -78,11 +75,12 @@ fn align<T, N: Coordinate, R: Area<N> + From<[N;4]>> (align: &Align<T>, 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<E: Engine, T: Render<E>> Render<E> for Align<T> {
|
||||
impl<E: Engine, T: Render<E>> Render<E> for Align<E, T> {
|
||||
fn min_size (&self, outer_area: E::Size) -> Perhaps<E::Size> {
|
||||
self.inner().min_size(outer_area)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -645,7 +645,7 @@ pub fn arranger_content_vertical (
|
|||
factor: usize
|
||||
) -> impl Render<Tui> + 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!(![
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
}))
|
||||
});
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue