use ratatui::style::{Color as RatColor, Modifier, Style};
use crate::theme::Color;
pub fn to_ratatui(color: Color) -> RatColor {
match color {
Color::Default => RatColor::Reset,
Color::Rgb(red, green, blue) => RatColor::Rgb(red, green, blue),
}
}
pub fn fg(color: Color) -> Style {
Style::default().fg(to_ratatui(color))
}
pub fn bg(color: Color) -> Style {
Style::default().bg(to_ratatui(color))
}
pub fn dim() -> Style {
Style::default().add_modifier(Modifier::DIM)
}
pub fn darken(color: RatColor, factor: f32) -> RatColor {
let scale = |channel: u8| (f32::from(channel) * factor).round() as u8;
match color {
RatColor::Rgb(red, green, blue) => {
RatColor::Rgb(scale(red), scale(green), scale(blue))
}
other => other,
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn darken_scales_rgb_channels() {
assert_eq!(
darken(RatColor::Rgb(100, 200, 50), 0.5),
RatColor::Rgb(50, 100, 25),
);
}
#[test]
fn darken_leaves_non_rgb_unchanged() {
assert_eq!(darken(RatColor::Reset, 0.5), RatColor::Reset);
assert_eq!(darken(RatColor::Red, 0.5), RatColor::Red);
}
}