use crate::color::TerminalColor;
use crate::renderer::default_renderer;
use crate::style::{properties::*, Style};
use crate::utils::which_sides_color;
impl Style {
pub fn foreground<C: TerminalColor>(mut self, color: C) -> Self {
self.fg_color = Some(color.token(default_renderer()));
self.set_prop(FOREGROUND_KEY);
self
}
pub fn background<C: TerminalColor>(mut self, color: C) -> Self {
self.bg_color = Some(color.token(default_renderer()));
self.set_prop(BACKGROUND_KEY);
self
}
pub fn border_top_foreground<C: TerminalColor>(mut self, c: C) -> Self {
self.border_top_fg_color = Some(c.token(default_renderer()));
self.set_prop(BORDER_TOP_FOREGROUND_KEY);
self
}
pub fn border_right_foreground<C: TerminalColor>(mut self, c: C) -> Self {
self.border_right_fg_color = Some(c.token(default_renderer()));
self.set_prop(BORDER_RIGHT_FOREGROUND_KEY);
self
}
pub fn border_bottom_foreground<C: TerminalColor>(mut self, c: C) -> Self {
self.border_bottom_fg_color = Some(c.token(default_renderer()));
self.set_prop(BORDER_BOTTOM_FOREGROUND_KEY);
self
}
pub fn border_left_foreground<C: TerminalColor>(mut self, c: C) -> Self {
self.border_left_fg_color = Some(c.token(default_renderer()));
self.set_prop(BORDER_LEFT_FOREGROUND_KEY);
self
}
pub fn border_top_background<C: TerminalColor>(mut self, c: C) -> Self {
self.border_top_bg_color = Some(c.token(default_renderer()));
self.set_prop(BORDER_TOP_BACKGROUND_KEY);
self
}
pub fn border_right_background<C: TerminalColor>(mut self, c: C) -> Self {
self.border_right_bg_color = Some(c.token(default_renderer()));
self.set_prop(BORDER_RIGHT_BACKGROUND_KEY);
self
}
pub fn border_bottom_background<C: TerminalColor>(mut self, c: C) -> Self {
self.border_bottom_bg_color = Some(c.token(default_renderer()));
self.set_prop(BORDER_BOTTOM_BACKGROUND_KEY);
self
}
pub fn border_left_background<C: TerminalColor>(mut self, c: C) -> Self {
self.border_left_bg_color = Some(c.token(default_renderer()));
self.set_prop(BORDER_LEFT_BACKGROUND_KEY);
self
}
pub fn border_foreground<C: TerminalColor + Clone>(self, c: C) -> Self {
self.border_top_foreground(c.clone())
.border_right_foreground(c.clone())
.border_bottom_foreground(c.clone())
.border_left_foreground(c)
}
pub fn border_background<C: TerminalColor + Clone>(self, c: C) -> Self {
self.border_top_background(c.clone())
.border_right_background(c.clone())
.border_bottom_background(c.clone())
.border_left_background(c)
}
pub fn margin_background<C: TerminalColor>(mut self, c: C) -> Self {
self.margin_bg_color = Some(c.token(default_renderer()));
self.set_prop(MARGIN_BACKGROUND_KEY);
self
}
pub fn border_foreground_shorthand<C: TerminalColor + Clone>(self, colors: &[C]) -> Self {
if colors.is_empty() {
return self;
}
let result = which_sides_color(colors);
let (top, right, bottom, left, ok) = result;
if !ok {
return self;
}
self.border_top_foreground(top)
.border_right_foreground(right)
.border_bottom_foreground(bottom)
.border_left_foreground(left)
}
pub fn border_background_shorthand<C: TerminalColor + Clone>(self, colors: &[C]) -> Self {
if colors.is_empty() {
return self;
}
let result = which_sides_color(colors);
let (top, right, bottom, left, ok) = result;
if !ok {
return self;
}
self.border_top_background(top)
.border_right_background(right)
.border_bottom_background(bottom)
.border_left_background(left)
}
}