feat(ui): make background color optional and fallback to terminal default bg color (#219)

See #211
This commit is contained in:
Alex Pasmantier 2025-01-05 23:58:49 +01:00 committed by GitHub
parent 21fb3cb53c
commit 931a7bb5c3
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
7 changed files with 43 additions and 16 deletions

View File

@ -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: Option<Color>,
} }
#[derive(Debug, Clone)] #[derive(Debug, Clone)]

View File

@ -23,7 +23,7 @@ pub fn draw_logo_block(
.style( .style(
Style::default() Style::default()
.fg(mode_color) .fg(mode_color)
.bg(general_colorscheme.background), .bg(general_colorscheme.background.unwrap_or_default()),
) )
.padding(Padding::horizontal(1)); .padding(Padding::horizontal(1));
@ -45,7 +45,10 @@ 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().bg(colorscheme.general.background)); .style(
Style::default()
.bg(colorscheme.general.background.unwrap_or_default()),
);
let metadata_table = let metadata_table =
build_metadata_table(mode, current_channel, app_metadata, colorscheme) build_metadata_table(mode, current_channel, app_metadata, colorscheme)
@ -64,7 +67,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().bg(colorscheme.background)) .style(Style::default().bg(colorscheme.background.unwrap_or_default()))
.padding(Padding::horizontal(1)); .padding(Padding::horizontal(1));
let table = keymap_table.block(keymaps_block); let table = keymap_table.block(keymaps_block);

View File

@ -33,7 +33,10 @@ 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().bg(colorscheme.general.background)); .style(
Style::default()
.bg(colorscheme.general.background.unwrap_or_default()),
);
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 {

View File

@ -283,7 +283,10 @@ 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().bg(colorscheme.general.background)) .style(
Style::default()
.bg(colorscheme.general.background.unwrap_or_default()),
)
.padding(Padding::new(0, 1, 1, 0)); .padding(Padding::new(0, 1, 1, 0));
let preview_inner_block = let preview_inner_block =

View File

@ -72,7 +72,10 @@ 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().bg(colorscheme.general.background)) .style(
Style::default()
.bg(colorscheme.general.background.unwrap_or_default()),
)
.padding(Padding::right(1)); .padding(Padding::right(1));
let channel_list = build_results_list( let channel_list = build_results_list(
@ -98,7 +101,10 @@ 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().bg(colorscheme.general.background)); .style(
Style::default()
.bg(colorscheme.general.background.unwrap_or_default()),
);
let input_block_inner = input_block.inner(area); let input_block_inner = input_block.inner(area);
@ -156,8 +162,11 @@ fn draw_rc_logo(
mode_color: Color, mode_color: Color,
colorscheme: &GeneralColorscheme, colorscheme: &GeneralColorscheme,
) { ) {
let logo_block = Block::default() let logo_block = Block::default().style(
.style(Style::default().fg(mode_color).bg(colorscheme.background)); Style::default()
.fg(mode_color)
.bg(colorscheme.background.unwrap_or_default()),
);
let logo_paragraph = build_remote_logo_paragraph() let logo_paragraph = build_remote_logo_paragraph()
.alignment(Alignment::Center) .alignment(Alignment::Center)

View File

@ -157,7 +157,10 @@ 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().bg(colorscheme.general.background)) .style(
Style::default()
.bg(colorscheme.general.background.unwrap_or_default()),
)
.padding(Padding::right(1)); .padding(Padding::right(1));
let results_list = build_results_list( let results_list = build_results_list(

View File

@ -36,7 +36,7 @@ impl Color {
#[derive(Clone, Debug)] #[derive(Clone, Debug)]
pub struct Theme { pub struct Theme {
// general // general
pub background: Color, pub background: Option<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,
@ -103,7 +103,7 @@ impl Default for Theme {
#[serde(rename = "theme")] #[serde(rename = "theme")]
struct Inner { struct Inner {
// general // general
background: String, background: Option<String>,
border_fg: String, border_fg: String,
// info // info
text_fg: String, text_fg: String,
@ -132,8 +132,14 @@ 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) background: inner
.ok_or_else(|| serde::de::Error::custom("invalid color"))?, .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) 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)
@ -197,7 +203,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(), background: self.background.as_ref().map(Into::into),
border_fg: (&self.border_fg).into(), border_fg: (&self.border_fg).into(),
} }
} }