From ea71a0bb4f0519bc3bcaa0de2538de8cc4da158a Mon Sep 17 00:00:00 2001 From: Andrew Lanzone Date: Sun, 1 Jun 2025 22:13:58 -0700 Subject: [PATCH] Make controller selection wrap in inventory or containers --- apps/openmw/mwgui/itemview.cpp | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/apps/openmw/mwgui/itemview.cpp b/apps/openmw/mwgui/itemview.cpp index 08e5236fc6..3d01073694 100644 --- a/apps/openmw/mwgui/itemview.cpp +++ b/apps/openmw/mwgui/itemview.cpp @@ -224,19 +224,29 @@ namespace MWGui mControllerTooltip = !mControllerTooltip; updateControllerFocus(-1, mControllerFocus); } - else if (button == SDL_CONTROLLER_BUTTON_DPAD_UP && mControllerFocus % mRows != 0) - mControllerFocus--; - else if (button == SDL_CONTROLLER_BUTTON_DPAD_DOWN && mControllerFocus % mRows != mRows - 1) - mControllerFocus++; + else if (button == SDL_CONTROLLER_BUTTON_DPAD_UP) + { + if (mControllerFocus % mRows == 0) + mControllerFocus = std::min(mControllerFocus + mRows - 1, mItemCount - 1); + else + mControllerFocus--; + } + else if (button == SDL_CONTROLLER_BUTTON_DPAD_DOWN) + { + if (mControllerFocus % mRows == mRows - 1 || mControllerFocus == mItemCount - 1) + mControllerFocus -= mControllerFocus % mRows; + else + mControllerFocus++; + } else if (button == SDL_CONTROLLER_BUTTON_DPAD_LEFT && mControllerFocus >= mRows) mControllerFocus -= mRows; - else if (button == SDL_CONTROLLER_BUTTON_DPAD_RIGHT && mControllerFocus + mRows < mItemCount) - mControllerFocus += mRows; - - if (mControllerFocus < 0) - mControllerFocus = 0; - else if (mControllerFocus >= mItemCount - 1) - mControllerFocus = mItemCount - 1; + else if (button == SDL_CONTROLLER_BUTTON_DPAD_RIGHT) + { + if (mControllerFocus + mRows < mItemCount) + mControllerFocus += mRows; + else if (mControllerFocus / mRows != (mItemCount - 1) / mRows) + mControllerFocus = mItemCount - 1; + } if (prevFocus != mControllerFocus) updateControllerFocus(prevFocus, mControllerFocus);