allow to (un)pause playback by right mouse button click
authorKostya Shishkov <kostya.shishkov@gmail.com>
Thu, 15 Jun 2023 16:46:53 +0000 (18:46 +0200)
committerKostya Shishkov <kostya.shishkov@gmail.com>
Thu, 15 Jun 2023 16:46:53 +0000 (18:46 +0200)
videoplayer/src/main.rs

index 3f15d9462ec1cc64bc534d63d802817a5d5de399..ca11d87905d01ae1be03b7472c929a0148f9dd4d 100644 (file)
@@ -12,6 +12,7 @@ use std::thread;
 
 use sdl2::event::{Event, WindowEvent};
 use sdl2::keyboard::Keycode;
+use sdl2::mouse::MouseButton;
 use sdl2::render::{Canvas, Texture, TextureCreator};
 use sdl2::pixels::PixelFormatEnum;
 use sdl2::video::{Window, WindowContext};
@@ -389,6 +390,21 @@ impl Player {
         }
         debug_log!(self; {format!(" prefilling done, frames {}-{} audio {}", disp_queue.start, disp_queue.end, self.acontrol.get_fill())});
     }
+    fn toggle_pause(&mut self) {
+        self.paused = !self.paused;
+        if self.paused {
+            self.vsystem.enable_screen_saver();
+            self.tkeep.set_ts();
+        } else {
+            self.vsystem.disable_screen_saver();
+            self.tkeep.set_time();
+        }
+        if self.paused {
+            self.acontrol.pause();
+        } else {
+            self.acontrol.resume();
+        }
+    }
     fn handle_events(&mut self, event_pump: &mut sdl2::EventPump, canvas: &mut Canvas<Window>, dmx: &mut Demuxer, disp_queue: &mut DispQueue) -> bool {
         for event in event_pump.poll_iter() {
             if let Event::Quit {..} = event {
@@ -401,6 +417,9 @@ impl Player {
                 canvas.copy(disp_queue.get_last_texture(&self.osd), None, None).unwrap();
                 canvas.present();
             }
+            if let Event::MouseButtonDown {mouse_btn: MouseButton::Right, ..} = event {
+                self.toggle_pause();
+            }
             if let Event::KeyDown {keycode: Some(keycode), ..} = event {
                 match keycode {
                     Keycode::Escape | Keycode::Q => {
@@ -415,21 +434,7 @@ impl Player {
                     Keycode::Down       => { self.seek(60, false, dmx, disp_queue); },
                     Keycode::PageUp     => { self.seek(600, true,  dmx, disp_queue); },
                     Keycode::PageDown   => { self.seek(600, false, dmx, disp_queue); },
-                    Keycode::Space => {
-                        self.paused = !self.paused;
-                        if self.paused {
-                            self.vsystem.enable_screen_saver();
-                            self.tkeep.set_ts();
-                        } else {
-                            self.vsystem.disable_screen_saver();
-                            self.tkeep.set_time();
-                        }
-                        if self.paused {
-                            self.acontrol.pause();
-                        } else {
-                            self.acontrol.resume();
-                        }
-                    },
+                    Keycode::Space => { self.toggle_pause(); },
                     Keycode::Plus | Keycode::KpPlus => {
                         self.volume = (self.volume + 10).min(MAX_VOLUME);
                         if !self.mute {