Show tooltips in controller mode on spell menus

This commit is contained in:
Andrew Lanzone 2025-06-07 00:35:46 -07:00
parent b1989ffdf7
commit ea70f2b5c2
2 changed files with 41 additions and 0 deletions

View File

@ -9,6 +9,7 @@
#include <components/settings/values.hpp>
#include "../mwbase/environment.hpp"
#include "../mwbase/inputmanager.hpp"
#include "../mwbase/mechanicsmanager.hpp"
#include "../mwbase/windowmanager.hpp"
@ -37,6 +38,7 @@ namespace MWGui
mDisableGamepadCursor = true;
mControllerButtons.a = "#{sBuy}";
mControllerButtons.b = "#{sCancel}";
mControllerButtons.r3 = "#{sInfo}";
}
}
@ -144,6 +146,13 @@ namespace MWGui
mControllerFocus = 0;
if (mSpellButtons.size() > 0)
mSpellButtons[0].first->setStateSelected(true);
MWBase::WindowManager* winMgr = MWBase::Environment::get().getWindowManager();
if (winMgr->getControllerTooltip())
{
winMgr->setCursorActive(false);
winMgr->setControllerTooltip(false);
}
}
// Canvas size must be expressed with VScroll disabled, otherwise MyGUI would expand the scroll area when the
@ -228,6 +237,12 @@ namespace MWGui
{
onCancelButtonClicked(mCancelButton);
}
else if (arg.button == SDL_CONTROLLER_BUTTON_RIGHTSTICK)
{
// Toggle info tooltip
MWBase::Environment::get().getWindowManager()->setControllerTooltip(
!MWBase::Environment::get().getWindowManager()->getControllerTooltip());
}
else if (arg.button == SDL_CONTROLLER_BUTTON_DPAD_UP)
{
if (mSpellButtons.size() <= 1)
@ -258,6 +273,10 @@ namespace MWGui
const int lineHeight = Settings::gui().mFontSize + 2;
mSpellsView->setViewOffset(MyGUI::IntPoint(0, -lineHeight * (line - 5)));
}
// Warp the mouse to the selected spell to show the tooltip
if (MWBase::Environment::get().getWindowManager()->getControllerTooltip())
MWBase::Environment::get().getInputManager()->warpMouseToWidget(mSpellButtons[mControllerFocus].first);
}
return true;

View File

@ -14,6 +14,7 @@
#include "../mwbase/environment.hpp"
#include "../mwbase/mechanicsmanager.hpp"
#include "../mwbase/inputmanager.hpp"
#include "../mwbase/windowmanager.hpp"
#include "../mwworld/class.hpp"
@ -102,6 +103,7 @@ namespace MWGui
mControllerButtons.a = "#{sSelect}";
mControllerButtons.b = "#{sCancel}";
mControllerButtons.x = "#{sOk}";
mControllerButtons.r3 = "#{sInfo}";
}
}
@ -615,6 +617,13 @@ namespace MWGui
mPtr = actor;
mNameEdit->setCaption({});
MWBase::WindowManager* winMgr = MWBase::Environment::get().getWindowManager();
if (Settings::gui().mControllerMenus && winMgr->getControllerTooltip())
{
winMgr->setCursorActive(false);
winMgr->setControllerTooltip(false);
}
startEditing();
}
@ -1048,6 +1057,12 @@ namespace MWGui
MWBase::Environment::get().getWindowManager()->playSound(ESM::RefId::stringRefId("Menu Click"));
}
}
else if (arg.button == SDL_CONTROLLER_BUTTON_RIGHTSTICK)
{
// Toggle info tooltip
MWBase::Environment::get().getWindowManager()->setControllerTooltip(
!MWBase::Environment::get().getWindowManager()->getControllerTooltip());
}
else if (arg.button == SDL_CONTROLLER_BUTTON_DPAD_UP)
{
if (mRightColumn && mEffectButtons.size() > 0)
@ -1108,6 +1123,13 @@ namespace MWGui
mAvailableEffectsList->setViewOffset(-lineHeight * (mAvailableFocus - 5));
}
if (!mRightColumn && mAvailableFocus >= 0 && mAvailableFocus < mAvailableButtons.size())
{
// Warp the mouse to the selected spell to show the tooltip
if (MWBase::Environment::get().getWindowManager()->getControllerTooltip())
MWBase::Environment::get().getInputManager()->warpMouseToWidget(mAvailableButtons[mAvailableFocus]);
}
return true;
}
}