try to preserve window position when playing multiple files
authorKostya Shishkov <kostya.shishkov@gmail.com>
Fri, 16 Jun 2023 15:53:17 +0000 (17:53 +0200)
committerKostya Shishkov <kostya.shishkov@gmail.com>
Fri, 16 Jun 2023 15:53:17 +0000 (17:53 +0200)
videoplayer/src/main.rs

index a3c7f4361a78837c497aaad10aa170c9ee2cbfbd..bc453c38b5d31aa42746fdb0550d9bf84872e643 100644 (file)
@@ -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();