diff --git a/crates/tek/src/tui/app_arranger.rs b/crates/tek/src/tui/app_arranger.rs index f5cc1afe..59c3f516 100644 --- a/crates/tek/src/tui/app_arranger.rs +++ b/crates/tek/src/tui/app_arranger.rs @@ -19,7 +19,7 @@ impl TryFrom<&Arc>> for ArrangerTui { selected: ArrangerSelection::Clip(0, 0), scenes: vec![], tracks: vec![], - color: Color::Rgb(28, 35, 25).into(), + color: TuiTheme::bg().into(), history: vec![], mode: ArrangerMode::Vertical(2), name: Arc::new(RwLock::new(String::new())), diff --git a/crates/tek/src/tui/app_sequencer.rs b/crates/tek/src/tui/app_sequencer.rs index 75d0b9b5..effd20c5 100644 --- a/crates/tek/src/tui/app_sequencer.rs +++ b/crates/tek/src/tui/app_sequencer.rs @@ -345,12 +345,12 @@ impl From<&SequencerStatusBar> for SequencerMode { } } } -render!(|self:SequencerMode|{ - let orange = Color::Rgb(255,128,0); - let light = Color::Rgb(50,50,50); - let white = Color::Rgb(255,255,255); - let yellow = Color::Rgb(255,255,0); - let black = Color::Rgb(0,0,0); +render!(|self: SequencerMode|{ + let black = TuiTheme::g(0); + let light = TuiTheme::g(50); + let white = TuiTheme::g(255); + let orange = TuiTheme::orange(); + let yellow = TuiTheme::yellow(); row!([ Tui::bg(orange, Tui::fg(black, Tui::bold(true, self.mode))), Tui::bg(light, Tui::fg(white, row!((prefix, hotkey, suffix) in self.help.iter() => { @@ -374,8 +374,8 @@ impl<'a> From<&'a SequencerStatusBar> for SequencerStats<'a> { } } render!(|self:SequencerStats<'a>|{ - let orange = Color::Rgb(255,128,0); - let dark = Color::Rgb(25,25,25); + let orange = TuiTheme::orange(); + let dark = TuiTheme::g(25); let cpu = &self.cpu; let res = &self.res; let size = &self.size; diff --git a/crates/tek/src/tui/engine_theme.rs b/crates/tek/src/tui/engine_theme.rs index 738dd093..ccb66234 100644 --- a/crates/tek/src/tui/engine_theme.rs +++ b/crates/tek/src/tui/engine_theme.rs @@ -7,8 +7,8 @@ impl Theme for TuiTheme {} pub trait Theme { const HOTKEY_FG: Color = Color::Rgb(255, 255, 0); - fn black () -> Color { - Color::Rgb(0, 0, 0) + fn null () -> Color { + Color::Reset } fn bg () -> Color { Color::Rgb(28, 35, 25) @@ -17,10 +17,10 @@ pub trait Theme { Color::Rgb(40, 50, 30) } fn border_fg (focused: bool) -> Color { - if focused { Color::Rgb(100, 110, 40) } else { Color::Rgb(70, 80, 50) } + if focused { Self::bo1() } else { Self::bo2() } } fn title_fg (focused: bool) -> Color { - if focused { Color::Rgb(150, 160, 90) } else { Color::Rgb(120, 130, 100) } + if focused { Self::ti1() } else { Self::ti2() } } fn separator_fg (_: bool) -> Color { Color::Rgb(0, 0, 0) @@ -34,4 +34,25 @@ pub trait Theme { fn status_bar_bg () -> Color { Color::Rgb(28, 35, 25) } + fn bo1 () -> Color { + Color::Rgb(100, 110, 40) + } + fn bo2 () -> Color { + Color::Rgb(70, 80, 50) + } + fn ti1 () -> Color { + Color::Rgb(150, 160, 90) + } + fn ti2 () -> Color { + Color::Rgb(120, 130, 100) + } + fn orange () -> Color { + Color::Rgb(255,128,0) + } + fn yellow () -> Color { + Color::Rgb(255,255,0) + } + fn g (g: u8) -> Color { + Color::Rgb(g, g, g) + } } diff --git a/crates/tek/src/tui/phrase_list.rs b/crates/tek/src/tui/phrase_list.rs index 4d1cd9ce..1b32f448 100644 --- a/crates/tek/src/tui/phrase_list.rs +++ b/crates/tek/src/tui/phrase_list.rs @@ -122,9 +122,9 @@ impl<'a, T: HasPhraseList> From<&'a T> for PhraseListView<'a> { // TODO: Display phrases always in order of appearance render!(|self: PhraseListView<'a>|{ let Self { title, focused, entered, phrases, index, mode } = self; - let border_bg = if *focused {Color::Rgb(40, 50, 30)} else {Color::Reset}; - let border_color = if *entered {Color::Rgb(100, 110, 40)} else {Color::Rgb(70, 80, 50)}; - let title_color = if *focused {Color::Rgb(150, 160, 90)} else {Color::Rgb(120, 130, 100)}; + let border_bg = if *focused {TuiTheme::bg()} else {TuiTheme::null()}; + let border_color = if *entered {TuiTheme::bo1()} else {TuiTheme::bo2()}; + let title_color = if *focused {TuiTheme::ti1()} else {TuiTheme::ti2()}; let upper_left = format!("{title}"); let upper_right = format!("({})", phrases.len()); Tui::bg(border_bg, lay!(move|add|{ diff --git a/crates/tek/src/tui/phrase_select.rs b/crates/tek/src/tui/phrase_select.rs index b99a0861..aa5c80f2 100644 --- a/crates/tek/src/tui/phrase_select.rs +++ b/crates/tek/src/tui/phrase_select.rs @@ -10,15 +10,15 @@ pub struct PhraseSelector { // TODO: Display phrases always in order of appearance render!(|self: PhraseSelector|{ let Self { title, phrase, focused, entered } = self; - let border_bg = if *focused {Color::Rgb(40, 50, 30)} else { Color::Reset }; - let border_color = if *focused {Color::Rgb(100, 110, 40)} else {Color::Rgb(70, 80, 50)}; + let border_bg = if *focused {TuiTheme::border_bg()} else {TuiTheme::null()}; + let border_color = if *focused {TuiTheme::bo1()} else {TuiTheme::bo2()}; let border = Lozenge(Style::default().bg(border_bg).fg(border_color)); let title_color = if phrase.is_some() { - Color::Rgb(200,200,200) + TuiTheme::g(200) } else if *focused { - Color::Rgb(150, 160, 90) + TuiTheme::ti1() } else { - Color::Rgb(120, 130, 100) + TuiTheme::ti2() }; Tui::fixed_y(2, lay!(move|add|{ if phrase.is_none() { @@ -30,10 +30,10 @@ render!(|self: PhraseSelector|{ let Phrase { ref name, color, length, .. } = *phrase.read().unwrap(); add(&Tui::pull_y(0, Tui::inset_x(0, Tui::bg(color.dark.rgb, Tui::fill_x(col!([ Tui::fill_x(lay!([ - Tui::fill_x(Tui::at_w(Tui::fg(Color::Rgb(255,255,255), format!(" ")))), - Tui::fill_x(Tui::at_e(Tui::fg(Color::Rgb(255,255,255), PhraseLength::new(length, None)))) + Tui::fill_x(Tui::at_w(Tui::fg(TuiTheme::g(255), format!(" ")))), + Tui::fill_x(Tui::at_e(Tui::fg(TuiTheme::g(255), PhraseLength::new(length, None)))) ])), - Tui::bold(true, Tui::fg(Color::Rgb(255,255,255), format!(" {name}"))) + Tui::bold(true, Tui::fg(TuiTheme::g(255), format!(" {name}"))) ]))))))?; } Ok(())