From be298f78cb3d8172e0fa18608475ac3803e9e79e Mon Sep 17 00:00:00 2001 From: Andrew Lanzone Date: Sat, 10 May 2025 23:17:23 -0700 Subject: [PATCH] Basic controller support for the books --- apps/openmw/mwgui/bookwindow.cpp | 42 ++++++++++++++++++++++++++++++++ apps/openmw/mwgui/bookwindow.hpp | 1 + 2 files changed, 43 insertions(+) diff --git a/apps/openmw/mwgui/bookwindow.cpp b/apps/openmw/mwgui/bookwindow.cpp index ef875a18b9..91b1af615e 100644 --- a/apps/openmw/mwgui/bookwindow.cpp +++ b/apps/openmw/mwgui/bookwindow.cpp @@ -27,15 +27,19 @@ namespace MWGui { getWidget(mCloseButton, "CloseButton"); mCloseButton->eventMouseButtonClick += MyGUI::newDelegate(this, &BookWindow::onCloseButtonClicked); + trackFocusEvents(mCloseButton); getWidget(mTakeButton, "TakeButton"); mTakeButton->eventMouseButtonClick += MyGUI::newDelegate(this, &BookWindow::onTakeButtonClicked); + trackFocusEvents(mTakeButton); getWidget(mNextPageButton, "NextPageBTN"); mNextPageButton->eventMouseButtonClick += MyGUI::newDelegate(this, &BookWindow::onNextPageButtonClicked); + trackFocusEvents(mNextPageButton); getWidget(mPrevPageButton, "PrevPageBTN"); mPrevPageButton->eventMouseButtonClick += MyGUI::newDelegate(this, &BookWindow::onPrevPageButtonClicked); + trackFocusEvents(mPrevPageButton); getWidget(mLeftPageNumber, "LeftPageNumber"); getWidget(mRightPageNumber, "RightPageNumber"); @@ -218,4 +222,42 @@ namespace MWGui } } + bool BookWindow::onControllerButtonEvent(const SDL_ControllerButtonEvent& arg) + { + if (arg.button == SDL_CONTROLLER_BUTTON_A) + { + if (mMouseFocus != nullptr) + return false; + + if (mTakeButton->getVisible()) + onTakeButtonClicked(mTakeButton); + else + onCloseButtonClicked(mCloseButton); + return true; + } + else if (arg.button == SDL_CONTROLLER_BUTTON_B) + { + onCloseButtonClicked(mCloseButton); + return true; + } + else if (arg.button == SDL_CONTROLLER_BUTTON_DPAD_UP || + arg.button == SDL_CONTROLLER_BUTTON_DPAD_DOWN) + { + return true; + } + else if (arg.button == SDL_CONTROLLER_BUTTON_LEFTSHOULDER || + arg.button == SDL_CONTROLLER_BUTTON_DPAD_LEFT) + { + prevPage(); + return true; + } + else if (arg.button == SDL_CONTROLLER_BUTTON_RIGHTSHOULDER || + arg.button == SDL_CONTROLLER_BUTTON_DPAD_RIGHT) + { + nextPage(); + return true; + } + + return false; + } } diff --git a/apps/openmw/mwgui/bookwindow.hpp b/apps/openmw/mwgui/bookwindow.hpp index 5a3dfdf584..062c6e9dbd 100644 --- a/apps/openmw/mwgui/bookwindow.hpp +++ b/apps/openmw/mwgui/bookwindow.hpp @@ -18,6 +18,7 @@ namespace MWGui void setInventoryAllowed(bool allowed); void onResChange(int, int) override { center(); } + bool onControllerButtonEvent(const SDL_ControllerButtonEvent& arg) override; std::string_view getWindowIdForLua() const override { return "Book"; }