aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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, 44 insertions, 18 deletions
diff --git a/gui/GuiManager.cpp b/gui/GuiManager.cpp
index 6fa34aa04a..ebab4b1b2b 100644
--- a/gui/GuiManager.cpp
+++ b/gui/GuiManager.cpp
@@ -139,20 +139,29 @@ void GuiManager::redraw() {
if (_dialogStack.empty())
return;
- if (_dialogStack.size() > 1) {
- _theme->clearAll();
- _theme->openDialog(true);
+ switch (_redrawStatus) {
+ case kRedrawCloseDialog:
+ case kRedrawFull:
+ case kRedrawTopDialog:
+ _theme->clearAll();
+ _theme->openDialog(true);
+
+ for (i = 0; i < _dialogStack.size() - 1; i++) {
+ _dialogStack[i]->drawDialog();
+ }
- for (i = 0; i < _dialogStack.size() - 1; i++)
- _dialogStack[i]->drawDialog();
+ _theme->finishBuffering();
- _theme->finishBuffering();
- _theme->updateScreen();
- }
+ case kRedrawOpenDialog:
+ _theme->updateScreen();
+ _theme->openDialog(true, (ThemeEngine::ShadingStyle)xmlEval()->getVar("Dialog." + _dialogStack.top()->_name + ".Shading", 0));
+ _dialogStack.top()->drawDialog();
+ _theme->finishBuffering();
+ break;
- _theme->openDialog(true, (ThemeEngine::ShadingStyle)xmlEval()->getVar("Dialog." + _dialogStack.top()->_name + ".Shading", 0));
- _dialogStack.top()->drawDialog();
- _theme->finishBuffering();
+ default:
+ return;
+ }
_theme->updateScreen();
_redrawStatus = kRedrawDisabled;
@@ -238,6 +247,8 @@ void GuiManager::runLoop() {
if (_useStdCursor)
setupCursor();
+// _theme->refresh();
+
_themeChange = false;
_redrawStatus = kRedrawFull;
redraw();
@@ -336,7 +347,8 @@ void GuiManager::restoreState() {
void GuiManager::openDialog(Dialog *dialog) {
_dialogStack.push(dialog);
- _redrawStatus = kRedrawFull;
+ if (_redrawStatus != kRedrawFull)
+ _redrawStatus = kRedrawOpenDialog;
// We reflow the dialog just before opening it. If the screen changed
// since the last time we looked, also refresh the loaded theme,
@@ -352,7 +364,8 @@ void GuiManager::closeTopDialog() {
// Remove the dialog from the stack
_dialogStack.pop();
- _redrawStatus = kRedrawFull;
+ if (_redrawStatus != kRedrawFull)
+ _redrawStatus = kRedrawCloseDialog;
}
void GuiManager::setupCursor() {
diff --git a/gui/GuiManager.h b/gui/GuiManager.h
index 9bdacb5459..12c9a25f62 100644
--- a/gui/GuiManager.h
+++ b/gui/GuiManager.h
@@ -91,6 +91,9 @@ public:
protected:
enum RedrawStatus {
kRedrawDisabled = 0,
+ kRedrawOpenDialog,
+ kRedrawCloseDialog,
+ kRedrawTopDialog,
kRedrawFull
};
diff --git a/gui/browser.cpp b/gui/browser.cpp
index f4719f4850..48382e880b 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 fe01228f5b..bca1be3d0e 100644
--- a/gui/dialog.cpp
+++ b/gui/dialog.cpp
@@ -131,7 +131,11 @@ void Dialog::releaseFocus() {
}
void Dialog::draw() {
- g_gui._redrawStatus = GUI::GuiManager::kRedrawFull;
+ //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;
}
void Dialog::drawDialog() {
diff --git a/gui/options.cpp b/gui/options.cpp
index 02325722ab..78010e351a 100644
--- a/gui/options.cpp
+++ b/gui/options.cpp
@@ -251,8 +251,6 @@ 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 46d7ac80b7..412e50f79c 100644
--- a/gui/widget.cpp
+++ b/gui/widget.cpp
@@ -199,7 +199,15 @@ void StaticTextWidget::setValue(int value) {
void StaticTextWidget::setLabel(const Common::String &label) {
_label = label;
- this->draw();
+
+ // 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));
_boss->draw();
}