Only rebuild device list when there is difference in gamepad count

This commit is contained in:
Benau 2020-06-17 14:42:53 +08:00
parent 1055dd8932
commit 65b13cfeb2
2 changed files with 10 additions and 1 deletions

View File

@ -76,6 +76,7 @@ void OptionsScreenInput::loadedFromFile()
const float scale = GUIEngine::getFontHeight() / 72.0f; const float scale = GUIEngine::getFontHeight() / 72.0f;
m_icon_bank->setScale(scale); m_icon_bank->setScale(scale);
m_icon_bank->setTargetIconSize(128, 128); m_icon_bank->setTargetIconSize(128, 128);
m_gamepad_count = 0;
} // loadFromFile } // loadFromFile
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
@ -118,6 +119,7 @@ void OptionsScreenInput::buildDeviceList()
} }
const int gpad_config_count = device_manager->getGamePadConfigAmount(); const int gpad_config_count = device_manager->getGamePadConfigAmount();
m_gamepad_count = input_manager->getGamepadCount();
for (int i = 0; i < gpad_config_count; i++) for (int i = 0; i < gpad_config_count; i++)
{ {
@ -367,7 +369,13 @@ void OptionsScreenInput::filterInput(Input::InputType type,
void OptionsScreenInput::onUpdate(float dt) void OptionsScreenInput::onUpdate(float dt)
{ {
rebuildDeviceList(); // Only rebuild device list when there is difference in gamepad count
// This allow the list to be scrolled (keyboard config can only be add or
// remove in new screen
size_t gamepad_count = input_manager->getGamepadCount();
if (gamepad_count != m_gamepad_count)
rebuildDeviceList();
std::map<std::string, float>::iterator it; std::map<std::string, float>::iterator it;
ListWidget* devices = this->getWidget<ListWidget>("devices"); ListWidget* devices = this->getWidget<ListWidget>("devices");
assert(devices != NULL); assert(devices != NULL);

View File

@ -35,6 +35,7 @@ struct Input;
*/ */
class OptionsScreenInput : public GUIEngine::Screen, public GUIEngine::ScreenSingleton<OptionsScreenInput> class OptionsScreenInput : public GUIEngine::Screen, public GUIEngine::ScreenSingleton<OptionsScreenInput>
{ {
size_t m_gamepad_count;
OptionsScreenInput(); OptionsScreenInput();
void updateInputButtons(DeviceConfig* config); void updateInputButtons(DeviceConfig* config);