aboutsummaryrefslogtreecommitdiff
path: root/gui/GuiManager.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'gui/GuiManager.cpp')
-rw-r--r--gui/GuiManager.cpp18
1 files changed, 13 insertions, 5 deletions
diff --git a/gui/GuiManager.cpp b/gui/GuiManager.cpp
index 3754622aea..f3954c112d 100644
--- a/gui/GuiManager.cpp
+++ b/gui/GuiManager.cpp
@@ -136,19 +136,25 @@ bool GuiManager::loadNewTheme(Common::String id, ThemeEngine::GraphicsMode gfx)
void GuiManager::redraw() {
int i;
+ ThemeEngine::ShadingStyle shading;
- if (_redrawStatus == kRedrawDisabled)
+ if (_redrawStatus == kRedrawDisabled || _dialogStack.empty())
return;
- if (_dialogStack.empty())
- return;
+ shading = (ThemeEngine::ShadingStyle)xmlEval()->getVar("Dialog." + _dialogStack.top()->_name + ".Shading", 0);
+
+ // Tanoku: Do not apply shading more than once when opening many dialogs
+ // on top of each other. Screen ends up being too dark and it's a
+ // performance hog.
+ if (_redrawStatus == kRedrawOpenDialog && _dialogStack.size() > 2)
+ shading = ThemeEngine::kShadingNone;
switch (_redrawStatus) {
case kRedrawCloseDialog:
case kRedrawFull:
case kRedrawTopDialog:
_theme->clearAll();
- _theme->openDialog(true);
+ _theme->openDialog(true, ThemeEngine::kShadingNone);
for (i = 0; i < _dialogStack.size() - 1; i++) {
_dialogStack[i]->drawDialog();
@@ -158,7 +164,7 @@ void GuiManager::redraw() {
case kRedrawOpenDialog:
_theme->updateScreen();
- _theme->openDialog(true, (ThemeEngine::ShadingStyle)xmlEval()->getVar("Dialog." + _dialogStack.top()->_name + ".Shading", 0));
+ _theme->openDialog(true, shading);
_dialogStack.top()->drawDialog();
_theme->finishBuffering();
break;
@@ -370,6 +376,8 @@ void GuiManager::closeTopDialog() {
_dialogStack.pop();
if (_redrawStatus != kRedrawFull)
_redrawStatus = kRedrawCloseDialog;
+
+ redraw();
}
void GuiManager::setupCursor() {