mirror of
https://github.com/alexpasmantier/television.git
synced 2025-06-06 19:45:23 +00:00
feat(themes): add support for global themes background colors (#120)
This commit is contained in:
parent
ea752b13e6
commit
11da96d7fb
@ -77,7 +77,6 @@ impl From<AnsiStates> for tui::style::Style {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
AnsiCode::ForegroundColor(color) => style = style.fg(color),
|
AnsiCode::ForegroundColor(color) => style = style.fg(color),
|
||||||
AnsiCode::BackgroundColor(color) => style = style.bg(color),
|
|
||||||
_ => (),
|
_ => (),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -13,7 +13,7 @@ pub struct Colorscheme {
|
|||||||
#[derive(Debug, Clone)]
|
#[derive(Debug, Clone)]
|
||||||
pub struct GeneralColorscheme {
|
pub struct GeneralColorscheme {
|
||||||
pub border_fg: Color,
|
pub border_fg: Color,
|
||||||
//pub background: Color,
|
pub background: Color,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Clone)]
|
#[derive(Debug, Clone)]
|
||||||
|
@ -20,7 +20,11 @@ pub fn draw_logo_block(
|
|||||||
.borders(Borders::ALL)
|
.borders(Borders::ALL)
|
||||||
.border_type(BorderType::Rounded)
|
.border_type(BorderType::Rounded)
|
||||||
.border_style(Style::default().fg(general_colorscheme.border_fg))
|
.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));
|
.padding(Padding::horizontal(1));
|
||||||
|
|
||||||
let logo_paragraph = build_logo_paragraph().block(logo_block);
|
let logo_paragraph = build_logo_paragraph().block(logo_block);
|
||||||
@ -41,7 +45,7 @@ fn draw_metadata_block(
|
|||||||
.border_type(BorderType::Rounded)
|
.border_type(BorderType::Rounded)
|
||||||
.border_style(Style::default().fg(colorscheme.general.border_fg))
|
.border_style(Style::default().fg(colorscheme.general.border_fg))
|
||||||
.padding(Padding::horizontal(1))
|
.padding(Padding::horizontal(1))
|
||||||
.style(Style::default());
|
.style(Style::default().bg(colorscheme.general.background));
|
||||||
|
|
||||||
let metadata_table =
|
let metadata_table =
|
||||||
build_metadata_table(mode, current_channel, app_metadata, colorscheme)
|
build_metadata_table(mode, current_channel, app_metadata, colorscheme)
|
||||||
@ -60,7 +64,7 @@ fn draw_keymaps_block(
|
|||||||
.borders(Borders::ALL)
|
.borders(Borders::ALL)
|
||||||
.border_type(BorderType::Rounded)
|
.border_type(BorderType::Rounded)
|
||||||
.border_style(Style::default().fg(colorscheme.border_fg))
|
.border_style(Style::default().fg(colorscheme.border_fg))
|
||||||
.style(Style::default())
|
.style(Style::default().bg(colorscheme.background))
|
||||||
.padding(Padding::horizontal(1));
|
.padding(Padding::horizontal(1));
|
||||||
|
|
||||||
let table = keymap_table.block(keymaps_block);
|
let table = keymap_table.block(keymaps_block);
|
||||||
|
@ -34,7 +34,7 @@ pub fn draw_input_box(
|
|||||||
.borders(Borders::ALL)
|
.borders(Borders::ALL)
|
||||||
.border_type(BorderType::Rounded)
|
.border_type(BorderType::Rounded)
|
||||||
.border_style(Style::default().fg(colorscheme.general.border_fg))
|
.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);
|
let input_block_inner = input_block.inner(rect);
|
||||||
if input_block_inner.area() == 0 {
|
if input_block_inner.area() == 0 {
|
||||||
|
@ -280,7 +280,7 @@ pub fn draw_preview_title_block(
|
|||||||
),
|
),
|
||||||
)
|
)
|
||||||
.alignment(Alignment::Left)
|
.alignment(Alignment::Left)
|
||||||
.style(Style::default());
|
.style(Style::default().bg(colorscheme.general.background));
|
||||||
f.render_widget(preview_title, rect);
|
f.render_widget(preview_title, rect);
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
@ -299,7 +299,7 @@ pub fn draw_preview_content_block(
|
|||||||
.borders(Borders::ALL)
|
.borders(Borders::ALL)
|
||||||
.border_type(BorderType::Rounded)
|
.border_type(BorderType::Rounded)
|
||||||
.border_style(Style::default().fg(colorscheme.general.border_fg))
|
.border_style(Style::default().fg(colorscheme.general.border_fg))
|
||||||
.style(Style::default())
|
.style(Style::default().bg(colorscheme.general.background))
|
||||||
.padding(Padding::right(1));
|
.padding(Padding::right(1));
|
||||||
|
|
||||||
let preview_inner_block =
|
let preview_inner_block =
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
|
|
||||||
use crate::colors::Colorscheme;
|
use crate::colors::{Colorscheme, GeneralColorscheme};
|
||||||
use crate::logo::build_remote_logo_paragraph;
|
use crate::logo::build_remote_logo_paragraph;
|
||||||
use crate::mode::{mode_color, Mode};
|
use crate::mode::{mode_color, Mode};
|
||||||
use crate::results::build_results_list;
|
use crate::results::build_results_list;
|
||||||
@ -50,7 +50,12 @@ pub fn draw_remote_control(
|
|||||||
colorscheme,
|
colorscheme,
|
||||||
);
|
);
|
||||||
draw_rc_input(f, layout[1], input_state, 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(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -67,7 +72,7 @@ fn draw_rc_channels(
|
|||||||
.borders(Borders::ALL)
|
.borders(Borders::ALL)
|
||||||
.border_type(BorderType::Rounded)
|
.border_type(BorderType::Rounded)
|
||||||
.border_style(Style::default().fg(colorscheme.general.border_fg))
|
.border_style(Style::default().fg(colorscheme.general.border_fg))
|
||||||
.style(Style::default())
|
.style(Style::default().bg(colorscheme.general.background))
|
||||||
.padding(Padding::right(1));
|
.padding(Padding::right(1));
|
||||||
|
|
||||||
let channel_list = build_results_list(
|
let channel_list = build_results_list(
|
||||||
@ -93,7 +98,7 @@ fn draw_rc_input(
|
|||||||
.borders(Borders::ALL)
|
.borders(Borders::ALL)
|
||||||
.border_type(BorderType::Rounded)
|
.border_type(BorderType::Rounded)
|
||||||
.border_style(Style::default().fg(colorscheme.general.border_fg))
|
.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);
|
let input_block_inner = input_block.inner(area);
|
||||||
|
|
||||||
@ -145,8 +150,14 @@ fn draw_rc_input(
|
|||||||
));
|
));
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
fn draw_rc_logo(f: &mut Frame, area: Rect, mode_color: Color) {
|
fn draw_rc_logo(
|
||||||
let logo_block = Block::default().style(Style::default().fg(mode_color));
|
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()
|
let logo_paragraph = build_remote_logo_paragraph()
|
||||||
.alignment(Alignment::Center)
|
.alignment(Alignment::Center)
|
||||||
|
@ -149,7 +149,7 @@ pub fn draw_results_list(
|
|||||||
.borders(Borders::ALL)
|
.borders(Borders::ALL)
|
||||||
.border_type(BorderType::Rounded)
|
.border_type(BorderType::Rounded)
|
||||||
.border_style(Style::default().fg(colorscheme.general.border_fg))
|
.border_style(Style::default().fg(colorscheme.general.border_fg))
|
||||||
.style(Style::default())
|
.style(Style::default().bg(colorscheme.general.background))
|
||||||
.padding(Padding::right(1));
|
.padding(Padding::right(1));
|
||||||
|
|
||||||
let results_list = build_results_list(
|
let results_list = build_results_list(
|
||||||
|
@ -36,6 +36,7 @@ impl Color {
|
|||||||
#[derive(Clone, Debug)]
|
#[derive(Clone, Debug)]
|
||||||
pub struct Theme {
|
pub struct Theme {
|
||||||
// general
|
// general
|
||||||
|
pub background: Color,
|
||||||
pub border_fg: Color,
|
pub border_fg: Color,
|
||||||
pub text_fg: Color,
|
pub text_fg: Color,
|
||||||
pub dimmed_text_fg: Color,
|
pub dimmed_text_fg: Color,
|
||||||
@ -102,6 +103,7 @@ impl Default for Theme {
|
|||||||
#[serde(rename = "theme")]
|
#[serde(rename = "theme")]
|
||||||
struct Inner {
|
struct Inner {
|
||||||
// general
|
// general
|
||||||
|
background: String,
|
||||||
border_fg: String,
|
border_fg: String,
|
||||||
// info
|
// info
|
||||||
text_fg: String,
|
text_fg: String,
|
||||||
@ -130,6 +132,8 @@ impl<'de> Deserialize<'de> for Theme {
|
|||||||
{
|
{
|
||||||
let inner = Inner::deserialize(deserializer).unwrap();
|
let inner = Inner::deserialize(deserializer).unwrap();
|
||||||
Ok(Self {
|
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)
|
border_fg: Color::from_str(&inner.border_fg)
|
||||||
.ok_or_else(|| serde::de::Error::custom("invalid color"))?,
|
.ok_or_else(|| serde::de::Error::custom("invalid color"))?,
|
||||||
text_fg: Color::from_str(&inner.text_fg)
|
text_fg: Color::from_str(&inner.text_fg)
|
||||||
@ -193,6 +197,7 @@ impl Into<Colorscheme> for &Theme {
|
|||||||
impl Into<GeneralColorscheme> for &Theme {
|
impl Into<GeneralColorscheme> for &Theme {
|
||||||
fn into(self) -> GeneralColorscheme {
|
fn into(self) -> GeneralColorscheme {
|
||||||
GeneralColorscheme {
|
GeneralColorscheme {
|
||||||
|
background: (&self.background).into(),
|
||||||
border_fg: (&self.border_fg).into(),
|
border_fg: (&self.border_fg).into(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
# general
|
# general
|
||||||
|
background = '#1e1e2e'
|
||||||
border_fg = '#6c7086'
|
border_fg = '#6c7086'
|
||||||
text_fg = '#cdd6f4'
|
text_fg = '#cdd6f4'
|
||||||
dimmed_text_fg = '#6c7086'
|
dimmed_text_fg = '#6c7086'
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
# general
|
# general
|
||||||
|
background = '#282828'
|
||||||
border_fg = '#928374'
|
border_fg = '#928374'
|
||||||
text_fg = '#ebdbb2'
|
text_fg = '#ebdbb2'
|
||||||
dimmed_text_fg = '#a89984'
|
dimmed_text_fg = '#a89984'
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
# general
|
# general
|
||||||
|
background = '#2e3440'
|
||||||
border_fg = '#434c5e'
|
border_fg = '#434c5e'
|
||||||
text_fg = '#d8dee9'
|
text_fg = '#d8dee9'
|
||||||
dimmed_text_fg = '#4c566a'
|
dimmed_text_fg = '#4c566a'
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
# general
|
# general
|
||||||
|
background = '#002b36'
|
||||||
border_fg = '#586e75'
|
border_fg = '#586e75'
|
||||||
text_fg = '#eee8d5'
|
text_fg = '#eee8d5'
|
||||||
dimmed_text_fg = '#93a1a1'
|
dimmed_text_fg = '#93a1a1'
|
||||||
|
Loading…
x
Reference in New Issue
Block a user