diff --git a/crates/television-previewers/src/ansi/parser.rs b/crates/television-previewers/src/ansi/parser.rs index 27a6080..cabad8b 100644 --- a/crates/television-previewers/src/ansi/parser.rs +++ b/crates/television-previewers/src/ansi/parser.rs @@ -77,7 +77,6 @@ impl From for tui::style::Style { } } AnsiCode::ForegroundColor(color) => style = style.fg(color), - AnsiCode::BackgroundColor(color) => style = style.bg(color), _ => (), } } diff --git a/crates/television-screen/src/colors.rs b/crates/television-screen/src/colors.rs index 27e090d..3264864 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: Color, } #[derive(Debug, Clone)] diff --git a/crates/television-screen/src/help.rs b/crates/television-screen/src/help.rs index 2801b62..930f1e9 100644 --- a/crates/television-screen/src/help.rs +++ b/crates/television-screen/src/help.rs @@ -20,7 +20,11 @@ pub fn draw_logo_block( .borders(Borders::ALL) .border_type(BorderType::Rounded) .border_style(Style::default().fg(general_colorscheme.border_fg)) - .style(Style::default().fg(mode_color)) + .style( + Style::default() + .fg(mode_color) + .bg(general_colorscheme.background), + ) .padding(Padding::horizontal(1)); let logo_paragraph = build_logo_paragraph().block(logo_block); @@ -41,7 +45,7 @@ fn draw_metadata_block( .border_type(BorderType::Rounded) .border_style(Style::default().fg(colorscheme.general.border_fg)) .padding(Padding::horizontal(1)) - .style(Style::default()); + .style(Style::default().bg(colorscheme.general.background)); let metadata_table = build_metadata_table(mode, current_channel, app_metadata, colorscheme) @@ -60,7 +64,7 @@ fn draw_keymaps_block( .borders(Borders::ALL) .border_type(BorderType::Rounded) .border_style(Style::default().fg(colorscheme.border_fg)) - .style(Style::default()) + .style(Style::default().bg(colorscheme.background)) .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 54660b8..b67cc22 100644 --- a/crates/television-screen/src/input.rs +++ b/crates/television-screen/src/input.rs @@ -34,7 +34,7 @@ pub fn draw_input_box( .borders(Borders::ALL) .border_type(BorderType::Rounded) .border_style(Style::default().fg(colorscheme.general.border_fg)) - .style(Style::default()); + .style(Style::default().bg(colorscheme.general.background)); 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 bdda4c3..9224ed6 100644 --- a/crates/television-screen/src/preview.rs +++ b/crates/television-screen/src/preview.rs @@ -280,7 +280,7 @@ pub fn draw_preview_title_block( ), ) .alignment(Alignment::Left) - .style(Style::default()); + .style(Style::default().bg(colorscheme.general.background)); f.render_widget(preview_title, rect); Ok(()) } @@ -299,7 +299,7 @@ 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()) + .style(Style::default().bg(colorscheme.general.background)) .padding(Padding::right(1)); let preview_inner_block = diff --git a/crates/television-screen/src/remote_control.rs b/crates/television-screen/src/remote_control.rs index e348d1d..6c0aa84 100644 --- a/crates/television-screen/src/remote_control.rs +++ b/crates/television-screen/src/remote_control.rs @@ -1,6 +1,6 @@ use std::collections::HashMap; -use crate::colors::Colorscheme; +use crate::colors::{Colorscheme, GeneralColorscheme}; use crate::logo::build_remote_logo_paragraph; use crate::mode::{mode_color, Mode}; use crate::results::build_results_list; @@ -50,7 +50,12 @@ pub fn draw_remote_control( colorscheme, ); draw_rc_input(f, layout[1], input_state, colorscheme)?; - draw_rc_logo(f, layout[2], mode_color(*mode, &colorscheme.mode)); + draw_rc_logo( + f, + layout[2], + mode_color(*mode, &colorscheme.mode), + &colorscheme.general, + ); Ok(()) } @@ -67,7 +72,7 @@ fn draw_rc_channels( .borders(Borders::ALL) .border_type(BorderType::Rounded) .border_style(Style::default().fg(colorscheme.general.border_fg)) - .style(Style::default()) + .style(Style::default().bg(colorscheme.general.background)) .padding(Padding::right(1)); let channel_list = build_results_list( @@ -93,7 +98,7 @@ fn draw_rc_input( .borders(Borders::ALL) .border_type(BorderType::Rounded) .border_style(Style::default().fg(colorscheme.general.border_fg)) - .style(Style::default()); + .style(Style::default().bg(colorscheme.general.background)); let input_block_inner = input_block.inner(area); @@ -145,8 +150,14 @@ fn draw_rc_input( )); Ok(()) } -fn draw_rc_logo(f: &mut Frame, area: Rect, mode_color: Color) { - let logo_block = Block::default().style(Style::default().fg(mode_color)); +fn draw_rc_logo( + f: &mut Frame, + area: Rect, + mode_color: Color, + colorscheme: &GeneralColorscheme, +) { + let logo_block = Block::default() + .style(Style::default().fg(mode_color).bg(colorscheme.background)); 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 c1d98bf..014dfe5 100644 --- a/crates/television-screen/src/results.rs +++ b/crates/television-screen/src/results.rs @@ -149,7 +149,7 @@ pub fn draw_results_list( .borders(Borders::ALL) .border_type(BorderType::Rounded) .border_style(Style::default().fg(colorscheme.general.border_fg)) - .style(Style::default()) + .style(Style::default().bg(colorscheme.general.background)) .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 288287f..1b41c23 100644 --- a/crates/television/config/themes.rs +++ b/crates/television/config/themes.rs @@ -36,6 +36,7 @@ impl Color { #[derive(Clone, Debug)] pub struct Theme { // general + pub background: Color, pub border_fg: Color, pub text_fg: Color, pub dimmed_text_fg: Color, @@ -102,6 +103,7 @@ impl Default for Theme { #[serde(rename = "theme")] struct Inner { // general + background: String, border_fg: String, // info text_fg: String, @@ -130,6 +132,8 @@ 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"))?, 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) @@ -193,6 +197,7 @@ impl Into for &Theme { impl Into for &Theme { fn into(self) -> GeneralColorscheme { GeneralColorscheme { + background: (&self.background).into(), border_fg: (&self.border_fg).into(), } } diff --git a/themes/catppuccin.toml b/themes/catppuccin.toml index a1e5ed9..355c8f4 100644 --- a/themes/catppuccin.toml +++ b/themes/catppuccin.toml @@ -1,4 +1,5 @@ # general +background = '#1e1e2e' border_fg = '#6c7086' text_fg = '#cdd6f4' dimmed_text_fg = '#6c7086' diff --git a/themes/gruvbox-dark.toml b/themes/gruvbox-dark.toml index 9b17b8b..7898e04 100644 --- a/themes/gruvbox-dark.toml +++ b/themes/gruvbox-dark.toml @@ -1,4 +1,5 @@ # general +background = '#282828' border_fg = '#928374' text_fg = '#ebdbb2' dimmed_text_fg = '#a89984' diff --git a/themes/nord.toml b/themes/nord.toml index 3910842..b4854db 100644 --- a/themes/nord.toml +++ b/themes/nord.toml @@ -1,4 +1,5 @@ # general +background = '#2e3440' border_fg = '#434c5e' text_fg = '#d8dee9' dimmed_text_fg = '#4c566a' diff --git a/themes/solarized-dark.toml b/themes/solarized-dark.toml index 8c64b08..a2fac07 100644 --- a/themes/solarized-dark.toml +++ b/themes/solarized-dark.toml @@ -1,4 +1,5 @@ # general +background = '#002b36' border_fg = '#586e75' text_fg = '#eee8d5' dimmed_text_fg = '#93a1a1'