diff --git a/crates/television-screen/src/colors.rs b/crates/television-screen/src/colors.rs index 3264864..bcdf6ba 100644 --- a/crates/television-screen/src/colors.rs +++ b/crates/television-screen/src/colors.rs @@ -13,7 +13,7 @@ pub struct Colorscheme { #[derive(Debug, Clone)] pub struct GeneralColorscheme { pub border_fg: Color, - pub background: Color, + pub background: Option, } #[derive(Debug, Clone)] diff --git a/crates/television-screen/src/help.rs b/crates/television-screen/src/help.rs index 930f1e9..99f14bf 100644 --- a/crates/television-screen/src/help.rs +++ b/crates/television-screen/src/help.rs @@ -23,7 +23,7 @@ pub fn draw_logo_block( .style( Style::default() .fg(mode_color) - .bg(general_colorscheme.background), + .bg(general_colorscheme.background.unwrap_or_default()), ) .padding(Padding::horizontal(1)); @@ -45,7 +45,10 @@ fn draw_metadata_block( .border_type(BorderType::Rounded) .border_style(Style::default().fg(colorscheme.general.border_fg)) .padding(Padding::horizontal(1)) - .style(Style::default().bg(colorscheme.general.background)); + .style( + Style::default() + .bg(colorscheme.general.background.unwrap_or_default()), + ); let metadata_table = build_metadata_table(mode, current_channel, app_metadata, colorscheme) @@ -64,7 +67,7 @@ fn draw_keymaps_block( .borders(Borders::ALL) .border_type(BorderType::Rounded) .border_style(Style::default().fg(colorscheme.border_fg)) - .style(Style::default().bg(colorscheme.background)) + .style(Style::default().bg(colorscheme.background.unwrap_or_default())) .padding(Padding::horizontal(1)); let table = keymap_table.block(keymaps_block); diff --git a/crates/television-screen/src/input.rs b/crates/television-screen/src/input.rs index 479e071..bb1892a 100644 --- a/crates/television-screen/src/input.rs +++ b/crates/television-screen/src/input.rs @@ -33,7 +33,10 @@ pub fn draw_input_box( .borders(Borders::ALL) .border_type(BorderType::Rounded) .border_style(Style::default().fg(colorscheme.general.border_fg)) - .style(Style::default().bg(colorscheme.general.background)); + .style( + Style::default() + .bg(colorscheme.general.background.unwrap_or_default()), + ); let input_block_inner = input_block.inner(rect); if input_block_inner.area() == 0 { diff --git a/crates/television-screen/src/preview.rs b/crates/television-screen/src/preview.rs index ed1f70d..528b9a8 100644 --- a/crates/television-screen/src/preview.rs +++ b/crates/television-screen/src/preview.rs @@ -283,7 +283,10 @@ pub fn draw_preview_content_block( .borders(Borders::ALL) .border_type(BorderType::Rounded) .border_style(Style::default().fg(colorscheme.general.border_fg)) - .style(Style::default().bg(colorscheme.general.background)) + .style( + Style::default() + .bg(colorscheme.general.background.unwrap_or_default()), + ) .padding(Padding::new(0, 1, 1, 0)); let preview_inner_block = diff --git a/crates/television-screen/src/remote_control.rs b/crates/television-screen/src/remote_control.rs index 6c0aa84..06fd79e 100644 --- a/crates/television-screen/src/remote_control.rs +++ b/crates/television-screen/src/remote_control.rs @@ -72,7 +72,10 @@ fn draw_rc_channels( .borders(Borders::ALL) .border_type(BorderType::Rounded) .border_style(Style::default().fg(colorscheme.general.border_fg)) - .style(Style::default().bg(colorscheme.general.background)) + .style( + Style::default() + .bg(colorscheme.general.background.unwrap_or_default()), + ) .padding(Padding::right(1)); let channel_list = build_results_list( @@ -98,7 +101,10 @@ fn draw_rc_input( .borders(Borders::ALL) .border_type(BorderType::Rounded) .border_style(Style::default().fg(colorscheme.general.border_fg)) - .style(Style::default().bg(colorscheme.general.background)); + .style( + Style::default() + .bg(colorscheme.general.background.unwrap_or_default()), + ); let input_block_inner = input_block.inner(area); @@ -156,8 +162,11 @@ fn draw_rc_logo( mode_color: Color, colorscheme: &GeneralColorscheme, ) { - let logo_block = Block::default() - .style(Style::default().fg(mode_color).bg(colorscheme.background)); + let logo_block = Block::default().style( + Style::default() + .fg(mode_color) + .bg(colorscheme.background.unwrap_or_default()), + ); let logo_paragraph = build_remote_logo_paragraph() .alignment(Alignment::Center) diff --git a/crates/television-screen/src/results.rs b/crates/television-screen/src/results.rs index 242fed2..6112a42 100644 --- a/crates/television-screen/src/results.rs +++ b/crates/television-screen/src/results.rs @@ -157,7 +157,10 @@ pub fn draw_results_list( .borders(Borders::ALL) .border_type(BorderType::Rounded) .border_style(Style::default().fg(colorscheme.general.border_fg)) - .style(Style::default().bg(colorscheme.general.background)) + .style( + Style::default() + .bg(colorscheme.general.background.unwrap_or_default()), + ) .padding(Padding::right(1)); let results_list = build_results_list( diff --git a/crates/television/config/themes.rs b/crates/television/config/themes.rs index 1b41c23..9a7ce61 100644 --- a/crates/television/config/themes.rs +++ b/crates/television/config/themes.rs @@ -36,7 +36,7 @@ impl Color { #[derive(Clone, Debug)] pub struct Theme { // general - pub background: Color, + pub background: Option, pub border_fg: Color, pub text_fg: Color, pub dimmed_text_fg: Color, @@ -103,7 +103,7 @@ impl Default for Theme { #[serde(rename = "theme")] struct Inner { // general - background: String, + background: Option, border_fg: String, // info text_fg: String, @@ -132,8 +132,14 @@ impl<'de> Deserialize<'de> for Theme { { let inner = Inner::deserialize(deserializer).unwrap(); Ok(Self { - background: Color::from_str(&inner.background) - .ok_or_else(|| serde::de::Error::custom("invalid color"))?, + background: inner + .background + .map(|s| { + Color::from_str(&s).ok_or_else(|| { + serde::de::Error::custom("invalid color") + }) + }) + .transpose()?, border_fg: Color::from_str(&inner.border_fg) .ok_or_else(|| serde::de::Error::custom("invalid color"))?, text_fg: Color::from_str(&inner.text_fg) @@ -197,7 +203,7 @@ impl Into for &Theme { impl Into for &Theme { fn into(self) -> GeneralColorscheme { GeneralColorscheme { - background: (&self.background).into(), + background: self.background.as_ref().map(Into::into), border_fg: (&self.border_fg).into(), } }