mirror of
https://github.com/alexpasmantier/television.git
synced 2025-06-06 03:25:23 +00:00
feat(ui): make background color optional and fallback to terminal default bg color (#219)
See #211
This commit is contained in:
parent
21fb3cb53c
commit
931a7bb5c3
@ -13,7 +13,7 @@ pub struct Colorscheme {
|
||||
#[derive(Debug, Clone)]
|
||||
pub struct GeneralColorscheme {
|
||||
pub border_fg: Color,
|
||||
pub background: Color,
|
||||
pub background: Option<Color>,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
|
@ -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);
|
||||
|
@ -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 {
|
||||
|
@ -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 =
|
||||
|
@ -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)
|
||||
|
@ -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(
|
||||
|
@ -36,7 +36,7 @@ impl Color {
|
||||
#[derive(Clone, Debug)]
|
||||
pub struct Theme {
|
||||
// general
|
||||
pub background: Color,
|
||||
pub background: Option<Color>,
|
||||
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<String>,
|
||||
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<Colorscheme> for &Theme {
|
||||
impl Into<GeneralColorscheme> 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(),
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user