use crate::{Color, CueTextEdge, MediaChangeFuture};
pub trait CaptionSettings {
fn style(&self) -> CaptionStyle;
fn changed(&self) -> MediaChangeFuture;
}
#[derive(Clone, Debug, Default, PartialEq)]
pub struct CaptionStyle {
pub foreground_color: Option<CaptionSetting<Color>>,
pub foreground_opacity: Option<CaptionSetting<f64>>,
pub background_color: Option<CaptionSetting<Color>>,
pub background_opacity: Option<CaptionSetting<f64>>,
pub window_color: Option<CaptionSetting<Color>>,
pub window_opacity: Option<CaptionSetting<f64>>,
pub window_corner_radius: Option<CaptionSetting<f64>>,
pub edge: Option<CaptionSetting<CueTextEdge>>,
pub edge_color: Option<CaptionSetting<Color>>,
pub typeface: Option<CaptionSetting<CaptionTypeface>>,
pub text_scale: Option<CaptionSetting<f64>>,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub struct CaptionSetting<T> {
pub value: T,
pub behavior: CaptionBehavior,
}
impl<T> CaptionSetting<T> {
pub fn always(value: T) -> CaptionSetting<T> {
CaptionSetting {
value,
behavior: CaptionBehavior::Always,
}
}
pub fn where_media_says_nothing(value: T) -> CaptionSetting<T> {
CaptionSetting {
value,
behavior: CaptionBehavior::WhereMediaSaysNothing,
}
}
}
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub enum CaptionBehavior {
Always,
WhereMediaSaysNothing,
}
#[derive(Clone, Debug, PartialEq, Eq)]
pub enum CaptionTypeface {
Family(String),
Generic(GenericCaptionFont),
}
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub enum GenericCaptionFont {
MonospacedWithSerifs,
ProportionalWithSerifs,
MonospacedWithoutSerifs,
ProportionalWithoutSerifs,
Casual,
Cursive,
SmallCapitals,
}