mirror of
https://github.com/hrydgard/ppsspp.git
synced 2026-10-14 15:00:30 +02:00
Fix adding excessive buttons to the UI input mappings
This commit is contained in:
1 parent
fff0261be5
commit
b40b4fc1d0
1 file changed
+32
-2
+32
-2
@@ -76,6 +76,10 @@ void SingleInputMappingFromPspButton(int btn, std::vector<InputMapping> *mapping
|
||||
InputMappingsFromPspButton(btn, &multiMappings, ignoreMouse);
|
||||
mappings->clear();
|
||||
for (auto &mapping : multiMappings) {
|
||||
// Ignore combos
|
||||
if (mapping.mappings.size() > 1) {
|
||||
continue;
|
||||
}
|
||||
if (!mapping.empty()) {
|
||||
mappings->push_back(mapping.mappings[0]);
|
||||
} else {
|
||||
@@ -89,6 +93,28 @@ static void InsertIntoVector(std::vector<InputMapping> *vec, const InputMapping
|
||||
vec->push_back(mapping);
|
||||
}
|
||||
|
||||
// Used to avoid multiple main buttons both being mapped to cancel or confirm.
|
||||
bool HasMainButtonMapping(const std::vector<InputMapping> &mappings) {
|
||||
for (auto mapping : mappings) {
|
||||
switch (mapping.keyCode) {
|
||||
case NKCODE_BUTTON_A:
|
||||
case NKCODE_BUTTON_B:
|
||||
case NKCODE_BUTTON_C:
|
||||
case NKCODE_BUTTON_X:
|
||||
case NKCODE_BUTTON_Y:
|
||||
case NKCODE_BUTTON_Z:
|
||||
case NKCODE_BUTTON_1:
|
||||
case NKCODE_BUTTON_2:
|
||||
case NKCODE_BUTTON_3:
|
||||
case NKCODE_BUTTON_4:
|
||||
case NKCODE_BUTTON_5:
|
||||
case NKCODE_BUTTON_6:
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
// TODO: This is such a mess...
|
||||
void UpdateNativeMenuKeys() {
|
||||
std::vector<InputMapping> confirmKeys, cancelKeys;
|
||||
@@ -125,7 +151,6 @@ void UpdateNativeMenuKeys() {
|
||||
InputMapping(DEVICE_ID_KEYBOARD, NKCODE_SPACE),
|
||||
InputMapping(DEVICE_ID_KEYBOARD, NKCODE_ENTER),
|
||||
InputMapping(DEVICE_ID_KEYBOARD, NKCODE_NUMPAD_ENTER),
|
||||
InputMapping(DEVICE_ID_ANY, confirmWithCross ? NKCODE_BUTTON_A : NKCODE_BUTTON_B),
|
||||
InputMapping(DEVICE_ID_PAD_0, NKCODE_DPAD_CENTER), // A number of old obscure Android devices need this.
|
||||
};
|
||||
|
||||
@@ -133,17 +158,22 @@ void UpdateNativeMenuKeys() {
|
||||
for (size_t i = 0; i < ARRAY_SIZE(hardcodedConfirmKeys); i++) {
|
||||
InsertIntoVector(&confirmKeys, hardcodedConfirmKeys[i]);
|
||||
}
|
||||
if (!HasMainButtonMapping(confirmKeys)) {
|
||||
confirmKeys.push_back(InputMapping(DEVICE_ID_ANY, confirmWithCross ? NKCODE_BUTTON_A : NKCODE_BUTTON_B));
|
||||
}
|
||||
|
||||
const InputMapping hardcodedCancelKeys[] = {
|
||||
InputMapping(DEVICE_ID_KEYBOARD, NKCODE_ESCAPE),
|
||||
InputMapping(DEVICE_ID_ANY, NKCODE_BACK),
|
||||
InputMapping(DEVICE_ID_ANY, confirmWithCross ? NKCODE_BUTTON_B : NKCODE_BUTTON_A),
|
||||
InputMapping(DEVICE_ID_MOUSE, NKCODE_EXT_MOUSEBUTTON_4),
|
||||
};
|
||||
|
||||
for (size_t i = 0; i < ARRAY_SIZE(hardcodedCancelKeys); i++) {
|
||||
InsertIntoVector(&cancelKeys, hardcodedCancelKeys[i]);
|
||||
}
|
||||
if (!HasMainButtonMapping(cancelKeys)) {
|
||||
confirmKeys.push_back(InputMapping(DEVICE_ID_ANY, confirmWithCross ? NKCODE_BUTTON_A : NKCODE_BUTTON_B));
|
||||
}
|
||||
|
||||
const InputMapping hardcodedInfoKeys[] = {
|
||||
InputMapping(DEVICE_ID_KEYBOARD, NKCODE_S),
|
||||
|
||||
Reference in new issue
Block a user