mirror of
https://github.com/TES3MP/openmw-tes3mp.git
synced 2025-01-16 19:19:56 +00:00
Merge pull request #1118 from MiroslavR/resize-perf
Fix horrible performance when resizing/moving the settings window
This commit is contained in:
commit
d8b506155e
2 changed files with 22 additions and 8 deletions
|
@ -466,9 +466,6 @@ namespace MWGui
|
|||
else
|
||||
actions = MWBase::Environment::get().getInputManager()->getActionControllerSorting();
|
||||
|
||||
const int h = 18;
|
||||
const int w = mControlsBox->getWidth() - 28;
|
||||
int curH = 0;
|
||||
for (std::vector<int>::const_iterator it = actions.begin(); it != actions.end(); ++it)
|
||||
{
|
||||
std::string desc = MWBase::Environment::get().getInputManager()->getActionDescription (*it);
|
||||
|
@ -481,16 +478,15 @@ namespace MWGui
|
|||
else
|
||||
binding = MWBase::Environment::get().getInputManager()->getActionControllerBindingName(*it);
|
||||
|
||||
Gui::SharedStateButton* leftText = mControlsBox->createWidget<Gui::SharedStateButton>("SandTextButton", MyGUI::IntCoord(0,curH,w,h), MyGUI::Align::Default);
|
||||
Gui::SharedStateButton* leftText = mControlsBox->createWidget<Gui::SharedStateButton>("SandTextButton", MyGUI::IntCoord(), MyGUI::Align::Default);
|
||||
leftText->setCaptionWithReplacing(desc);
|
||||
|
||||
Gui::SharedStateButton* rightText = mControlsBox->createWidget<Gui::SharedStateButton>("SandTextButton", MyGUI::IntCoord(0,curH,w,h), MyGUI::Align::Default);
|
||||
Gui::SharedStateButton* rightText = mControlsBox->createWidget<Gui::SharedStateButton>("SandTextButton", MyGUI::IntCoord(), MyGUI::Align::Default);
|
||||
rightText->setCaptionWithReplacing(binding);
|
||||
rightText->setTextAlign (MyGUI::Align::Right);
|
||||
rightText->setUserData(*it); // save the action id for callbacks
|
||||
rightText->eventMouseButtonClick += MyGUI::newDelegate(this, &SettingsWindow::onRebindAction);
|
||||
rightText->eventMouseWheel += MyGUI::newDelegate(this, &SettingsWindow::onInputTabMouseWheel);
|
||||
curH += h;
|
||||
|
||||
Gui::ButtonGroup group;
|
||||
group.push_back(leftText);
|
||||
|
@ -498,9 +494,25 @@ namespace MWGui
|
|||
Gui::SharedStateButton::createButtonGroup(group);
|
||||
}
|
||||
|
||||
layoutControlsBox();
|
||||
}
|
||||
|
||||
void SettingsWindow::layoutControlsBox()
|
||||
{
|
||||
const int h = 18;
|
||||
const int w = mControlsBox->getWidth() - 28;
|
||||
const int noWidgetsInRow = 2;
|
||||
const int totalH = mControlsBox->getChildCount() / noWidgetsInRow * h;
|
||||
|
||||
for (size_t i = 0; i < mControlsBox->getChildCount(); i++)
|
||||
{
|
||||
MyGUI::Widget * widget = mControlsBox->getChildAt(i);
|
||||
widget->setCoord(0, i / noWidgetsInRow * h, w, h);
|
||||
}
|
||||
|
||||
// Canvas size must be expressed with VScroll disabled, otherwise MyGUI would expand the scroll area when the scrollbar is hidden
|
||||
mControlsBox->setVisibleVScroll(false);
|
||||
mControlsBox->setCanvasSize (mControlsBox->getWidth(), std::max(curH, mControlsBox->getHeight()));
|
||||
mControlsBox->setCanvasSize (mControlsBox->getWidth(), std::max(totalH, mControlsBox->getHeight()));
|
||||
mControlsBox->setVisibleVScroll(true);
|
||||
}
|
||||
|
||||
|
@ -556,7 +568,7 @@ namespace MWGui
|
|||
|
||||
void SettingsWindow::onWindowResize(MyGUI::Window *_sender)
|
||||
{
|
||||
updateControlsBox();
|
||||
layoutControlsBox();
|
||||
}
|
||||
|
||||
void SettingsWindow::resetScrollbars()
|
||||
|
|
|
@ -66,6 +66,8 @@ namespace MWGui
|
|||
|
||||
void configureWidgets(MyGUI::Widget* widget);
|
||||
void updateSliderLabel(MyGUI::ScrollBar* scroller, const std::string& value);
|
||||
|
||||
void layoutControlsBox();
|
||||
|
||||
private:
|
||||
void resetScrollbars();
|
||||
|
|
Loading…
Reference in a new issue