From ea70f2b5c22033858be178d0c9f09dedaea4218d Mon Sep 17 00:00:00 2001 From: Andrew Lanzone Date: Sat, 7 Jun 2025 00:35:46 -0700 Subject: [PATCH] Show tooltips in controller mode on spell menus --- apps/openmw/mwgui/spellbuyingwindow.cpp | 19 +++++++++++++++++++ apps/openmw/mwgui/spellcreationdialog.cpp | 22 ++++++++++++++++++++++ 2 files changed, 41 insertions(+) diff --git a/apps/openmw/mwgui/spellbuyingwindow.cpp b/apps/openmw/mwgui/spellbuyingwindow.cpp index 27065bc2c3..3bc38b2e44 100644 --- a/apps/openmw/mwgui/spellbuyingwindow.cpp +++ b/apps/openmw/mwgui/spellbuyingwindow.cpp @@ -9,6 +9,7 @@ #include #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; diff --git a/apps/openmw/mwgui/spellcreationdialog.cpp b/apps/openmw/mwgui/spellcreationdialog.cpp index 103fa3df1d..119a32ffea 100644 --- a/apps/openmw/mwgui/spellcreationdialog.cpp +++ b/apps/openmw/mwgui/spellcreationdialog.cpp @@ -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; } }