1
0
Fork 0
mirror of https://github.com/OpenMW/openmw.git synced 2025-10-24 19:56:37 +00:00

Add helper function for toggling controller focus on lists

This commit is contained in:
Andrew Lanzone 2025-05-31 19:43:28 -07:00
parent 2dc1d8fed7
commit e3a9b71bb9
8 changed files with 38 additions and 37 deletions

View file

@ -488,9 +488,9 @@ namespace MWGui
if (mButtons.size() == 2 && mControllerFocus == 0)
return true;
mButtons[mControllerFocus]->setStateSelected(false);
setControllerFocus(mButtons, mControllerFocus, false);
mControllerFocus = wrap(mControllerFocus - 1, mButtons.size());
mButtons[mControllerFocus]->setStateSelected(true);
setControllerFocus(mButtons, mControllerFocus, true);
}
else if (arg.button == SDL_CONTROLLER_BUTTON_DPAD_DOWN)
{
@ -499,9 +499,9 @@ namespace MWGui
if (mButtons.size() == 2 && mControllerFocus == mButtons.size() - 1)
return true;
mButtons[mControllerFocus]->setStateSelected(false);
setControllerFocus(mButtons, mControllerFocus, false);
mControllerFocus = wrap(mControllerFocus + 1, mButtons.size());
mButtons[mControllerFocus]->setStateSelected(true);
setControllerFocus(mButtons, mControllerFocus, true);
}
return true;
@ -709,15 +709,15 @@ namespace MWGui
}
else if (arg.button == SDL_CONTROLLER_BUTTON_DPAD_LEFT)
{
mButtons[mControllerFocus]->setStateSelected(false);
setControllerFocus(mButtons, mControllerFocus, false);
mControllerFocus = wrap(mControllerFocus - 1, mButtons.size());
mButtons[mControllerFocus]->setStateSelected(true);
setControllerFocus(mButtons, mControllerFocus, true);
}
else if (arg.button == SDL_CONTROLLER_BUTTON_DPAD_RIGHT)
{
mButtons[mControllerFocus]->setStateSelected(false);
setControllerFocus(mButtons, mControllerFocus, false);
mControllerFocus = wrap(mControllerFocus + 1, mButtons.size());
mButtons[mControllerFocus]->setStateSelected(true);
setControllerFocus(mButtons, mControllerFocus, true);
}
return true;
}

View file

@ -182,15 +182,15 @@ namespace MWGui
onCancel(mCancelButton);
else if (arg.button == SDL_CONTROLLER_BUTTON_DPAD_UP)
{
mButtons[mControllerFocus]->setStateSelected(false);
setControllerFocus(mButtons, mControllerFocus, false);
mControllerFocus = wrap(mControllerFocus - 1, mButtons.size());
mButtons[mControllerFocus]->setStateSelected(true);
setControllerFocus(mButtons, mControllerFocus, true);
}
else if (arg.button == SDL_CONTROLLER_BUTTON_DPAD_DOWN)
{
mButtons[mControllerFocus]->setStateSelected(false);
setControllerFocus(mButtons, mControllerFocus, false);
mControllerFocus = wrap(mControllerFocus + 1, mButtons.size());
mButtons[mControllerFocus]->setStateSelected(true);
setControllerFocus(mButtons, mControllerFocus, true);
}
return true;

View file

@ -461,9 +461,9 @@ namespace MWGui
if (mButtons.size() == 2 && mControllerFocus == 0)
return true;
mButtons[mControllerFocus]->setStateSelected(false);
setControllerFocus(mButtons, mControllerFocus, false);
mControllerFocus = wrap(mControllerFocus - 1, mButtons.size());
mButtons[mControllerFocus]->setStateSelected(true);
setControllerFocus(mButtons, mControllerFocus, true);
}
else if (arg.button == SDL_CONTROLLER_BUTTON_DPAD_DOWN || arg.button == SDL_CONTROLLER_BUTTON_DPAD_RIGHT)
{
@ -472,9 +472,9 @@ namespace MWGui
if (mButtons.size() == 2 && mControllerFocus == mButtons.size() - 1)
return true;
mButtons[mControllerFocus]->setStateSelected(false);
setControllerFocus(mButtons, mControllerFocus, false);
mControllerFocus = wrap(mControllerFocus + 1, mButtons.size());
mButtons[mControllerFocus]->setStateSelected(true);
setControllerFocus(mButtons, mControllerFocus, true);
}
return true;

View file

@ -121,7 +121,7 @@ namespace MWGui
if (Settings::gui().mControllerMenus)
{
mButtons[mControllerFocus]->setStateSelected(true);
setControllerFocus(mButtons, mControllerFocus, true);
mControllerButtons.a = "#{sSelect}";
mControllerButtons.b = "#{sBack}";
mControllerButtons.x = "#{sDone}";
@ -574,22 +574,16 @@ namespace MWGui
else if (arg.button == SDL_CONTROLLER_BUTTON_DPAD_UP ||
arg.button == SDL_CONTROLLER_BUTTON_DPAD_LEFT)
{
mButtons[mControllerFocus]->setStateSelected(false);
if (mControllerFocus == 0)
mControllerFocus = mButtons.size() - 1;
else
mControllerFocus--;
mButtons[mControllerFocus]->setStateSelected(true);
setControllerFocus(mButtons, mControllerFocus, false);
mControllerFocus = wrap(mControllerFocus - 1, mButtons.size());
setControllerFocus(mButtons, mControllerFocus, true);
}
else if (arg.button == SDL_CONTROLLER_BUTTON_DPAD_DOWN ||
arg.button == SDL_CONTROLLER_BUTTON_DPAD_RIGHT)
{
mButtons[mControllerFocus]->setStateSelected(false);
if (mControllerFocus == mButtons.size() - 1)
mControllerFocus = 0;
else
mControllerFocus++;
mButtons[mControllerFocus]->setStateSelected(true);
setControllerFocus(mButtons, mControllerFocus, false);
mControllerFocus = wrap(mControllerFocus + 1, mButtons.size());
setControllerFocus(mButtons, mControllerFocus, true);
}
return true;

View file

@ -263,18 +263,18 @@ namespace MWGui
if (mTrainingButtons.size() <= 1)
return true;
mTrainingButtons[mControllerFocus]->setStateSelected(false);
setControllerFocus(mTrainingButtons, mControllerFocus, false);
mControllerFocus = wrap(mControllerFocus - 1, mTrainingButtons.size());
mTrainingButtons[mControllerFocus]->setStateSelected(true);
setControllerFocus(mTrainingButtons, mControllerFocus, true);
}
else if (arg.button == SDL_CONTROLLER_BUTTON_DPAD_DOWN)
{
if (mTrainingButtons.size() <= 1)
return true;
mTrainingButtons[mControllerFocus]->setStateSelected(false);
setControllerFocus(mTrainingButtons, mControllerFocus, false);
mControllerFocus = wrap(mControllerFocus + 1, mTrainingButtons.size());
mTrainingButtons[mControllerFocus]->setStateSelected(true);
setControllerFocus(mTrainingButtons, mControllerFocus, true);
}
return true;

View file

@ -270,18 +270,18 @@ namespace MWGui
if (mDestinationButtons.size() <= 1)
return true;
mDestinationButtons[mControllerFocus]->setStateSelected(false);
setControllerFocus(mDestinationButtons, mControllerFocus, false);
mControllerFocus = wrap(mControllerFocus - 1, mDestinationButtons.size());
mDestinationButtons[mControllerFocus]->setStateSelected(true);
setControllerFocus(mDestinationButtons, mControllerFocus, true);
}
else if (arg.button == SDL_CONTROLLER_BUTTON_DPAD_DOWN)
{
if (mDestinationButtons.size() <= 1)
return true;
mDestinationButtons[mControllerFocus]->setStateSelected(false);
setControllerFocus(mDestinationButtons, mControllerFocus, false);
mControllerFocus = wrap(mControllerFocus + 1, mDestinationButtons.size());
mDestinationButtons[mControllerFocus]->setStateSelected(true);
setControllerFocus(mDestinationButtons, mControllerFocus, true);
}
// Scroll the list to keep the active item in view

View file

@ -25,6 +25,12 @@ int MWGui::wrap(int index, int max)
return index;
}
void MWGui::setControllerFocus(std::vector<MyGUI::Button*> buttons, int index, bool focused)
{
if (index >= 0 && index < buttons.size())
buttons[index]->setStateSelected(focused);
}
WindowBase::WindowBase(std::string_view parLayout)
: Layout(parLayout)
{

View file

@ -15,6 +15,7 @@ namespace MWGui
class DragAndDrop;
int wrap(int index, int max);
void setControllerFocus(std::vector<MyGUI::Button*> buttons, int index, bool selected);
struct ControllerButtonStr
{