//! Where does `settle_window()`'s answer come from? The port agent recomputes the //! publisher splash's widest keyframe-free gap as 190 units; `--settle` reports 8. //! One of the two readings is wrong and the file settles it. //! cargo run -p sylpheed-formats --example settle_window_check -- use std::path::PathBuf; use sylpheed_formats::{pak::PakArchive, ui_layout}; fn main() { let b: usize = std::env::args() .nth(1) .unwrap_or("10".into()) .parse() .unwrap(); let root = PathBuf::from(std::env::var("SYLPHEED_DISC").expect("SYLPHEED_DISC")); let ar = PakArchive::open(root.join("dat/GP_TITLE.pak")).expect("GP_TITLE"); let by = ar.read(&ar.entries()[b]).expect("entry"); let build = ui_layout::parse_build(&by).expect("parse"); println!("entry {b}: {} elements", build.elements.len()); for el in &build.elements { let ts: Vec = el .keyframes .iter() .map(|k| k.time.map(|v| v.to_string()).unwrap_or("-".into())) .collect(); println!(" {:26} [{}]", el.name, ts.join(" ")); } let mut ts: Vec = build .elements .iter() .flat_map(|e| e.keyframes.iter().filter_map(|k| k.time)) .collect(); ts.sort_unstable(); ts.dedup(); println!("\nunion of all element keyframe times: {ts:?}"); let gaps: Vec<(u32, u32, u32)> = ts.windows(2).map(|w| (w[1] - w[0], w[0], w[1])).collect(); let mut g = gaps.clone(); g.sort_by_key(|a| std::cmp::Reverse(a.0)); println!("widest gaps: {:?}", &g[..g.len().min(4)]); println!("settle_window() reports {:?}", build.settle_window()); }