From f45f951af88944b8acfc1a9c2b5334f0be69f8d1 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Mon, 4 May 2026 10:59:20 +0200 Subject: [PATCH] fast forward controller hotkey (#837) * fast forward controller hotkey * more --- parallel-rdp/interface.cpp | 9 +++++- src/ui/input.rs | 56 ++++++++++++++++++++++++-------------- 2 files changed, 43 insertions(+), 22 deletions(-) diff --git a/parallel-rdp/interface.cpp b/parallel-rdp/interface.cpp index 3924483..9eceaea 100644 --- a/parallel-rdp/interface.cpp +++ b/parallel-rdp/interface.cpp @@ -58,6 +58,7 @@ enum user_event_codes { USER_EVENT_SAVE_STATE = 1, USER_EVENT_LOAD_STATE = 2, USER_EVENT_EXIT_GAME = 3, + USER_EVENT_FAST_FORWARD = 4, }; typedef struct { @@ -156,7 +157,10 @@ bool sdl_event_filter(void *userdata, SDL_Event *event) { break; case SDL_SCANCODE_F: if (event->key.mod & SDL_KMOD_ALT) { - callback.enable_speedlimiter = !callback.enable_speedlimiter; + SDL_zero(user_event); + user_event.type = SDL_EVENT_USER; + user_event.user.code = USER_EVENT_FAST_FORWARD; + SDL_PushEvent(&user_event); } break; case SDL_SCANCODE_P: @@ -245,6 +249,9 @@ bool sdl_event_filter(void *userdata, SDL_Event *event) { case USER_EVENT_EXIT_GAME: callback.emu_running = false; break; + case USER_EVENT_FAST_FORWARD: + callback.enable_speedlimiter = !callback.enable_speedlimiter; + break; default: break; } diff --git a/src/ui/input.rs b/src/ui/input.rs index 43d5d48..76afe03 100644 --- a/src/ui/input.rs +++ b/src/ui/input.rs @@ -427,34 +427,48 @@ fn handle_joystick_events(ui: &mut ui::Ui) { fn handle_hotkeys(keys: u32, last_key_state: u32) { if keys & (1 << L_TRIG) != 0 && last_key_state & (1 << L_TRIG) == 0 { - let mut event = sdl3_sys::events::SDL_Event { - user: sdl3_sys::events::SDL_UserEvent { - r#type: u32::from(sdl3_sys::events::SDL_EVENT_USER), - code: 1, //save state - ..Default::default() - }, + unsafe { + sdl3_sys::events::SDL_PushEvent(&mut sdl3_sys::events::SDL_Event { + user: sdl3_sys::events::SDL_UserEvent { + r#type: u32::from(sdl3_sys::events::SDL_EVENT_USER), + code: 1, //save state + ..Default::default() + }, + }) }; - unsafe { sdl3_sys::events::SDL_PushEvent(&mut event) }; } if keys & (1 << R_TRIG) != 0 && last_key_state & (1 << R_TRIG) == 0 { - let mut event = sdl3_sys::events::SDL_Event { - user: sdl3_sys::events::SDL_UserEvent { - r#type: u32::from(sdl3_sys::events::SDL_EVENT_USER), - code: 2, //load state - ..Default::default() - }, + unsafe { + sdl3_sys::events::SDL_PushEvent(&mut sdl3_sys::events::SDL_Event { + user: sdl3_sys::events::SDL_UserEvent { + r#type: u32::from(sdl3_sys::events::SDL_EVENT_USER), + code: 2, //load state + ..Default::default() + }, + }) }; - unsafe { sdl3_sys::events::SDL_PushEvent(&mut event) }; } if keys & (1 << START_BUTTON) != 0 && last_key_state & (1 << START_BUTTON) == 0 { - let mut event = sdl3_sys::events::SDL_Event { - user: sdl3_sys::events::SDL_UserEvent { - r#type: u32::from(sdl3_sys::events::SDL_EVENT_USER), - code: 3, //exit game - ..Default::default() - }, + unsafe { + sdl3_sys::events::SDL_PushEvent(&mut sdl3_sys::events::SDL_Event { + user: sdl3_sys::events::SDL_UserEvent { + r#type: u32::from(sdl3_sys::events::SDL_EVENT_USER), + code: 3, //exit game + ..Default::default() + }, + }) + }; + } + if keys & (1 << Z_TRIG) != 0 && last_key_state & (1 << Z_TRIG) == 0 { + unsafe { + sdl3_sys::events::SDL_PushEvent(&mut sdl3_sys::events::SDL_Event { + user: sdl3_sys::events::SDL_UserEvent { + r#type: u32::from(sdl3_sys::events::SDL_EVENT_USER), + code: 4, //fast forward + ..Default::default() + }, + }) }; - unsafe { sdl3_sys::events::SDL_PushEvent(&mut event) }; } }