use crate::types::VideoConfig;
#[derive(Debug, Clone, PartialEq)]
pub struct TimelineContext {
pub frame: u32,
pub(crate) absolute_frame: u32,
}
impl TimelineContext {
pub fn new(frame: u32) -> Self {
Self {
frame,
absolute_frame: frame,
}
}
pub fn offset_from(parent: &Self, offset: u32) -> Self {
let frame = parent.frame.saturating_sub(offset);
Self {
frame,
absolute_frame: parent.absolute_frame,
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn nested_offsets_use_the_parent_local_frame() {
let root = TimelineContext::new(45);
let parent = TimelineContext::offset_from(&root, 30);
let child = TimelineContext::offset_from(&parent, 10);
assert_eq!(parent.frame, 15);
assert_eq!(child.frame, 5);
assert_eq!(child.absolute_frame, 45);
}
}
#[derive(Debug, Clone, PartialEq)]
pub struct VideoConfigContext(pub VideoConfig);