use crate::Color;
#[derive(Clone, Debug, PartialEq)]
pub struct Cue {
pub content: CueContent,
pub line: Option<CueLine>,
pub line_anchor: CueAnchor,
pub position: Option<f32>,
pub position_anchor: CueAnchor,
pub size: Option<f32>,
pub text_alignment: CueTextAlignment,
pub vertical: Option<CueVertical>,
pub window_color: Option<Color>,
}
impl Cue {
pub fn new(content: CueContent) -> Cue {
Cue {
content,
line: None,
line_anchor: CueAnchor::Start,
position: None,
position_anchor: CueAnchor::Start,
size: None,
text_alignment: CueTextAlignment::Center,
vertical: None,
window_color: None,
}
}
}
#[derive(Clone, Debug, PartialEq)]
pub enum CueContent {
Text(Vec<CueTextRun>),
Image(CueImage),
}
#[derive(Clone, Debug, PartialEq)]
pub struct CueTextRun {
pub text: String,
pub bold: bool,
pub italic: bool,
pub underline: bool,
pub color: Option<Color>,
pub background: Option<Color>,
pub font_size: Option<f32>,
pub font_family: Option<String>,
pub edge: Option<CueTextEdge>,
pub edge_color: Option<Color>,
}
impl CueTextRun {
pub const DEFAULT_FONT_SIZE: f32 = 0.0533;
pub fn new(text: impl Into<String>) -> CueTextRun {
CueTextRun {
text: text.into(),
bold: false,
italic: false,
underline: false,
color: None,
background: None,
font_size: None,
font_family: None,
edge: None,
edge_color: None,
}
}
}
#[derive(Clone, Debug, PartialEq)]
pub struct CueImage {
pub width: u32,
pub height: u32,
pub pixels: Vec<u8>,
pub display_height: f32,
}
#[derive(Clone, Copy, Debug, PartialEq)]
pub enum CueLine {
Fraction(f32),
Number(i32),
}
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub enum CueAnchor {
Start,
Middle,
End,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub enum CueTextAlignment {
Start,
Center,
End,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub enum CueVertical {
RightToLeft,
LeftToRight,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub enum CueTextEdge {
None,
Outline,
DropShadow,
Raised,
Depressed,
}