use std::collections::VecDeque;
use super::super::Editor;
use super::super::view::View;
pub struct Recorder {
pub frames: Vec<String>,
pending: VecDeque<View>,
delay: usize,
drop_every: usize,
built: usize,
}
pub use super::super::view::canonical;
impl Recorder {
pub fn new(delay: usize, drop_every: usize) -> Recorder {
Recorder { frames: Vec::new(), pending: VecDeque::new(), delay, drop_every, built: 0 }
}
pub fn frame(&mut self, e: &mut Editor) {
self.built += 1;
if self.drop_every > 0 && self.built.is_multiple_of(self.drop_every) {
return;
}
self.pending.push_back(e.view(0..e.stack().pages.len().min(2)));
while self.pending.len() > self.delay {
let v = self.pending.pop_front().expect("a pending view");
self.frames.push(canonical(&v));
}
}
}