Custom buttons: Store them in an array, remove as many count restrictions as possible.

This commit is contained in:
Henrik Rydgård 2023-06-20 09:30:38 +02:00
parent 56e5cbee91
commit 73836e7bcb
8 changed files with 74 additions and 248 deletions

View File

@ -637,27 +637,27 @@ static const ConfigSetting controlSettings[] = {
ConfigSetting("ShowTouchSquare", &g_Config.bShowTouchSquare, true, CfgFlag::PER_GAME), ConfigSetting("ShowTouchSquare", &g_Config.bShowTouchSquare, true, CfgFlag::PER_GAME),
ConfigSetting("ShowTouchTriangle", &g_Config.bShowTouchTriangle, true, CfgFlag::PER_GAME), ConfigSetting("ShowTouchTriangle", &g_Config.bShowTouchTriangle, true, CfgFlag::PER_GAME),
ConfigSetting("Custom0Mapping", "Custom0Image", "Custom0Shape", "Custom0Toggle", "Custom0Repeat", &g_Config.CustomButton0, {0, 0, 0, false, false}, CfgFlag::PER_GAME), ConfigSetting("Custom0Mapping", "Custom0Image", "Custom0Shape", "Custom0Toggle", "Custom0Repeat", &g_Config.CustomButton[0], {0, 0, 0, false, false}, CfgFlag::PER_GAME),
ConfigSetting("Custom1Mapping", "Custom1Image", "Custom1Shape", "Custom1Toggle", "Custom1Repeat", &g_Config.CustomButton1, {0, 1, 0, false, false}, CfgFlag::PER_GAME), ConfigSetting("Custom1Mapping", "Custom1Image", "Custom1Shape", "Custom1Toggle", "Custom1Repeat", &g_Config.CustomButton[1], {0, 1, 0, false, false}, CfgFlag::PER_GAME),
ConfigSetting("Custom2Mapping", "Custom2Image", "Custom2Shape", "Custom2Toggle", "Custom2Repeat", &g_Config.CustomButton2, {0, 2, 0, false, false}, CfgFlag::PER_GAME), ConfigSetting("Custom2Mapping", "Custom2Image", "Custom2Shape", "Custom2Toggle", "Custom2Repeat", &g_Config.CustomButton[2], {0, 2, 0, false, false}, CfgFlag::PER_GAME),
ConfigSetting("Custom3Mapping", "Custom3Image", "Custom3Shape", "Custom3Toggle", "Custom3Repeat", &g_Config.CustomButton3, {0, 3, 0, false, false}, CfgFlag::PER_GAME), ConfigSetting("Custom3Mapping", "Custom3Image", "Custom3Shape", "Custom3Toggle", "Custom3Repeat", &g_Config.CustomButton[3], {0, 3, 0, false, false}, CfgFlag::PER_GAME),
ConfigSetting("Custom4Mapping", "Custom4Image", "Custom4Shape", "Custom4Toggle", "Custom4Repeat", &g_Config.CustomButton4, {0, 4, 0, false, false}, CfgFlag::PER_GAME), ConfigSetting("Custom4Mapping", "Custom4Image", "Custom4Shape", "Custom4Toggle", "Custom4Repeat", &g_Config.CustomButton[4], {0, 4, 0, false, false}, CfgFlag::PER_GAME),
ConfigSetting("Custom5Mapping", "Custom5Image", "Custom5Shape", "Custom5Toggle", "Custom5Repeat", &g_Config.CustomButton5, {0, 0, 1, false, false}, CfgFlag::PER_GAME), ConfigSetting("Custom5Mapping", "Custom5Image", "Custom5Shape", "Custom5Toggle", "Custom5Repeat", &g_Config.CustomButton[5], {0, 0, 1, false, false}, CfgFlag::PER_GAME),
ConfigSetting("Custom6Mapping", "Custom6Image", "Custom6Shape", "Custom6Toggle", "Custom6Repeat", &g_Config.CustomButton6, {0, 1, 1, false, false}, CfgFlag::PER_GAME), ConfigSetting("Custom6Mapping", "Custom6Image", "Custom6Shape", "Custom6Toggle", "Custom6Repeat", &g_Config.CustomButton[6], {0, 1, 1, false, false}, CfgFlag::PER_GAME),
ConfigSetting("Custom7Mapping", "Custom7Image", "Custom7Shape", "Custom7Toggle", "Custom7Repeat", &g_Config.CustomButton7, {0, 2, 1, false, false}, CfgFlag::PER_GAME), ConfigSetting("Custom7Mapping", "Custom7Image", "Custom7Shape", "Custom7Toggle", "Custom7Repeat", &g_Config.CustomButton[7], {0, 2, 1, false, false}, CfgFlag::PER_GAME),
ConfigSetting("Custom8Mapping", "Custom8Image", "Custom8Shape", "Custom8Toggle", "Custom8Repeat", &g_Config.CustomButton8, {0, 3, 1, false, false}, CfgFlag::PER_GAME), ConfigSetting("Custom8Mapping", "Custom8Image", "Custom8Shape", "Custom8Toggle", "Custom8Repeat", &g_Config.CustomButton[8], {0, 3, 1, false, false}, CfgFlag::PER_GAME),
ConfigSetting("Custom9Mapping", "Custom9Image", "Custom9Shape", "Custom9Toggle", "Custom9Repeat", &g_Config.CustomButton9, {0, 4, 1, false, false}, CfgFlag::PER_GAME), ConfigSetting("Custom9Mapping", "Custom9Image", "Custom9Shape", "Custom9Toggle", "Custom9Repeat", &g_Config.CustomButton[9], {0, 4, 1, false, false}, CfgFlag::PER_GAME),
// Combo keys are going to be something else, but I don't want to break the config. // Combo keys are going to be something else, but I don't want to break the config.
ConfigSetting("fcombo0X", "fcombo0Y", "comboKeyScale0", "ShowComboKey0", &g_Config.touchCustom0, defaultTouchPosHide, CfgFlag::PER_GAME), ConfigSetting("fcombo0X", "fcombo0Y", "comboKeyScale0", "ShowComboKey0", &g_Config.touchCustom[0], defaultTouchPosHide, CfgFlag::PER_GAME),
ConfigSetting("fcombo1X", "fcombo1Y", "comboKeyScale1", "ShowComboKey1", &g_Config.touchCustom1, defaultTouchPosHide, CfgFlag::PER_GAME), ConfigSetting("fcombo1X", "fcombo1Y", "comboKeyScale1", "ShowComboKey1", &g_Config.touchCustom[1], defaultTouchPosHide, CfgFlag::PER_GAME),
ConfigSetting("fcombo2X", "fcombo2Y", "comboKeyScale2", "ShowComboKey2", &g_Config.touchCustom2, defaultTouchPosHide, CfgFlag::PER_GAME), ConfigSetting("fcombo2X", "fcombo2Y", "comboKeyScale2", "ShowComboKey2", &g_Config.touchCustom[2], defaultTouchPosHide, CfgFlag::PER_GAME),
ConfigSetting("fcombo3X", "fcombo3Y", "comboKeyScale3", "ShowComboKey3", &g_Config.touchCustom3, defaultTouchPosHide, CfgFlag::PER_GAME), ConfigSetting("fcombo3X", "fcombo3Y", "comboKeyScale3", "ShowComboKey3", &g_Config.touchCustom[3], defaultTouchPosHide, CfgFlag::PER_GAME),
ConfigSetting("fcombo4X", "fcombo4Y", "comboKeyScale4", "ShowComboKey4", &g_Config.touchCustom4, defaultTouchPosHide, CfgFlag::PER_GAME), ConfigSetting("fcombo4X", "fcombo4Y", "comboKeyScale4", "ShowComboKey4", &g_Config.touchCustom[4], defaultTouchPosHide, CfgFlag::PER_GAME),
ConfigSetting("fcombo5X", "fcombo5Y", "comboKeyScale5", "ShowComboKey5", &g_Config.touchCustom5, defaultTouchPosHide, CfgFlag::PER_GAME), ConfigSetting("fcombo5X", "fcombo5Y", "comboKeyScale5", "ShowComboKey5", &g_Config.touchCustom[5], defaultTouchPosHide, CfgFlag::PER_GAME),
ConfigSetting("fcombo6X", "fcombo6Y", "comboKeyScale6", "ShowComboKey6", &g_Config.touchCustom6, defaultTouchPosHide, CfgFlag::PER_GAME), ConfigSetting("fcombo6X", "fcombo6Y", "comboKeyScale6", "ShowComboKey6", &g_Config.touchCustom[6], defaultTouchPosHide, CfgFlag::PER_GAME),
ConfigSetting("fcombo7X", "fcombo7Y", "comboKeyScale7", "ShowComboKey7", &g_Config.touchCustom7, defaultTouchPosHide, CfgFlag::PER_GAME), ConfigSetting("fcombo7X", "fcombo7Y", "comboKeyScale7", "ShowComboKey7", &g_Config.touchCustom[7], defaultTouchPosHide, CfgFlag::PER_GAME),
ConfigSetting("fcombo8X", "fcombo8Y", "comboKeyScale8", "ShowComboKey8", &g_Config.touchCustom8, defaultTouchPosHide, CfgFlag::PER_GAME), ConfigSetting("fcombo8X", "fcombo8Y", "comboKeyScale8", "ShowComboKey8", &g_Config.touchCustom[8], defaultTouchPosHide, CfgFlag::PER_GAME),
ConfigSetting("fcombo9X", "fcombo9Y", "comboKeyScale9", "ShowComboKey9", &g_Config.touchCustom9, defaultTouchPosHide, CfgFlag::PER_GAME), ConfigSetting("fcombo9X", "fcombo9Y", "comboKeyScale9", "ShowComboKey9", &g_Config.touchCustom[9], defaultTouchPosHide, CfgFlag::PER_GAME),
#if defined(_WIN32) #if defined(_WIN32)
// A win32 user seeing touch controls is likely using PPSSPP on a tablet. There it makes // A win32 user seeing touch controls is likely using PPSSPP on a tablet. There it makes
@ -1707,16 +1707,9 @@ void Config::ResetControlLayout() {
reset(g_Config.touchRKey); reset(g_Config.touchRKey);
reset(g_Config.touchAnalogStick); reset(g_Config.touchAnalogStick);
reset(g_Config.touchRightAnalogStick); reset(g_Config.touchRightAnalogStick);
reset(g_Config.touchCustom0); for (int i = 0; i < CUSTOM_BUTTON_COUNT; i++) {
reset(g_Config.touchCustom1); reset(g_Config.touchCustom[i]);
reset(g_Config.touchCustom2); }
reset(g_Config.touchCustom3);
reset(g_Config.touchCustom4);
reset(g_Config.touchCustom5);
reset(g_Config.touchCustom6);
reset(g_Config.touchCustom7);
reset(g_Config.touchCustom8);
reset(g_Config.touchCustom9);
g_Config.fLeftStickHeadScale = 1.0f; g_Config.fLeftStickHeadScale = 1.0f;
g_Config.fRightStickHeadScale = 1.0f; g_Config.fRightStickHeadScale = 1.0f;
} }

View File

@ -341,16 +341,9 @@ public:
ConfigTouchPos touchAnalogStick; ConfigTouchPos touchAnalogStick;
ConfigTouchPos touchRightAnalogStick; ConfigTouchPos touchRightAnalogStick;
ConfigTouchPos touchCustom0; enum { CUSTOM_BUTTON_COUNT = 10 };
ConfigTouchPos touchCustom1;
ConfigTouchPos touchCustom2; ConfigTouchPos touchCustom[CUSTOM_BUTTON_COUNT];
ConfigTouchPos touchCustom3;
ConfigTouchPos touchCustom4;
ConfigTouchPos touchCustom5;
ConfigTouchPos touchCustom6;
ConfigTouchPos touchCustom7;
ConfigTouchPos touchCustom8;
ConfigTouchPos touchCustom9;
float fLeftStickHeadScale; float fLeftStickHeadScale;
float fRightStickHeadScale; float fRightStickHeadScale;
@ -364,16 +357,7 @@ public:
bool bShowTouchTriangle; bool bShowTouchTriangle;
bool bShowTouchSquare; bool bShowTouchSquare;
ConfigCustomButton CustomButton0; ConfigCustomButton CustomButton[CUSTOM_BUTTON_COUNT];
ConfigCustomButton CustomButton1;
ConfigCustomButton CustomButton2;
ConfigCustomButton CustomButton3;
ConfigCustomButton CustomButton4;
ConfigCustomButton CustomButton5;
ConfigCustomButton CustomButton6;
ConfigCustomButton CustomButton7;
ConfigCustomButton CustomButton8;
ConfigCustomButton CustomButton9;
// Ignored on iOS and other platforms that lack pause. // Ignored on iOS and other platforms that lack pause.
bool bShowTouchPause; bool bShowTouchPause;

View File

@ -131,73 +131,10 @@ void CustomButtonMappingScreen::CreateViews() {
ConfigCustomButton* cfg = nullptr; ConfigCustomButton* cfg = nullptr;
bool* show = nullptr; bool* show = nullptr;
memset(array, 0, sizeof(array)); memset(array, 0, sizeof(array));
switch (id_) { cfg = &g_Config.CustomButton[id_];
case 0: show = &g_Config.touchCustom[id_].show;
cfg = &g_Config.CustomButton0; for (int i = 0; i < ARRAY_SIZE(customKeyList); i++)
show = &g_Config.touchCustom0.show; array[i] = (0x01 == ((g_Config.CustomButton[id_].key >> i) & 0x01));
for (int i = 0; i < ARRAY_SIZE(customKeyList); i++)
array[i] = (0x01 == ((g_Config.CustomButton0.key >> i) & 0x01));
break;
case 1:
cfg = &g_Config.CustomButton1;
show = &g_Config.touchCustom1.show;
for (int i = 0; i < ARRAY_SIZE(customKeyList); i++)
array[i] = (0x01 == ((g_Config.CustomButton1.key >> i) & 0x01));
break;
case 2:
cfg = &g_Config.CustomButton2;
show = &g_Config.touchCustom2.show;
for (int i = 0; i < ARRAY_SIZE(customKeyList); i++)
array[i] = (0x01 == ((g_Config.CustomButton2.key >> i) & 0x01));
break;
case 3:
cfg = &g_Config.CustomButton3;
show = &g_Config.touchCustom3.show;
for (int i = 0; i < ARRAY_SIZE(customKeyList); i++)
array[i] = (0x01 == ((g_Config.CustomButton3.key >> i) & 0x01));
break;
case 4:
cfg = &g_Config.CustomButton4;
show = &g_Config.touchCustom4.show;
for (int i = 0; i < ARRAY_SIZE(customKeyList); i++)
array[i] = (0x01 == ((g_Config.CustomButton4.key >> i) & 0x01));
break;
case 5:
cfg = &g_Config.CustomButton5;
show = &g_Config.touchCustom5.show;
for (int i = 0; i < ARRAY_SIZE(customKeyList); i++)
array[i] = (0x01 == ((g_Config.CustomButton5.key >> i) & 0x01));
break;
case 6:
cfg = &g_Config.CustomButton6;
show = &g_Config.touchCustom6.show;
for (int i = 0; i < ARRAY_SIZE(customKeyList); i++)
array[i] = (0x01 == ((g_Config.CustomButton6.key >> i) & 0x01));
break;
case 7:
cfg = &g_Config.CustomButton7;
show = &g_Config.touchCustom7.show;
for (int i = 0; i < ARRAY_SIZE(customKeyList); i++)
array[i] = (0x01 == ((g_Config.CustomButton7.key >> i) & 0x01));
break;
case 8:
cfg = &g_Config.CustomButton8;
show = &g_Config.touchCustom8.show;
for (int i = 0; i < ARRAY_SIZE(customKeyList); i++)
array[i] = (0x01 == ((g_Config.CustomButton8.key >> i) & 0x01));
break;
case 9:
cfg = &g_Config.CustomButton9;
show = &g_Config.touchCustom9.show;
for (int i = 0; i < ARRAY_SIZE(customKeyList); i++)
array[i] = (0x01 == ((g_Config.CustomButton9.key >> i) & 0x01));
break;
default:
// This shouldn't happen, let's just not crash.
cfg = &g_Config.CustomButton0;
show = &g_Config.touchCustom0.show;
break;
}
leftColumn->Add(new ButtonPreview(g_Config.iTouchButtonStyle == 0 ? customKeyShapes[cfg->shape].i : customKeyShapes[cfg->shape].l, leftColumn->Add(new ButtonPreview(g_Config.iTouchButtonStyle == 0 ? customKeyShapes[cfg->shape].i : customKeyShapes[cfg->shape].l,
customKeyImages[cfg->image].i, customKeyImages[cfg->image].r, customKeyShapes[cfg->shape].f, customKeyShapes[cfg->shape].r, 62, 82)); customKeyImages[cfg->image].i, customKeyImages[cfg->image].r, customKeyShapes[cfg->shape].f, customKeyShapes[cfg->shape].r, 62, 82));
@ -282,37 +219,8 @@ static uint64_t arrayToInt(const bool ary[ARRAY_SIZE(CustomKeyData::customKeyLis
} }
void CustomButtonMappingScreen::saveArray() { void CustomButtonMappingScreen::saveArray() {
switch (id_) { if (id_ >= 0 && id_ < Config::CUSTOM_BUTTON_COUNT) {
case 0: g_Config.CustomButton[id_].key = arrayToInt(array);
g_Config.CustomButton0.key = arrayToInt(array);
break;
case 1:
g_Config.CustomButton1.key = arrayToInt(array);
break;
case 2:
g_Config.CustomButton2.key = arrayToInt(array);
break;
case 3:
g_Config.CustomButton3.key = arrayToInt(array);
break;
case 4:
g_Config.CustomButton4.key = arrayToInt(array);
break;
case 5:
g_Config.CustomButton5.key = arrayToInt(array);
break;
case 6:
g_Config.CustomButton6.key = arrayToInt(array);
break;
case 7:
g_Config.CustomButton7.key = arrayToInt(array);
break;
case 8:
g_Config.CustomButton8.key = arrayToInt(array);
break;
case 9:
g_Config.CustomButton9.key = arrayToInt(array);
break;
} }
} }

View File

@ -738,46 +738,27 @@ void InitPadLayout(float xres, float yres, float globalScale) {
int r_key_Y = l_key_Y; int r_key_Y = l_key_Y;
initTouchPos(g_Config.touchRKey, r_key_X, r_key_Y); initTouchPos(g_Config.touchRKey, r_key_X, r_key_Y);
//Combo key struct { float x; float y; } customButtonPositions[10] = {
int combo_key_X = halfW + bottom_key_spacing * scale * 1.2f; { 1.2f, 0.5f },
int combo_key_Y = yres / 2; { 2.2f, 0.5f },
initTouchPos(g_Config.touchCustom0, combo_key_X, combo_key_Y); { 3.2f, 0.5f },
{ 1.2f, 0.333f },
{ 2.2f, 0.333f },
{ -1.2f, 0.5f },
{ -2.2f, 0.5f },
{ -3.2f, 0.5f },
{ -1.2f, 0.333f },
{ -2.2f, 0.333f },
};
int combo1_key_X = halfW + bottom_key_spacing * scale * 2.2f; for (int i = 0; i < Config::CUSTOM_BUTTON_COUNT; i++) {
int combo1_key_Y = yres / 2; float y_offset = (float)(i / 10) * 0.08333f;
initTouchPos(g_Config.touchCustom1, combo1_key_X, combo1_key_Y);
int combo2_key_X = halfW + bottom_key_spacing * scale * 3.2f; int combo_key_X = halfW + bottom_key_spacing * scale * customButtonPositions[i % 10].x;
int combo2_key_Y = yres / 2; int combo_key_Y = yres * (y_offset + customButtonPositions[i % 10].y);
initTouchPos(g_Config.touchCustom2, combo2_key_X, combo2_key_Y);
int combo3_key_X = halfW + bottom_key_spacing * scale * 1.2f; initTouchPos(g_Config.touchCustom[i], combo_key_X, combo_key_Y);
int combo3_key_Y = yres / 3; }
initTouchPos(g_Config.touchCustom3, combo3_key_X, combo3_key_Y);
int combo4_key_X = halfW + bottom_key_spacing * scale * 2.2f;
int combo4_key_Y = yres / 3;
initTouchPos(g_Config.touchCustom4, combo4_key_X, combo4_key_Y);
int combo5_key_X = halfW - bottom_key_spacing * scale * 1.2f;
int combo5_key_Y = yres / 2;
initTouchPos(g_Config.touchCustom5, combo5_key_X, combo5_key_Y);
int combo6_key_X = halfW - bottom_key_spacing * scale * 2.2f;
int combo6_key_Y = yres / 2;
initTouchPos(g_Config.touchCustom6, combo6_key_X, combo6_key_Y);
int combo7_key_X = halfW - bottom_key_spacing * scale * 3.2f;
int combo7_key_Y = yres / 2;
initTouchPos(g_Config.touchCustom7, combo7_key_X, combo7_key_Y);
int combo8_key_X = halfW - bottom_key_spacing * scale * 1.2f;
int combo8_key_Y = yres / 3;
initTouchPos(g_Config.touchCustom8, combo8_key_X, combo8_key_Y);
int combo9_key_X = halfW - bottom_key_spacing * scale * 2.2f;
int combo9_key_Y = yres / 3;
initTouchPos(g_Config.touchCustom9, combo9_key_X, combo9_key_Y);
} }
UI::ViewGroup *CreatePadLayout(float xres, float yres, bool *pause, bool showPauseButton, ControlMapper* controllMapper) { UI::ViewGroup *CreatePadLayout(float xres, float yres, bool *pause, bool showPauseButton, ControlMapper* controllMapper) {
@ -884,16 +865,11 @@ UI::ViewGroup *CreatePadLayout(float xres, float yres, bool *pause, bool showPau
root->Add(new PSPStick(stickBg, "Right analog stick", stickImage, ImageID("I_STICK"), 1, g_Config.touchRightAnalogStick.scale, buttonLayoutParams(g_Config.touchRightAnalogStick))); root->Add(new PSPStick(stickBg, "Right analog stick", stickImage, ImageID("I_STICK"), 1, g_Config.touchRightAnalogStick.scale, buttonLayoutParams(g_Config.touchRightAnalogStick)));
} }
addCustomButton(g_Config.CustomButton0, "Custom 1 button", g_Config.touchCustom0); for (int i = 0; i < Config::CUSTOM_BUTTON_COUNT; i++) {
addCustomButton(g_Config.CustomButton1, "Custom 2 button", g_Config.touchCustom1); char temp[64];
addCustomButton(g_Config.CustomButton2, "Custom 3 button", g_Config.touchCustom2); snprintf(temp, sizeof(temp), "Custom %d button", i + 1);
addCustomButton(g_Config.CustomButton3, "Custom 4 button", g_Config.touchCustom3); addCustomButton(g_Config.CustomButton[i], temp, g_Config.touchCustom[i]);
addCustomButton(g_Config.CustomButton4, "Custom 5 button", g_Config.touchCustom4); }
addCustomButton(g_Config.CustomButton5, "Custom 6 button", g_Config.touchCustom5);
addCustomButton(g_Config.CustomButton6, "Custom 7 button", g_Config.touchCustom6);
addCustomButton(g_Config.CustomButton7, "Custom 8 button", g_Config.touchCustom7);
addCustomButton(g_Config.CustomButton8, "Custom 9 button", g_Config.touchCustom8);
addCustomButton(g_Config.CustomButton9, "Custom 10 button", g_Config.touchCustom9);
if (g_Config.bGestureControlEnabled) if (g_Config.bGestureControlEnabled)
root->Add(new GestureGamepad(controllMapper)); root->Add(new GestureGamepad(controllMapper));

View File

@ -44,7 +44,7 @@ public:
protected: protected:
virtual float GetButtonOpacity(); virtual float GetButtonOpacity();
const char *key_; std::string key_;
double lastFrameTime_; double lastFrameTime_;
float secondsWithoutTouch_ = 0.0; float secondsWithoutTouch_ = 0.0;
bool forceVisible_ = false; bool forceVisible_ = false;

View File

@ -520,16 +520,12 @@ void ControlLayoutView::CreateViews() {
} }
return b; return b;
}; };
addDragCustomKey(g_Config.touchCustom0, "Custom 1 button", g_Config.CustomButton0);
addDragCustomKey(g_Config.touchCustom1, "Custom 2 button", g_Config.CustomButton1); for (int i = 0; i < Config::CUSTOM_BUTTON_COUNT; i++) {
addDragCustomKey(g_Config.touchCustom2, "Custom 3 button", g_Config.CustomButton2); char temp[64];
addDragCustomKey(g_Config.touchCustom3, "Custom 4 button", g_Config.CustomButton3); snprintf(temp, sizeof(temp), "Custom %d button", i);
addDragCustomKey(g_Config.touchCustom4, "Custom 5 button", g_Config.CustomButton4); addDragCustomKey(g_Config.touchCustom[i], temp, g_Config.CustomButton[i]);
addDragCustomKey(g_Config.touchCustom5, "Custom 6 button", g_Config.CustomButton5); }
addDragCustomKey(g_Config.touchCustom6, "Custom 7 button", g_Config.CustomButton6);
addDragCustomKey(g_Config.touchCustom7, "Custom 8 button", g_Config.CustomButton7);
addDragCustomKey(g_Config.touchCustom8, "Custom 9 button", g_Config.CustomButton8);
addDragCustomKey(g_Config.touchCustom9, "Custom 10 button", g_Config.CustomButton9);
for (size_t i = 0; i < controls_.size(); i++) { for (size_t i = 0; i < controls_.size(); i++) {
Add(controls_[i]); Add(controls_[i]);

View File

@ -89,46 +89,15 @@ void TouchControlVisibilityScreen::CreateViews() {
return UI::EVENT_DONE; return UI::EVENT_DONE;
}}); }});
toggles_.push_back({ "Fast-forward", &g_Config.touchFastForwardKey.show, ImageID::invalid(), nullptr }); toggles_.push_back({ "Fast-forward", &g_Config.touchFastForwardKey.show, ImageID::invalid(), nullptr });
toggles_.push_back({ "Custom 1", &g_Config.touchCustom0.show, ImageID::invalid(), [=](EventParams &e) {
screenManager()->push(new CustomButtonMappingScreen(gamePath_, 0)); for (int i = 0; i < Config::CUSTOM_BUTTON_COUNT; i++) {
return UI::EVENT_DONE; char temp[256];
}}); snprintf(temp, sizeof(temp), "Custom %d", i + 1);
toggles_.push_back({ "Custom 2", &g_Config.touchCustom1.show, ImageID::invalid(), [=](EventParams &e) { toggles_.push_back({ temp, &g_Config.touchCustom[i].show, ImageID::invalid(), [=](EventParams &e) {
screenManager()->push(new CustomButtonMappingScreen(gamePath_, 1)); screenManager()->push(new CustomButtonMappingScreen(gamePath_, i));
return UI::EVENT_DONE; return UI::EVENT_DONE;
}}); } });
toggles_.push_back({ "Custom 3", &g_Config.touchCustom2.show, ImageID::invalid(), [=](EventParams &e) { }
screenManager()->push(new CustomButtonMappingScreen(gamePath_, 2));
return UI::EVENT_DONE;
}});
toggles_.push_back({ "Custom 4", &g_Config.touchCustom3.show, ImageID::invalid(), [=](EventParams &e) {
screenManager()->push(new CustomButtonMappingScreen(gamePath_, 3));
return UI::EVENT_DONE;
}});
toggles_.push_back({ "Custom 5", &g_Config.touchCustom4.show, ImageID::invalid(), [=](EventParams &e) {
screenManager()->push(new CustomButtonMappingScreen(gamePath_, 4));
return UI::EVENT_DONE;
}});
toggles_.push_back({ "Custom 6", &g_Config.touchCustom5.show, ImageID::invalid(), [=](EventParams &e) {
screenManager()->push(new CustomButtonMappingScreen(gamePath_, 5));
return UI::EVENT_DONE;
}});
toggles_.push_back({ "Custom 7", &g_Config.touchCustom6.show, ImageID::invalid(), [=](EventParams &e) {
screenManager()->push(new CustomButtonMappingScreen(gamePath_, 6));
return UI::EVENT_DONE;
}});
toggles_.push_back({ "Custom 8", &g_Config.touchCustom7.show, ImageID::invalid(), [=](EventParams &e) {
screenManager()->push(new CustomButtonMappingScreen(gamePath_, 7));
return UI::EVENT_DONE;
}});
toggles_.push_back({ "Custom 9", &g_Config.touchCustom8.show, ImageID::invalid(), [=](EventParams &e) {
screenManager()->push(new CustomButtonMappingScreen(gamePath_, 8));
return UI::EVENT_DONE;
}});
toggles_.push_back({ "Custom 10", &g_Config.touchCustom9.show, ImageID::invalid(), [=](EventParams &e) {
screenManager()->push(new CustomButtonMappingScreen(gamePath_, 9));
return UI::EVENT_DONE;
}});
auto mc = GetI18NCategory(I18NCat::MAPPABLECONTROLS); auto mc = GetI18NCategory(I18NCat::MAPPABLECONTROLS);
for (auto toggle : toggles_) { for (auto toggle : toggles_) {
@ -139,7 +108,7 @@ void TouchControlVisibilityScreen::CreateViews() {
row->Add(checkbox); row->Add(checkbox);
Choice *choice; Choice *choice;
if (toggle.handle) { if (toggle.handle) {
choice = new Choice(std::string(mc->T(toggle.key))+" ("+mc->T("tap to customize")+")", "", false, new LinearLayoutParams(1.0f)); choice = new Choice(std::string(mc->T(toggle.key)) + " (" + mc->T("tap to customize") + ")", "", false, new LinearLayoutParams(1.0f));
choice->OnClick.Add(toggle.handle); choice->OnClick.Add(toggle.handle);
} else if (toggle.img.isValid()) { } else if (toggle.img.isValid()) {
choice = new CheckBoxChoice(toggle.img, checkbox, new LinearLayoutParams(1.0f)); choice = new CheckBoxChoice(toggle.img, checkbox, new LinearLayoutParams(1.0f));

View File

@ -25,7 +25,7 @@ namespace UI {
} }
struct TouchButtonToggle { struct TouchButtonToggle {
const char *key; std::string key;
bool *show; bool *show;
ImageID img; ImageID img;
std::function<UI::EventReturn(UI::EventParams&)> handle; std::function<UI::EventReturn(UI::EventParams&)> handle;