mirror of
https://github.com/OpenMW/openmw.git
synced 2025-10-23 19:26:41 +00:00
Better joystick/mouse coordination in save game diaglog
This commit is contained in:
parent
a78bdee941
commit
fa52fea59b
2 changed files with 39 additions and 12 deletions
|
@ -161,6 +161,13 @@ namespace MWGui
|
||||||
mSaveList->removeAllItems();
|
mSaveList->removeAllItems();
|
||||||
onSlotSelected(mSaveList, MyGUI::ITEM_NONE);
|
onSlotSelected(mSaveList, MyGUI::ITEM_NONE);
|
||||||
|
|
||||||
|
if (Settings::gui().mControllerMenus)
|
||||||
|
{
|
||||||
|
mOkButtonFocus = true;
|
||||||
|
mOkButton->setStateSelected(true);
|
||||||
|
mCancelButton->setStateSelected(false);
|
||||||
|
}
|
||||||
|
|
||||||
MWBase::StateManager* mgr = MWBase::Environment::get().getStateManager();
|
MWBase::StateManager* mgr = MWBase::Environment::get().getStateManager();
|
||||||
if (mgr->characterBegin() == mgr->characterEnd())
|
if (mgr->characterBegin() == mgr->characterEnd())
|
||||||
return;
|
return;
|
||||||
|
@ -501,30 +508,40 @@ namespace MWGui
|
||||||
{
|
{
|
||||||
if (arg.button == SDL_CONTROLLER_BUTTON_A)
|
if (arg.button == SDL_CONTROLLER_BUTTON_A)
|
||||||
{
|
{
|
||||||
if (mMouseFocus != nullptr)
|
// Have A button do nothing so mouse controller still works.
|
||||||
|
if (mUsingGamepadGuiCursor)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
onOkButtonClicked(mOkButton);
|
if (mOkButtonFocus)
|
||||||
return true;
|
onOkButtonClicked(mOkButton);
|
||||||
|
else
|
||||||
|
onCancelButtonClicked(mCancelButton);
|
||||||
}
|
}
|
||||||
else if (arg.button == SDL_CONTROLLER_BUTTON_B)
|
else if (arg.button == SDL_CONTROLLER_BUTTON_B)
|
||||||
{
|
{
|
||||||
onCancelButtonClicked(mCancelButton);
|
onCancelButtonClicked(mCancelButton);
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
else if (arg.button == SDL_CONTROLLER_BUTTON_DPAD_UP)
|
else if (arg.button == SDL_CONTROLLER_BUTTON_DPAD_UP)
|
||||||
{
|
{
|
||||||
MWBase::WindowManager* winMgr = MWBase::Environment::get().getWindowManager();
|
MWBase::WindowManager* winMgr = MWBase::Environment::get().getWindowManager();
|
||||||
winMgr->setKeyFocusWidget(mSaveList);
|
winMgr->setKeyFocusWidget(mSaveList);
|
||||||
winMgr->injectKeyPress(MyGUI::KeyCode::ArrowUp, 0, false);
|
winMgr->injectKeyPress(MyGUI::KeyCode::ArrowUp, 0, false);
|
||||||
return true;
|
mUsingGamepadGuiCursor = false;
|
||||||
}
|
}
|
||||||
else if (arg.button == SDL_CONTROLLER_BUTTON_DPAD_DOWN)
|
else if (arg.button == SDL_CONTROLLER_BUTTON_DPAD_DOWN)
|
||||||
{
|
{
|
||||||
MWBase::WindowManager* winMgr = MWBase::Environment::get().getWindowManager();
|
MWBase::WindowManager* winMgr = MWBase::Environment::get().getWindowManager();
|
||||||
winMgr->setKeyFocusWidget(mSaveList);
|
winMgr->setKeyFocusWidget(mSaveList);
|
||||||
winMgr->injectKeyPress(MyGUI::KeyCode::ArrowDown, 0, false);
|
winMgr->injectKeyPress(MyGUI::KeyCode::ArrowDown, 0, false);
|
||||||
return true;
|
mUsingGamepadGuiCursor = false;
|
||||||
|
}
|
||||||
|
else if ((arg.button == SDL_CONTROLLER_BUTTON_DPAD_LEFT && !mOkButtonFocus) ||
|
||||||
|
(arg.button == SDL_CONTROLLER_BUTTON_DPAD_RIGHT && mOkButtonFocus))
|
||||||
|
{
|
||||||
|
mOkButtonFocus = !mOkButtonFocus;
|
||||||
|
mOkButton->setStateSelected(mOkButtonFocus);
|
||||||
|
mCancelButton->setStateSelected(!mOkButtonFocus);
|
||||||
|
mUsingGamepadGuiCursor = false;
|
||||||
}
|
}
|
||||||
else if (arg.button == SDL_CONTROLLER_BUTTON_LEFTSHOULDER)
|
else if (arg.button == SDL_CONTROLLER_BUTTON_LEFTSHOULDER)
|
||||||
{
|
{
|
||||||
|
@ -534,8 +551,7 @@ namespace MWGui
|
||||||
else
|
else
|
||||||
index--;
|
index--;
|
||||||
mCharacterSelection->setIndexSelected(index);
|
mCharacterSelection->setIndexSelected(index);
|
||||||
|
mUsingGamepadGuiCursor = false;
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
else if (arg.button == SDL_CONTROLLER_BUTTON_RIGHTSHOULDER)
|
else if (arg.button == SDL_CONTROLLER_BUTTON_RIGHTSHOULDER)
|
||||||
{
|
{
|
||||||
|
@ -545,10 +561,18 @@ namespace MWGui
|
||||||
else
|
else
|
||||||
index++;
|
index++;
|
||||||
mCharacterSelection->setIndexSelected(index);
|
mCharacterSelection->setIndexSelected(index);
|
||||||
|
mUsingGamepadGuiCursor = false;
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool SaveGameDialog::onControllerThumbstickEvent(const SDL_ControllerAxisEvent& arg)
|
||||||
|
{
|
||||||
|
if (arg.axis == SDL_CONTROLLER_AXIS_LEFTX || arg.axis == SDL_CONTROLLER_AXIS_LEFTY)
|
||||||
|
{
|
||||||
|
mUsingGamepadGuiCursor = true;
|
||||||
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -24,8 +24,6 @@ namespace MWGui
|
||||||
|
|
||||||
void setLoadOrSave(bool load);
|
void setLoadOrSave(bool load);
|
||||||
|
|
||||||
bool onControllerButtonEvent(const SDL_ControllerButtonEvent& arg) override;
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void confirmDeleteSave();
|
void confirmDeleteSave();
|
||||||
|
|
||||||
|
@ -68,6 +66,11 @@ namespace MWGui
|
||||||
|
|
||||||
const MWState::Character* mCurrentCharacter;
|
const MWState::Character* mCurrentCharacter;
|
||||||
const MWState::Slot* mCurrentSlot;
|
const MWState::Slot* mCurrentSlot;
|
||||||
|
|
||||||
|
bool onControllerButtonEvent(const SDL_ControllerButtonEvent& arg) override;
|
||||||
|
bool onControllerThumbstickEvent(const SDL_ControllerAxisEvent& arg) override;
|
||||||
|
bool mOkButtonFocus = true;
|
||||||
|
bool mUsingGamepadGuiCursor = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue