summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKostya Shishkov <kostya.shishkov@gmail.com>2023-06-16 17:53:17 +0200
committerKostya Shishkov <kostya.shishkov@gmail.com>2023-06-16 17:53:17 +0200
commite2272b539493b35660f3168911d9ac8890637d35 (patch)
treee55f177814fcbcf954ce12583664a8dca6b51c25
parent6a5b710289ae910ad5518a24c133b0b80ec9da82 (diff)
downloadnihav-player-e2272b539493b35660f3168911d9ac8890637d35.tar.gz
try to preserve window position when playing multiple files
-rw-r--r--videoplayer/src/main.rs15
1 files changed, 13 insertions, 2 deletions
diff --git a/videoplayer/src/main.rs b/videoplayer/src/main.rs
index a3c7f43..bc453c3 100644
--- a/videoplayer/src/main.rs
+++ b/videoplayer/src/main.rs
@@ -246,6 +246,8 @@ struct Player {
sdl_context: sdl2::Sdl,
vsystem: sdl2::VideoSubsystem,
asystem: sdl2::AudioSubsystem,
+ xpos: Option<i32>,
+ ypos: Option<i32>,
acontrol: AudioControl,
vcontrol: VideoControl,
@@ -284,6 +286,8 @@ impl Player {
let vcontrol = VideoControl::new(None, 0, 0, 0, 0);
Self {
sdl_context, asystem, vsystem,
+ xpos: None,
+ ypos: None,
acontrol, vcontrol,
@@ -643,8 +647,12 @@ impl Player {
} else {
"NihAV player".to_owned()
};
- let window = self.vsystem.window(&wname, width as u32, height as u32)
- .position_centered().build().unwrap();
+ let mut builder = self.vsystem.window(&wname, width as u32, height as u32);
+ let window = if let (Some(xpos), Some(ypos)) = (self.xpos, self.ypos) {
+ builder.position(xpos, ypos).build().unwrap()
+ } else {
+ builder.position_centered().build().unwrap()
+ };
let mut canvas = window.into_canvas().build().unwrap();
let texture_creator = canvas.texture_creator();
let mut disp_q = DispQueue::new(&texture_creator, width, height, if self.has_video { FRAME_QUEUE_LEN } else { 0 });
@@ -757,6 +765,9 @@ impl Player {
thread::sleep(Duration::from_millis(20));
}
}
+ let (xpos, ypos) = canvas.into_window().position();
+ self.xpos = Some(xpos);
+ self.ypos = Some(ypos);
println!();
std::mem::swap(&mut self.vcontrol, &mut new_vcontrol);
new_vcontrol.finish();