ctrl: Added support for alternate key bindings for keyboard controls

This commit is contained in:
Kumiko7
2026-04-02 05:31:57 +09:00
committed by GitHub
parent 0bf11b6995
commit f780c68abb
6 changed files with 155 additions and 106 deletions
+1
View File
@@ -325,6 +325,7 @@ Connect a controller that is compatible with SDL3.</not_connected>
<controls>
<button>Button</button>
<mapped_button>Mapped button</mapped_button>
<mapped_button_alt>Alternate mapped button</mapped_button_alt>
<left_stick_up>Left stick up</left_stick_up>
<left_stick_down>Left stick down</left_stick_down>
<left_stick_right>Left stick right</left_stick_right>
+33
View File
@@ -153,6 +153,39 @@ enum ScreenshotFormat {
code(int, "keyboard-pinch-modifier", 0, keyboard_pinch_modifier) \
code(int, "keyboard-alternate-pinch-in", 0, keyboard_alternate_pinch_in) \
code(int, "keyboard-alternate-pinch-out", 0, keyboard_alternate_pinch_out) \
code(int, "keyboard-button-select-alt", 0, keyboard_button_select_alt) \
code(int, "keyboard-button-start-alt", 0, keyboard_button_start_alt) \
code(int, "keyboard-button-up-alt", 0, keyboard_button_up_alt) \
code(int, "keyboard-button-right-alt", 0, keyboard_button_right_alt) \
code(int, "keyboard-button-down-alt", 0, keyboard_button_down_alt) \
code(int, "keyboard-button-left-alt", 0, keyboard_button_left_alt) \
code(int, "keyboard-button-l1-alt", 0, keyboard_button_l1_alt) \
code(int, "keyboard-button-r1-alt", 0, keyboard_button_r1_alt) \
code(int, "keyboard-button-l2-alt", 0, keyboard_button_l2_alt) \
code(int, "keyboard-button-r2-alt", 0, keyboard_button_r2_alt) \
code(int, "keyboard-button-l3-alt", 0, keyboard_button_l3_alt) \
code(int, "keyboard-button-r3-alt", 0, keyboard_button_r3_alt) \
code(int, "keyboard-button-triangle-alt", 0, keyboard_button_triangle_alt) \
code(int, "keyboard-button-circle-alt", 0, keyboard_button_circle_alt) \
code(int, "keyboard-button-cross-alt", 0, keyboard_button_cross_alt) \
code(int, "keyboard-button-square-alt", 0, keyboard_button_square_alt) \
code(int, "keyboard-leftstick-left-alt", 0, keyboard_leftstick_left_alt) \
code(int, "keyboard-leftstick-right-alt", 0, keyboard_leftstick_right_alt) \
code(int, "keyboard-leftstick-up-alt", 0, keyboard_leftstick_up_alt) \
code(int, "keyboard-leftstick-down-alt", 0, keyboard_leftstick_down_alt) \
code(int, "keyboard-rightstick-left-alt", 0, keyboard_rightstick_left_alt) \
code(int, "keyboard-rightstick-right-alt", 0, keyboard_rightstick_right_alt) \
code(int, "keyboard-rightstick-up-alt", 0, keyboard_rightstick_up_alt) \
code(int, "keyboard-rightstick-down-alt", 0, keyboard_rightstick_down_alt) \
code(int, "keyboard-button-psbutton-alt", 0, keyboard_button_psbutton_alt) \
code(int, "keyboard-gui-toggle-gui-alt", 0, keyboard_gui_toggle_gui_alt) \
code(int, "keyboard-gui-fullscreen-alt", 0, keyboard_gui_fullscreen_alt) \
code(int, "keyboard-gui-toggle-touch-alt", 0, keyboard_gui_toggle_touch_alt) \
code(int, "keyboard-toggle-texture-replacement-alt", 0, keyboard_toggle_texture_replacement_alt) \
code(int, "keyboard-take-screenshot-alt", 0, keyboard_take_screenshot_alt) \
code(int, "keyboard-pinch-modifier-alt", 0, keyboard_pinch_modifier_alt) \
code(int, "keyboard-alternate-pinch-in-alt", 0, keyboard_alternate_pinch_in_alt) \
code(int, "keyboard-alternate-pinch-out-alt", 0, keyboard_alternate_pinch_out_alt) \
code(std::string, "user-id", std::string{}, user_id) \
code(bool, "user-auto-connect", false, auto_user_login) \
code(std::string, "user-lang", std::string{}, user_lang) \
+26 -26
View File
@@ -179,12 +179,12 @@ void refresh_controllers(CtrlState &state, EmuEnvState &emuenv) {
state.has_motion_support = found_gyro && found_accel;
}
static float keys_to_axis(const bool *keys, SDL_Scancode code1, SDL_Scancode code2) {
static float keys_to_axis(const bool *keys, SDL_Scancode code1, SDL_Scancode code1_alt, SDL_Scancode code2, SDL_Scancode code2_alt) {
float temp = 0;
if (keys[code1]) {
if (keys[code1] || keys[code1_alt]) {
temp -= 1;
}
if (keys[code2]) {
if (keys[code2] || keys[code2_alt]) {
temp += 1;
}
@@ -194,51 +194,51 @@ static float keys_to_axis(const bool *keys, SDL_Scancode code1, SDL_Scancode cod
static void apply_keyboard(uint32_t *buttons, float axes[4], bool ext, EmuEnvState &emuenv) {
const auto keys = SDL_GetKeyboardState(nullptr);
if (ext) {
if (keys[emuenv.cfg.keyboard_button_l1])
if (keys[emuenv.cfg.keyboard_button_l1] || keys[emuenv.cfg.keyboard_button_l1_alt])
*buttons |= SCE_CTRL_L1;
if (keys[emuenv.cfg.keyboard_button_r1])
if (keys[emuenv.cfg.keyboard_button_r1] || keys[emuenv.cfg.keyboard_button_r1_alt])
*buttons |= SCE_CTRL_R1;
if (keys[emuenv.cfg.keyboard_button_l2])
if (keys[emuenv.cfg.keyboard_button_l2] || keys[emuenv.cfg.keyboard_button_l2_alt])
*buttons |= SCE_CTRL_L2;
if (keys[emuenv.cfg.keyboard_button_r2])
if (keys[emuenv.cfg.keyboard_button_r2] || keys[emuenv.cfg.keyboard_button_r2_alt])
*buttons |= SCE_CTRL_R2;
if (keys[emuenv.cfg.keyboard_button_l3])
if (keys[emuenv.cfg.keyboard_button_l3] || keys[emuenv.cfg.keyboard_button_l3_alt])
*buttons |= SCE_CTRL_L3;
if (keys[emuenv.cfg.keyboard_button_r3])
if (keys[emuenv.cfg.keyboard_button_r3] || keys[emuenv.cfg.keyboard_button_r3_alt])
*buttons |= SCE_CTRL_R3;
} else {
if (keys[emuenv.cfg.keyboard_button_l1])
if (keys[emuenv.cfg.keyboard_button_l1] || keys[emuenv.cfg.keyboard_button_l1_alt])
*buttons |= SCE_CTRL_L;
if (keys[emuenv.cfg.keyboard_button_r1])
if (keys[emuenv.cfg.keyboard_button_r1] || keys[emuenv.cfg.keyboard_button_r1_alt])
*buttons |= SCE_CTRL_R;
}
if (keys[emuenv.cfg.keyboard_button_select])
if (keys[emuenv.cfg.keyboard_button_select] || keys[emuenv.cfg.keyboard_button_select_alt])
*buttons |= SCE_CTRL_SELECT;
if (keys[emuenv.cfg.keyboard_button_start])
if (keys[emuenv.cfg.keyboard_button_start] || keys[emuenv.cfg.keyboard_button_start_alt])
*buttons |= SCE_CTRL_START;
if (keys[emuenv.cfg.keyboard_button_up])
if (keys[emuenv.cfg.keyboard_button_up] || keys[emuenv.cfg.keyboard_button_up_alt])
*buttons |= SCE_CTRL_UP;
if (keys[emuenv.cfg.keyboard_button_right])
if (keys[emuenv.cfg.keyboard_button_right] || keys[emuenv.cfg.keyboard_button_right_alt])
*buttons |= SCE_CTRL_RIGHT;
if (keys[emuenv.cfg.keyboard_button_down])
if (keys[emuenv.cfg.keyboard_button_down] || keys[emuenv.cfg.keyboard_button_down_alt])
*buttons |= SCE_CTRL_DOWN;
if (keys[emuenv.cfg.keyboard_button_left])
if (keys[emuenv.cfg.keyboard_button_left] || keys[emuenv.cfg.keyboard_button_left_alt])
*buttons |= SCE_CTRL_LEFT;
if (keys[emuenv.cfg.keyboard_button_triangle])
if (keys[emuenv.cfg.keyboard_button_triangle] || keys[emuenv.cfg.keyboard_button_triangle_alt])
*buttons |= SCE_CTRL_TRIANGLE;
if (keys[emuenv.cfg.keyboard_button_circle])
if (keys[emuenv.cfg.keyboard_button_circle] || keys[emuenv.cfg.keyboard_button_circle_alt])
*buttons |= SCE_CTRL_CIRCLE;
if (keys[emuenv.cfg.keyboard_button_cross])
if (keys[emuenv.cfg.keyboard_button_cross] || keys[emuenv.cfg.keyboard_button_cross_alt])
*buttons |= SCE_CTRL_CROSS;
if (keys[emuenv.cfg.keyboard_button_square])
if (keys[emuenv.cfg.keyboard_button_square] || keys[emuenv.cfg.keyboard_button_square_alt])
*buttons |= SCE_CTRL_SQUARE;
if (keys[emuenv.cfg.keyboard_button_psbutton])
if (keys[emuenv.cfg.keyboard_button_psbutton] || keys[emuenv.cfg.keyboard_button_psbutton_alt])
*buttons |= SCE_CTRL_PSBUTTON;
axes[0] += keys_to_axis(keys, static_cast<SDL_Scancode>(emuenv.cfg.keyboard_leftstick_left), static_cast<SDL_Scancode>(emuenv.cfg.keyboard_leftstick_right));
axes[1] += keys_to_axis(keys, static_cast<SDL_Scancode>(emuenv.cfg.keyboard_leftstick_up), static_cast<SDL_Scancode>(emuenv.cfg.keyboard_leftstick_down));
axes[2] += keys_to_axis(keys, static_cast<SDL_Scancode>(emuenv.cfg.keyboard_rightstick_left), static_cast<SDL_Scancode>(emuenv.cfg.keyboard_rightstick_right));
axes[3] += keys_to_axis(keys, static_cast<SDL_Scancode>(emuenv.cfg.keyboard_rightstick_up), static_cast<SDL_Scancode>(emuenv.cfg.keyboard_rightstick_down));
axes[0] += keys_to_axis(keys, static_cast<SDL_Scancode>(emuenv.cfg.keyboard_leftstick_left), static_cast<SDL_Scancode>(emuenv.cfg.keyboard_leftstick_left_alt), static_cast<SDL_Scancode>(emuenv.cfg.keyboard_leftstick_right), static_cast<SDL_Scancode>(emuenv.cfg.keyboard_leftstick_right_alt));
axes[1] += keys_to_axis(keys, static_cast<SDL_Scancode>(emuenv.cfg.keyboard_leftstick_up), static_cast<SDL_Scancode>(emuenv.cfg.keyboard_leftstick_up_alt), static_cast<SDL_Scancode>(emuenv.cfg.keyboard_leftstick_down), static_cast<SDL_Scancode>(emuenv.cfg.keyboard_leftstick_down_alt));
axes[2] += keys_to_axis(keys, static_cast<SDL_Scancode>(emuenv.cfg.keyboard_rightstick_left), static_cast<SDL_Scancode>(emuenv.cfg.keyboard_rightstick_left_alt), static_cast<SDL_Scancode>(emuenv.cfg.keyboard_rightstick_right), static_cast<SDL_Scancode>(emuenv.cfg.keyboard_rightstick_right_alt));
axes[3] += keys_to_axis(keys, static_cast<SDL_Scancode>(emuenv.cfg.keyboard_rightstick_up), static_cast<SDL_Scancode>(emuenv.cfg.keyboard_rightstick_up_alt), static_cast<SDL_Scancode>(emuenv.cfg.keyboard_rightstick_down), static_cast<SDL_Scancode>(emuenv.cfg.keyboard_rightstick_down_alt));
}
static std::array<ControllerBinding, 13> get_controller_bindings(EmuEnvState &emuenv) {
+75 -61
View File
@@ -81,37 +81,45 @@ static void reset_map_array(EmuEnvState &emuenv) {
static bool need_open_error_duplicate_key_popup = false;
static void remapper_button(GuiState &gui, EmuEnvState &emuenv, int *button, const char *button_name, const char *tooltip = nullptr) {
static void remapper_button(GuiState &gui, EmuEnvState &emuenv, int *button, int *button_alt, const char *button_name, const char *tooltip = nullptr) {
ImGui::TableNextRow();
ImGui::TableSetColumnIndex(0);
ImGui::Text("%s", button_name);
if (tooltip)
SetTooltipEx(tooltip);
ImGui::TableSetColumnIndex(1);
// the association of the key
int key_association = *button;
ImGui::PushID(button_name);
if (ImGui::Button(SDL_key_to_string[key_association])) {
gui.old_captured_key = key_association;
gui.is_capturing_keys = true;
// capture the original state
std::array<int, total_key_entries> original_state;
prepare_map_array(emuenv, original_state);
while (gui.is_capturing_keys) {
handle_events(emuenv, gui);
*button = gui.captured_key;
if (*button < 0 || *button > 231)
*button = 0;
else if (gui.is_key_capture_dropped || (!gui.is_capturing_keys && *button != key_association && vector_utils::contains(original_state, *button))) {
// undo the changes
*button = key_association;
gui.is_key_capture_dropped = false;
need_open_error_duplicate_key_popup = true;
auto render_button = [&](int *b_ptr, int col_index) {
if (!b_ptr)
return;
ImGui::TableSetColumnIndex(col_index);
int key_association = *b_ptr;
ImGui::PushID(b_ptr); // Use pointer as unique ID instead of button_name
if (ImGui::Button(SDL_key_to_string[key_association])) {
gui.old_captured_key = key_association;
gui.is_capturing_keys = true;
// capture the original state
std::array<int, total_key_entries> original_state;
prepare_map_array(emuenv, original_state);
while (gui.is_capturing_keys) {
handle_events(emuenv, gui);
*b_ptr = gui.captured_key;
if (*b_ptr < 0 || *b_ptr > 231)
*b_ptr = 0;
else if (gui.is_key_capture_dropped || (!gui.is_capturing_keys && *b_ptr != key_association && vector_utils::contains(original_state, *b_ptr))) {
// undo the changes
*b_ptr = key_association;
gui.is_key_capture_dropped = false;
need_open_error_duplicate_key_popup = true;
}
}
config::serialize_config(emuenv.cfg, emuenv.cfg.config_path);
}
config::serialize_config(emuenv.cfg, emuenv.cfg.config_path);
}
ImGui::PopID();
ImGui::PopID();
};
render_button(button, 1);
render_button(button_alt, 2);
}
void draw_controls_dialog(GuiState &gui, EmuEnvState &emuenv) {
@@ -137,36 +145,39 @@ void draw_controls_dialog(GuiState &gui, EmuEnvState &emuenv) {
ImGui::Spacing();
ImGui::Separator();
if (ImGui::BeginTable("main", 2)) {
if (ImGui::BeginTable("main", 3)) {
ImGui::TableSetupColumn("button");
ImGui::TableSetupColumn("mapped_button");
ImGui::TableSetupColumn("mapped_button_alt");
ImGui::TableNextRow();
ImGui::TableSetColumnIndex(0);
ImGui::TextColored(GUI_COLOR_TEXT_TITLE, "%s", lang["button"].c_str());
ImGui::TableSetColumnIndex(1);
ImGui::TextColored(GUI_COLOR_TEXT_TITLE, "%s", lang["mapped_button"].c_str());
ImGui::TableSetColumnIndex(2);
ImGui::TextColored(GUI_COLOR_TEXT_TITLE, "%s", lang["mapped_button_alt"].c_str());
remapper_button(gui, emuenv, &emuenv.cfg.keyboard_leftstick_up, lang["left_stick_up"].c_str());
remapper_button(gui, emuenv, &emuenv.cfg.keyboard_leftstick_down, lang["left_stick_down"].c_str());
remapper_button(gui, emuenv, &emuenv.cfg.keyboard_leftstick_right, lang["left_stick_right"].c_str());
remapper_button(gui, emuenv, &emuenv.cfg.keyboard_leftstick_left, lang["left_stick_left"].c_str());
remapper_button(gui, emuenv, &emuenv.cfg.keyboard_rightstick_up, lang["right_stick_up"].c_str());
remapper_button(gui, emuenv, &emuenv.cfg.keyboard_rightstick_down, lang["right_stick_down"].c_str());
remapper_button(gui, emuenv, &emuenv.cfg.keyboard_rightstick_right, lang["right_stick_right"].c_str());
remapper_button(gui, emuenv, &emuenv.cfg.keyboard_rightstick_left, lang["right_stick_left"].c_str());
remapper_button(gui, emuenv, &emuenv.cfg.keyboard_button_up, lang["d_pad_up"].c_str());
remapper_button(gui, emuenv, &emuenv.cfg.keyboard_button_down, lang["d_pad_down"].c_str());
remapper_button(gui, emuenv, &emuenv.cfg.keyboard_button_right, lang["d_pad_right"].c_str());
remapper_button(gui, emuenv, &emuenv.cfg.keyboard_button_left, lang["d_pad_left"].c_str());
remapper_button(gui, emuenv, &emuenv.cfg.keyboard_button_square, lang["square_button"].c_str());
remapper_button(gui, emuenv, &emuenv.cfg.keyboard_button_cross, lang["cross_button"].c_str());
remapper_button(gui, emuenv, &emuenv.cfg.keyboard_button_circle, lang["circle_button"].c_str());
remapper_button(gui, emuenv, &emuenv.cfg.keyboard_button_triangle, lang["triangle_button"].c_str());
remapper_button(gui, emuenv, &emuenv.cfg.keyboard_button_start, lang["start_button"].c_str());
remapper_button(gui, emuenv, &emuenv.cfg.keyboard_button_select, lang["select_button"].c_str());
remapper_button(gui, emuenv, &emuenv.cfg.keyboard_button_psbutton, lang["ps_button"].c_str());
remapper_button(gui, emuenv, &emuenv.cfg.keyboard_button_l1, lang["l1_button"].c_str());
remapper_button(gui, emuenv, &emuenv.cfg.keyboard_button_r1, lang["r1_button"].c_str());
remapper_button(gui, emuenv, &emuenv.cfg.keyboard_leftstick_up, &emuenv.cfg.keyboard_leftstick_up_alt, lang["left_stick_up"].c_str());
remapper_button(gui, emuenv, &emuenv.cfg.keyboard_leftstick_down, &emuenv.cfg.keyboard_leftstick_down_alt, lang["left_stick_down"].c_str());
remapper_button(gui, emuenv, &emuenv.cfg.keyboard_leftstick_right, &emuenv.cfg.keyboard_leftstick_right_alt, lang["left_stick_right"].c_str());
remapper_button(gui, emuenv, &emuenv.cfg.keyboard_leftstick_left, &emuenv.cfg.keyboard_leftstick_left_alt, lang["left_stick_left"].c_str());
remapper_button(gui, emuenv, &emuenv.cfg.keyboard_rightstick_up, &emuenv.cfg.keyboard_rightstick_up_alt, lang["right_stick_up"].c_str());
remapper_button(gui, emuenv, &emuenv.cfg.keyboard_rightstick_down, &emuenv.cfg.keyboard_rightstick_down_alt, lang["right_stick_down"].c_str());
remapper_button(gui, emuenv, &emuenv.cfg.keyboard_rightstick_right, &emuenv.cfg.keyboard_rightstick_right_alt, lang["right_stick_right"].c_str());
remapper_button(gui, emuenv, &emuenv.cfg.keyboard_rightstick_left, &emuenv.cfg.keyboard_rightstick_left_alt, lang["right_stick_left"].c_str());
remapper_button(gui, emuenv, &emuenv.cfg.keyboard_button_up, &emuenv.cfg.keyboard_button_up_alt, lang["d_pad_up"].c_str());
remapper_button(gui, emuenv, &emuenv.cfg.keyboard_button_down, &emuenv.cfg.keyboard_button_down_alt, lang["d_pad_down"].c_str());
remapper_button(gui, emuenv, &emuenv.cfg.keyboard_button_right, &emuenv.cfg.keyboard_button_right_alt, lang["d_pad_right"].c_str());
remapper_button(gui, emuenv, &emuenv.cfg.keyboard_button_left, &emuenv.cfg.keyboard_button_left_alt, lang["d_pad_left"].c_str());
remapper_button(gui, emuenv, &emuenv.cfg.keyboard_button_square, &emuenv.cfg.keyboard_button_square_alt, lang["square_button"].c_str());
remapper_button(gui, emuenv, &emuenv.cfg.keyboard_button_cross, &emuenv.cfg.keyboard_button_cross_alt, lang["cross_button"].c_str());
remapper_button(gui, emuenv, &emuenv.cfg.keyboard_button_circle, &emuenv.cfg.keyboard_button_circle_alt, lang["circle_button"].c_str());
remapper_button(gui, emuenv, &emuenv.cfg.keyboard_button_triangle, &emuenv.cfg.keyboard_button_triangle_alt, lang["triangle_button"].c_str());
remapper_button(gui, emuenv, &emuenv.cfg.keyboard_button_start, &emuenv.cfg.keyboard_button_start_alt, lang["start_button"].c_str());
remapper_button(gui, emuenv, &emuenv.cfg.keyboard_button_select, &emuenv.cfg.keyboard_button_select_alt, lang["select_button"].c_str());
remapper_button(gui, emuenv, &emuenv.cfg.keyboard_button_psbutton, &emuenv.cfg.keyboard_button_psbutton_alt, lang["ps_button"].c_str());
remapper_button(gui, emuenv, &emuenv.cfg.keyboard_button_l1, &emuenv.cfg.keyboard_button_l1_alt, lang["l1_button"].c_str());
remapper_button(gui, emuenv, &emuenv.cfg.keyboard_button_r1, &emuenv.cfg.keyboard_button_r1_alt, lang["r1_button"].c_str());
ImGui::EndTable();
}
@@ -174,13 +185,14 @@ void draw_controls_dialog(GuiState &gui, EmuEnvState &emuenv) {
ImGui::Spacing();
ImGui::TextColored(GUI_COLOR_TEXT_TITLE, "%s", lang["ps_tv_mode"].c_str());
ImGui::Spacing();
if (ImGui::BeginTable("PSTV_mode", 2)) {
if (ImGui::BeginTable("PSTV_mode", 3)) {
ImGui::TableSetupColumn("button");
ImGui::TableSetupColumn("mapped_button");
remapper_button(gui, emuenv, &emuenv.cfg.keyboard_button_l2, lang["l2_button"].c_str());
remapper_button(gui, emuenv, &emuenv.cfg.keyboard_button_r2, lang["r2_button"].c_str());
remapper_button(gui, emuenv, &emuenv.cfg.keyboard_button_l3, lang["l3_button"].c_str());
remapper_button(gui, emuenv, &emuenv.cfg.keyboard_button_r3, lang["r3_button"].c_str());
ImGui::TableSetupColumn("mapped_button_alt");
remapper_button(gui, emuenv, &emuenv.cfg.keyboard_button_l2, &emuenv.cfg.keyboard_button_l2_alt, lang["l2_button"].c_str());
remapper_button(gui, emuenv, &emuenv.cfg.keyboard_button_r2, &emuenv.cfg.keyboard_button_r2_alt, lang["r2_button"].c_str());
remapper_button(gui, emuenv, &emuenv.cfg.keyboard_button_l3, &emuenv.cfg.keyboard_button_l3_alt, lang["l3_button"].c_str());
remapper_button(gui, emuenv, &emuenv.cfg.keyboard_button_r3, &emuenv.cfg.keyboard_button_r3_alt, lang["r3_button"].c_str());
ImGui::EndTable();
}
@@ -188,26 +200,28 @@ void draw_controls_dialog(GuiState &gui, EmuEnvState &emuenv) {
ImGui::Separator();
ImGui::Spacing();
ImGui::TextColored(GUI_COLOR_TEXT_TITLE, "%s", lang["gui"].c_str());
if (ImGui::BeginTable("gui", 2)) {
if (ImGui::BeginTable("gui", 3)) {
ImGui::TableSetupColumn("button");
ImGui::TableSetupColumn("mapped_button");
remapper_button(gui, emuenv, &emuenv.cfg.keyboard_gui_fullscreen, lang["full_screen"].c_str());
remapper_button(gui, emuenv, &emuenv.cfg.keyboard_gui_toggle_touch, lang["toggle_touch"].c_str(), lang["toggle_touch_description"].c_str());
remapper_button(gui, emuenv, &emuenv.cfg.keyboard_gui_toggle_gui, lang["toggle_gui_visibility"].c_str(), lang["toggle_gui_visibility_description"].c_str());
ImGui::TableSetupColumn("mapped_button_alt");
remapper_button(gui, emuenv, &emuenv.cfg.keyboard_gui_fullscreen, &emuenv.cfg.keyboard_gui_fullscreen_alt, lang["full_screen"].c_str());
remapper_button(gui, emuenv, &emuenv.cfg.keyboard_gui_toggle_touch, &emuenv.cfg.keyboard_gui_toggle_touch_alt, lang["toggle_touch"].c_str(), lang["toggle_touch_description"].c_str());
remapper_button(gui, emuenv, &emuenv.cfg.keyboard_gui_toggle_gui, &emuenv.cfg.keyboard_gui_toggle_gui_alt, lang["toggle_gui_visibility"].c_str(), lang["toggle_gui_visibility_description"].c_str());
ImGui::EndTable();
}
ImGui::Separator();
ImGui::Spacing();
ImGui::TextColored(GUI_COLOR_TEXT_TITLE, "%s", lang["miscellaneous"].c_str());
if (ImGui::BeginTable("misc", 2)) {
if (ImGui::BeginTable("misc", 3)) {
ImGui::TableSetupColumn("button");
ImGui::TableSetupColumn("mapped_button");
remapper_button(gui, emuenv, &emuenv.cfg.keyboard_toggle_texture_replacement, lang["toggle_texture_replacement"].c_str());
remapper_button(gui, emuenv, &emuenv.cfg.keyboard_take_screenshot, lang["take_screenshot"].c_str());
remapper_button(gui, emuenv, &emuenv.cfg.keyboard_pinch_modifier, lang["pinch_modifier"].c_str());
remapper_button(gui, emuenv, &emuenv.cfg.keyboard_alternate_pinch_in, lang["alternate_pinch_in"].c_str());
remapper_button(gui, emuenv, &emuenv.cfg.keyboard_alternate_pinch_out, lang["alternate_pinch_out"].c_str());
ImGui::TableSetupColumn("mapped_button_alt");
remapper_button(gui, emuenv, &emuenv.cfg.keyboard_toggle_texture_replacement, &emuenv.cfg.keyboard_toggle_texture_replacement_alt, lang["toggle_texture_replacement"].c_str());
remapper_button(gui, emuenv, &emuenv.cfg.keyboard_take_screenshot, &emuenv.cfg.keyboard_take_screenshot_alt, lang["take_screenshot"].c_str());
remapper_button(gui, emuenv, &emuenv.cfg.keyboard_pinch_modifier, &emuenv.cfg.keyboard_pinch_modifier_alt, lang["pinch_modifier"].c_str());
remapper_button(gui, emuenv, &emuenv.cfg.keyboard_alternate_pinch_in, &emuenv.cfg.keyboard_alternate_pinch_in_alt, lang["alternate_pinch_in"].c_str());
remapper_button(gui, emuenv, &emuenv.cfg.keyboard_alternate_pinch_out, &emuenv.cfg.keyboard_alternate_pinch_out_alt, lang["alternate_pinch_out"].c_str());
ImGui::EndTable();
}
+19 -19
View File
@@ -718,25 +718,25 @@ bool handle_events(EmuEnvState &emuenv, GuiState &gui) {
case SDL_EVENT_KEY_DOWN: {
const auto get_sce_ctrl_btn_from_scancode = [&emuenv](const SDL_Scancode scancode) {
if (scancode == emuenv.cfg.keyboard_button_up)
if (scancode == emuenv.cfg.keyboard_button_up || scancode == emuenv.cfg.keyboard_button_up_alt)
return SCE_CTRL_UP;
else if (scancode == emuenv.cfg.keyboard_button_right)
else if (scancode == emuenv.cfg.keyboard_button_right || scancode == emuenv.cfg.keyboard_button_right_alt)
return SCE_CTRL_RIGHT;
else if (scancode == emuenv.cfg.keyboard_button_down)
else if (scancode == emuenv.cfg.keyboard_button_down || scancode == emuenv.cfg.keyboard_button_down_alt)
return SCE_CTRL_DOWN;
else if (scancode == emuenv.cfg.keyboard_button_left)
else if (scancode == emuenv.cfg.keyboard_button_left || scancode == emuenv.cfg.keyboard_button_left_alt)
return SCE_CTRL_LEFT;
else if (scancode == emuenv.cfg.keyboard_button_l1)
else if (scancode == emuenv.cfg.keyboard_button_l1 || scancode == emuenv.cfg.keyboard_button_l1_alt)
return SCE_CTRL_L1;
else if (scancode == emuenv.cfg.keyboard_button_r1)
else if (scancode == emuenv.cfg.keyboard_button_r1 || scancode == emuenv.cfg.keyboard_button_r1_alt)
return SCE_CTRL_R1;
else if (scancode == emuenv.cfg.keyboard_button_triangle)
else if (scancode == emuenv.cfg.keyboard_button_triangle || scancode == emuenv.cfg.keyboard_button_triangle_alt)
return SCE_CTRL_TRIANGLE;
else if (scancode == emuenv.cfg.keyboard_button_circle)
else if (scancode == emuenv.cfg.keyboard_button_circle || scancode == emuenv.cfg.keyboard_button_circle_alt)
return SCE_CTRL_CIRCLE;
else if (scancode == emuenv.cfg.keyboard_button_cross)
else if (scancode == emuenv.cfg.keyboard_button_cross || scancode == emuenv.cfg.keyboard_button_cross_alt)
return SCE_CTRL_CROSS;
else if (scancode == emuenv.cfg.keyboard_button_psbutton)
else if (scancode == emuenv.cfg.keyboard_button_psbutton || scancode == emuenv.cfg.keyboard_button_psbutton_alt)
return SCE_CTRL_PSBUTTON;
else
return static_cast<SceCtrlButtons>(0);
@@ -764,23 +764,23 @@ bool handle_events(EmuEnvState &emuenv, GuiState &gui) {
sce_ctrl_btn = SCE_CTRL_PSBUTTON;
#else
// toggle gui state
if (allow_switch_state && (event.key.scancode == emuenv.cfg.keyboard_gui_toggle_gui))
if (allow_switch_state && (event.key.scancode == emuenv.cfg.keyboard_gui_toggle_gui || event.key.scancode == emuenv.cfg.keyboard_gui_toggle_gui_alt))
emuenv.display.imgui_render = !emuenv.display.imgui_render;
if (event.key.scancode == emuenv.cfg.keyboard_gui_toggle_touch && !gui.is_key_capture_dropped)
if ((event.key.scancode == emuenv.cfg.keyboard_gui_toggle_touch || event.key.scancode == emuenv.cfg.keyboard_gui_toggle_touch_alt) && !gui.is_key_capture_dropped)
toggle_touchscreen();
if (event.key.scancode == emuenv.cfg.keyboard_gui_fullscreen && !gui.is_key_capture_dropped)
if ((event.key.scancode == emuenv.cfg.keyboard_gui_fullscreen || event.key.scancode == emuenv.cfg.keyboard_gui_fullscreen_alt) && !gui.is_key_capture_dropped)
switch_full_screen(emuenv);
if (event.key.scancode == emuenv.cfg.keyboard_toggle_texture_replacement && !gui.is_key_capture_dropped)
if ((event.key.scancode == emuenv.cfg.keyboard_toggle_texture_replacement || event.key.scancode == emuenv.cfg.keyboard_toggle_texture_replacement_alt) && !gui.is_key_capture_dropped)
toggle_texture_replacement(emuenv);
if (event.key.scancode == emuenv.cfg.keyboard_take_screenshot && !gui.is_key_capture_dropped)
if ((event.key.scancode == emuenv.cfg.keyboard_take_screenshot || event.key.scancode == emuenv.cfg.keyboard_take_screenshot_alt) && !gui.is_key_capture_dropped)
take_screenshot(emuenv);
if ((event.key.scancode == emuenv.cfg.keyboard_pinch_modifier || event.key.scancode == emuenv.cfg.keyboard_alternate_pinch_in || event.key.scancode == emuenv.cfg.keyboard_alternate_pinch_out) && !gui.is_key_capture_dropped)
if ((event.key.scancode == emuenv.cfg.keyboard_pinch_modifier || event.key.scancode == emuenv.cfg.keyboard_pinch_modifier_alt || event.key.scancode == emuenv.cfg.keyboard_alternate_pinch_in || event.key.scancode == emuenv.cfg.keyboard_alternate_pinch_in_alt || event.key.scancode == emuenv.cfg.keyboard_alternate_pinch_out || event.key.scancode == emuenv.cfg.keyboard_alternate_pinch_out_alt) && !gui.is_key_capture_dropped)
pinch_modifier(true);
const float pinch_amount = 0.5;
if (event.key.scancode == emuenv.cfg.keyboard_alternate_pinch_in && !gui.is_key_capture_dropped)
if ((event.key.scancode == emuenv.cfg.keyboard_alternate_pinch_in || event.key.scancode == emuenv.cfg.keyboard_alternate_pinch_in_alt) && !gui.is_key_capture_dropped)
pinch_automove(pinch_amount * -1);
if (event.key.scancode == emuenv.cfg.keyboard_alternate_pinch_out && !gui.is_key_capture_dropped)
if ((event.key.scancode == emuenv.cfg.keyboard_alternate_pinch_out || event.key.scancode == emuenv.cfg.keyboard_alternate_pinch_out_alt) && !gui.is_key_capture_dropped)
pinch_automove(pinch_amount);
#endif
if (sce_ctrl_btn != 0) {
@@ -795,7 +795,7 @@ bool handle_events(EmuEnvState &emuenv, GuiState &gui) {
}
case SDL_EVENT_KEY_UP:
gui.is_key_locked = false;
if (event.key.scancode == emuenv.cfg.keyboard_pinch_modifier || event.key.scancode == emuenv.cfg.keyboard_alternate_pinch_in || event.key.scancode == emuenv.cfg.keyboard_alternate_pinch_out) {
if (event.key.scancode == emuenv.cfg.keyboard_pinch_modifier || event.key.scancode == emuenv.cfg.keyboard_pinch_modifier_alt || event.key.scancode == emuenv.cfg.keyboard_alternate_pinch_in || event.key.scancode == emuenv.cfg.keyboard_alternate_pinch_in_alt || event.key.scancode == emuenv.cfg.keyboard_alternate_pinch_out || event.key.scancode == emuenv.cfg.keyboard_alternate_pinch_out_alt) {
pinch_modifier(false);
pinch_automove(0);
}
+1
View File
@@ -296,6 +296,7 @@ struct LangState {
std::map<std::string, std::string> controls = {
{ "button", "Button" },
{ "mapped_button", "Mapped button" },
{ "mapped_button_alt", "Alternate mapped button" },
{ "left_stick_up", "Left stick up" },
{ "left_stick_down", "Left stick down" },
{ "left_stick_right", "Left stick right" },