Fixed bug #2706939 (Enabled button not drawn correctly) and other similar cases.

Fixed background shading weirdness when opening many dialogs on top of each other.
Fixed some modal dialogs not redrawing properly when closed.

svn-id: r39938
This commit is contained in:
Vicent Marti 2009-04-11 17:12:17 +00:00
parent 91b724451b
commit 8fe3735f69
2 changed files with 21 additions and 9 deletions

View File

@ -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() {

View File

@ -146,10 +146,14 @@ Widget *Widget::findWidgetInChain(Widget *w, const char *name) {
}
void Widget::setEnabled(bool e) {
if (e)
setFlags(WIDGET_ENABLED);
else
clearFlags(WIDGET_ENABLED);
if ((_flags & WIDGET_ENABLED) != e) {
if (e)
setFlags(WIDGET_ENABLED);
else
clearFlags(WIDGET_ENABLED);
_boss->draw();
}
}
bool Widget::isEnabled() const {