diff --git a/Common/KeyMap.cpp b/Common/KeyMap.cpp index bf7314a9fd..d93ff24492 100644 --- a/Common/KeyMap.cpp +++ b/Common/KeyMap.cpp @@ -650,6 +650,8 @@ const KeyMap_IntStrPair psp_button_names[] = { {VIRTKEY_AXIS_RIGHT_Y_MIN, "RightAn.Down"}, {VIRTKEY_AXIS_RIGHT_X_MIN, "RightAn.Left"}, {VIRTKEY_AXIS_RIGHT_X_MAX, "RightAn.Right"}, + + {VIRTKEY_AXIS_SWAP, "AxisSwap"}, }; const int AXIS_BIND_NKCODE_START = 4000; @@ -920,4 +922,27 @@ const std::set &GetSeenPads() { } +void SwapKeys(int btn1, int btn2) { + std::vector keys1; + std::vector keys2; + KeyFromPspButton(psp_button_names[btn1].key, &keys1); + KeyFromPspButton(psp_button_names[btn2].key, &keys2); + RemoveButtonMapping(psp_button_names[btn1].key); + RemoveButtonMapping(psp_button_names[btn2].key); + for (size_t j = 0; j < keys1.size(); j++) { + SetKeyMapping(psp_button_names[btn2].key, KeyDef(keys1[j].deviceId, keys1[j].keyCode), false); + } + for (size_t j = 0; j < keys2.size(); j++) { + SetKeyMapping(psp_button_names[btn1].key, KeyDef(keys2[j].deviceId, keys2[j].keyCode), false); + } +} + +// Swap direction buttons and left analog axis +void SwapAxis() { + SwapKeys(0, 12); + SwapKeys(1, 13); + SwapKeys(2, 14); + SwapKeys(3, 15); +} + } // KeyMap diff --git a/Common/KeyMap.h b/Common/KeyMap.h index 30fae0c7ea..974f13ecae 100644 --- a/Common/KeyMap.h +++ b/Common/KeyMap.h @@ -47,6 +47,7 @@ enum { VIRTKEY_NEXT_SLOT = 0x1000f, VIRTKEY_TOGGLE_FULLSCREEN = 0x10010, VIRTKEY_ANALOG_LIGHTLY = 0x10011, + VIRTKEY_AXIS_SWAP = 0x10012, VIRTKEY_LAST, VIRTKEY_COUNT = VIRTKEY_LAST - VIRTKEY_FIRST }; @@ -156,6 +157,7 @@ namespace KeyMap { void RestoreDefault(); + void SwapAxis(); void UpdateConfirmCancelKeys(); void NotifyPadConnected(const std::string &name); diff --git a/UI/EmuScreen.cpp b/UI/EmuScreen.cpp index 5534901bfb..49c04050fc 100644 --- a/UI/EmuScreen.cpp +++ b/UI/EmuScreen.cpp @@ -290,6 +290,10 @@ void EmuScreen::onVKeyDown(int virtualKeyCode) { pauseTrigger_ = true; break; + case VIRTKEY_AXIS_SWAP: + KeyMap::SwapAxis(); + break; + case VIRTKEY_AXIS_X_MIN: case VIRTKEY_AXIS_X_MAX: setVKeyAnalogX(CTRL_STICK_LEFT, VIRTKEY_AXIS_X_MIN, VIRTKEY_AXIS_X_MAX);