aboutsummaryrefslogtreecommitdiff
path: root/gui
diff options
context:
space:
mode:
authorVicent Marti2009-02-06 22:16:04 +0000
committerVicent Marti2009-02-06 22:16:04 +0000
commit30189f09d98cadd590955c5b68e6c6b2a5001f10 (patch)
tree82186fadfd5e07ec302238d300f4240de2ece29d /gui
parent7c0a16e422649b3b7250264464777b4562e41a8a (diff)
downloadscummvm-rg350-30189f09d98cadd590955c5b68e6c6b2a5001f10.tar.gz
scummvm-rg350-30189f09d98cadd590955c5b68e6c6b2a5001f10.tar.bz2
scummvm-rg350-30189f09d98cadd590955c5b68e6c6b2a5001f10.zip
Removed special case when redrawing the dialog stack. Fixes bug #2555710 and several lesser graphical glitches with classic theme.
svn-id: r36225
Diffstat (limited to 'gui')
-rw-r--r--gui/GuiManager.cpp39
-rw-r--r--gui/GuiManager.h3
-rw-r--r--gui/browser.cpp2
-rw-r--r--gui/dialog.cpp6
-rw-r--r--gui/options.cpp2
-rw-r--r--gui/widget.cpp10
6 files changed, 18 insertions, 44 deletions
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();
}