From 30189f09d98cadd590955c5b68e6c6b2a5001f10 Mon Sep 17 00:00:00 2001 From: Vicent Marti Date: Fri, 6 Feb 2009 22:16:04 +0000 Subject: Removed special case when redrawing the dialog stack. Fixes bug #2555710 and several lesser graphical glitches with classic theme. svn-id: r36225 --- gui/GuiManager.cpp | 39 +++++++++++++-------------------------- gui/GuiManager.h | 3 --- gui/browser.cpp | 2 +- gui/dialog.cpp | 6 +----- gui/options.cpp | 2 ++ gui/widget.cpp | 10 +--------- 6 files changed, 18 insertions(+), 44 deletions(-) (limited to 'gui') diff --git a/gui/GuiManager.cpp b/gui/GuiManager.cpp index 396491fc80..6fa34aa04a 100644 --- a/gui/GuiManager.cpp +++ b/gui/GuiManager.cpp @@ -139,29 +139,20 @@ void GuiManager::redraw() { if (_dialogStack.empty()) return; - switch (_redrawStatus) { - case kRedrawCloseDialog: - case kRedrawFull: - case kRedrawTopDialog: - _theme->clearAll(); - _theme->openDialog(true); - - for (i = 0; i < _dialogStack.size() - 1; i++) { - _dialogStack[i]->drawDialog(); - } + if (_dialogStack.size() > 1) { + _theme->clearAll(); + _theme->openDialog(true); - _theme->finishBuffering(); - _theme->updateScreen(); + for (i = 0; i < _dialogStack.size() - 1; i++) + _dialogStack[i]->drawDialog(); - case kRedrawOpenDialog: - _theme->openDialog(true, (ThemeEngine::ShadingStyle)xmlEval()->getVar("Dialog." + _dialogStack.top()->_name + ".Shading", 0)); - _dialogStack.top()->drawDialog(); - _theme->finishBuffering(); - break; + _theme->finishBuffering(); + _theme->updateScreen(); + } - default: - return; - } + _theme->openDialog(true, (ThemeEngine::ShadingStyle)xmlEval()->getVar("Dialog." + _dialogStack.top()->_name + ".Shading", 0)); + _dialogStack.top()->drawDialog(); + _theme->finishBuffering(); _theme->updateScreen(); _redrawStatus = kRedrawDisabled; @@ -247,8 +238,6 @@ void GuiManager::runLoop() { if (_useStdCursor) setupCursor(); -// _theme->refresh(); - _themeChange = false; _redrawStatus = kRedrawFull; redraw(); @@ -347,8 +336,7 @@ void GuiManager::restoreState() { void GuiManager::openDialog(Dialog *dialog) { _dialogStack.push(dialog); - if (_redrawStatus != kRedrawFull) - _redrawStatus = kRedrawOpenDialog; + _redrawStatus = kRedrawFull; // We reflow the dialog just before opening it. If the screen changed // since the last time we looked, also refresh the loaded theme, @@ -364,8 +352,7 @@ void GuiManager::closeTopDialog() { // Remove the dialog from the stack _dialogStack.pop(); - if (_redrawStatus != kRedrawFull) - _redrawStatus = kRedrawCloseDialog; + _redrawStatus = kRedrawFull; } void GuiManager::setupCursor() { diff --git a/gui/GuiManager.h b/gui/GuiManager.h index 12c9a25f62..9bdacb5459 100644 --- a/gui/GuiManager.h +++ b/gui/GuiManager.h @@ -91,9 +91,6 @@ public: protected: enum RedrawStatus { kRedrawDisabled = 0, - kRedrawOpenDialog, - kRedrawCloseDialog, - kRedrawTopDialog, kRedrawFull }; diff --git a/gui/browser.cpp b/gui/browser.cpp index 48382e880b..f4719f4850 100644 --- a/gui/browser.cpp +++ b/gui/browser.cpp @@ -43,7 +43,7 @@ enum { */ BrowserDialog::BrowserDialog(const char *title, bool dirBrowser) - : Dialog("browser") { + : Dialog("Browser") { _titleRef = CFStringCreateWithCString(0, title, CFStringGetSystemEncoding()); _isDirBrowser = dirBrowser; } diff --git a/gui/dialog.cpp b/gui/dialog.cpp index bca1be3d0e..fe01228f5b 100644 --- a/gui/dialog.cpp +++ b/gui/dialog.cpp @@ -131,11 +131,7 @@ void Dialog::releaseFocus() { } void Dialog::draw() { - //TANOKU - FIXME when is this enabled? what does this do? - // Update: called on tab drawing, mainly... - // we can pass this as open a new dialog or something -// g_gui._needRedraw = true; - g_gui._redrawStatus = GUI::GuiManager::kRedrawTopDialog; + g_gui._redrawStatus = GUI::GuiManager::kRedrawFull; } void Dialog::drawDialog() { diff --git a/gui/options.cpp b/gui/options.cpp index 78010e351a..02325722ab 100644 --- a/gui/options.cpp +++ b/gui/options.cpp @@ -251,6 +251,8 @@ void OptionsDialog::open() { _subMode = getSubtitleMode(ConfMan.getBool("subtitles", _domain), ConfMan.getBool("speech_mute", _domain)); _subToggleButton->setLabel(_subModeDesc[_subMode]); + _subToggleButton->draw(); + // Engines that reuse the subtitle speed widget set their own max value. // Scale the config value accordingly (see addSubtitleControls) diff --git a/gui/widget.cpp b/gui/widget.cpp index 412e50f79c..46d7ac80b7 100644 --- a/gui/widget.cpp +++ b/gui/widget.cpp @@ -199,15 +199,7 @@ void StaticTextWidget::setValue(int value) { void StaticTextWidget::setLabel(const Common::String &label) { _label = label; - - // get parent's size - const uint16 w = _boss->getWidth(); - const uint16 h = _boss->getHeight(); - const int16 x = _boss->getAbsX(); - const int16 y = _boss->getAbsY(); - - // restore the parent's background and redraw it again. - g_gui.theme()->restoreBackground(Common::Rect(x, y, x + w, y + h)); + this->draw(); _boss->draw(); } -- cgit v1.2.3