From b7dca4bb2a2cf488407ae051b40782f03fcabc62 Mon Sep 17 00:00:00 2001 From: Can Celik Date: Thu, 13 Aug 2026 17:21:26 +0300 Subject: fix(graphics): support high-dpi direct file frames (#2680) --- src/ghostty/mod.rs | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) (limited to 'src/ghostty') diff --git a/src/ghostty/mod.rs b/src/ghostty/mod.rs index 4dead632..cea7c283 100644 --- a/src/ghostty/mod.rs +++ b/src/ghostty/mod.rs @@ -3488,6 +3488,43 @@ mod tests { let _ = std::fs::remove_dir_all(dir); } + #[cfg(unix)] + #[test] + fn kitty_graphics_file_upload_can_be_placed_later() { + let dir = std::env::temp_dir().join(format!( + "herdr-kitty-file-upload-test-{}", + std::process::id() + )); + std::fs::create_dir_all(&dir).unwrap(); + let path = dir.join("pixel.rgba"); + std::fs::write(&path, [255, 0, 0, 255]).unwrap(); + + let mut terminal = Terminal::new(10, 5, 0).unwrap(); + terminal.enable_kitty_graphics().unwrap(); + terminal.resize(10, 5, 8, 16).unwrap(); + let mut upload = Vec::new(); + crate::kitty_graphics::encode_kitty_regular_file( + &mut upload, + &[], + "a=t,f=32,s=1,v=1,i=10,q=0", + path.to_str().unwrap(), + ); + terminal.write(&upload); + assert!(terminal.kitty_image_placements().unwrap().is_empty()); + + terminal.write(b"\x1b_Ga=p,i=10,p=5,c=10,r=5,C=1,q=2\x1b\\"); + let placements = terminal.kitty_image_placements().unwrap(); + assert_eq!(placements.len(), 1); + assert_eq!(placements[0].image_id, 10); + assert_eq!(placements[0].placement_id, 5); + assert_eq!(placements[0].image_width, 1); + assert_eq!(placements[0].image_height, 1); + assert_eq!(placements[0].format, KittyImageFormat::Rgba); + assert_eq!(placements[0].data, [255, 0, 0, 255]); + + let _ = std::fs::remove_dir_all(dir); + } + #[test] fn kitty_graphics_unicode_placeholder_placement_is_queryable() { let mut terminal = Terminal::new(10, 5, 0).unwrap(); -- cgit v1.2.3