2018-03-11 03:33:06 +11:00
|
|
|
//! This module contains the `object style` that can be applied to an `styled object`.
|
|
|
|
|
2018-01-04 00:43:54 +11:00
|
|
|
use std::fmt::Display;
|
2018-03-11 03:33:06 +11:00
|
|
|
use style::{Color, StyledObject};
|
2018-06-10 07:19:02 +10:00
|
|
|
use ScreenManager;
|
2018-06-10 05:59:43 +10:00
|
|
|
use std::sync::Mutex;
|
|
|
|
use std::rc::Rc;
|
2018-06-17 04:10:51 +10:00
|
|
|
|
2018-03-04 01:40:51 +11:00
|
|
|
#[cfg(unix)]
|
2018-01-26 04:26:08 +11:00
|
|
|
use super::super::Attribute;
|
2018-01-28 04:48:49 +11:00
|
|
|
|
2018-01-18 09:06:45 +11:00
|
|
|
/// Struct that contains the style properties that can be applied to an displayable object.
|
2018-01-04 00:43:54 +11:00
|
|
|
#[derive(Clone)]
|
2018-01-07 07:31:14 +11:00
|
|
|
pub struct ObjectStyle {
|
2018-01-04 00:43:54 +11:00
|
|
|
pub fg_color: Option<Color>,
|
|
|
|
pub bg_color: Option<Color>,
|
2018-01-28 04:48:49 +11:00
|
|
|
|
2018-01-26 04:26:08 +11:00
|
|
|
#[cfg(unix)]
|
|
|
|
pub attrs: Vec<Attribute>
|
2018-01-04 00:43:54 +11:00
|
|
|
}
|
|
|
|
|
2018-01-07 07:31:14 +11:00
|
|
|
impl Default for ObjectStyle {
|
|
|
|
fn default() -> ObjectStyle {
|
|
|
|
ObjectStyle {
|
|
|
|
fg_color: Some(Color::White),
|
|
|
|
bg_color: Some(Color::Black),
|
2018-01-26 04:26:08 +11:00
|
|
|
#[cfg(unix)]
|
|
|
|
attrs: Vec::new()
|
2018-01-07 07:31:14 +11:00
|
|
|
}
|
2018-01-04 00:43:54 +11:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-01-07 07:31:14 +11:00
|
|
|
impl ObjectStyle {
|
2018-01-10 06:36:48 +11:00
|
|
|
/// Apply an `StyledObject` to the passed displayable object.
|
2018-06-10 05:59:43 +10:00
|
|
|
pub fn apply_to<D>(&self, val: D, screen: Rc<Mutex<ScreenManager>>) -> StyledObject<D>
|
2018-01-07 07:31:14 +11:00
|
|
|
where
|
|
|
|
D: Display,
|
|
|
|
{
|
2018-01-04 00:43:54 +11:00
|
|
|
StyledObject {
|
|
|
|
object_style: self.clone(),
|
2018-06-10 05:59:43 +10:00
|
|
|
screen_manager: screen,
|
2018-01-07 07:31:14 +11:00
|
|
|
content: val,
|
2018-01-04 00:43:54 +11:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-01-10 06:36:48 +11:00
|
|
|
/// Get an new instance of `ObjectStyle`
|
2018-01-07 07:31:14 +11:00
|
|
|
pub fn new() -> ObjectStyle {
|
|
|
|
return ObjectStyle {
|
|
|
|
fg_color: None,
|
|
|
|
bg_color: None,
|
2018-01-26 04:26:08 +11:00
|
|
|
#[cfg(unix)]
|
|
|
|
attrs: Vec::new()
|
2018-01-07 07:31:14 +11:00
|
|
|
};
|
2018-01-04 00:43:54 +11:00
|
|
|
}
|
|
|
|
|
|
|
|
/// Set the background color of `ObjectStyle` to the passed color.
|
2018-01-07 07:31:14 +11:00
|
|
|
pub fn bg(mut self, color: Color) -> ObjectStyle {
|
2018-01-04 00:43:54 +11:00
|
|
|
self.bg_color = Some(color);
|
|
|
|
self
|
|
|
|
}
|
|
|
|
|
|
|
|
/// Set the foreground color of `ObjectStyle` to the passed color.
|
2018-01-07 07:31:14 +11:00
|
|
|
pub fn fg(mut self, color: Color) -> ObjectStyle {
|
2018-01-04 00:43:54 +11:00
|
|
|
self.fg_color = Some(color);
|
|
|
|
self
|
|
|
|
}
|
2018-01-26 04:26:08 +11:00
|
|
|
|
2018-01-28 04:48:49 +11:00
|
|
|
#[cfg(unix)]
|
2018-01-28 04:26:08 +11:00
|
|
|
pub fn add_attr(&mut self, attr: Attribute)
|
2018-01-26 04:26:08 +11:00
|
|
|
{
|
|
|
|
self.attrs.push(attr);
|
|
|
|
}
|
2018-01-04 00:43:54 +11:00
|
|
|
}
|