fast forward controller hotkey (#837)

* fast forward controller hotkey

* more
This commit is contained in:
Logan McNaughton 2026-05-04 10:59:20 +02:00 committed by GitHub
parent 883852a828
commit f45f951af8
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 43 additions and 22 deletions

View File

@ -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;
}

View File

@ -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) };
}
}