Add configurable theme

This commit is contained in:
KoffeinFlummi
2019-03-22 01:08:29 +01:00
parent b7dcfb54fa
commit 69b79f5d63
6 changed files with 90 additions and 16 deletions

View File

@@ -1,14 +1,39 @@
use cursive::theme::Color::*;
use cursive::theme::PaletteColor::*;
use cursive::theme::BaseColor::*;
use cursive::theme::*;
pub fn default() -> Theme {
use config::Config;
macro_rules! load_color {
( $cfg: expr, $member: ident, $default: expr ) => {
$cfg.theme.as_ref()
.and_then(|t| t.$member.clone())
.map(|c| Color::parse(c.as_ref()).expect(&format!("Failed to parse color \"{}\"", c)))
.unwrap_or($default)
}
}
pub fn load(cfg: &Config) -> Theme {
let mut palette = Palette::default();
let borders = BorderStyle::None;
palette[Background] = TerminalDefault;
palette[View] = TerminalDefault;
palette[Primary] = TerminalDefault;
palette[Background] = load_color!(cfg, background, TerminalDefault);
palette[View] = load_color!(cfg, background, TerminalDefault);
palette[Primary] = load_color!(cfg, primary, TerminalDefault);
palette[Secondary] = load_color!(cfg, secondary, Dark(Blue));
palette[TitlePrimary] = load_color!(cfg, title, Dark(Red));
palette[Tertiary] = load_color!(cfg, highlight, TerminalDefault);
palette[Highlight] = load_color!(cfg, highlight_bg, Dark(Red));
palette.set_color("playing", load_color!(cfg, playing, Dark(Blue)));
palette.set_color("playing_bg", load_color!(cfg, playing_bg, TerminalDefault));
palette.set_color("error", load_color!(cfg, error, TerminalDefault));
palette.set_color("error_bg", load_color!(cfg, error_bg, Dark(Red)));
palette.set_color("statusbar_progress", load_color!(cfg, statusbar_progress, Dark(Blue)));
palette.set_color("statusbar", load_color!(cfg, statusbar, Dark(Yellow)));
palette.set_color("statusbar_bg", load_color!(cfg, statusbar_bg, TerminalDefault));
palette.set_color("cmdline", load_color!(cfg, cmdline, TerminalDefault));
palette.set_color("cmdline_bg", load_color!(cfg, cmdline_bg, TerminalDefault));
Theme {
shadow: false,