Added popup widget in Options menu to change GUI renderer on the fly.
svn-id: r33898
This commit is contained in:
parent
8e60e6c558
commit
1b0c29cb01
14 changed files with 57 additions and 11 deletions
|
@ -43,6 +43,12 @@ namespace GUI {
|
||||||
|
|
||||||
using namespace Graphics;
|
using namespace Graphics;
|
||||||
|
|
||||||
|
const char *ThemeRenderer::rendererModeLabels[] = {
|
||||||
|
"Disabled GFX",
|
||||||
|
"Stardard Renderer (16bpp)",
|
||||||
|
"Antialiased Renderer (16bpp)"
|
||||||
|
};
|
||||||
|
|
||||||
const ThemeRenderer::DrawDataInfo ThemeRenderer::kDrawDataDefaults[] = {
|
const ThemeRenderer::DrawDataInfo ThemeRenderer::kDrawDataDefaults[] = {
|
||||||
{kDDMainDialogBackground, "mainmenu_bg", true, kDDNone},
|
{kDDMainDialogBackground, "mainmenu_bg", true, kDDNone},
|
||||||
{kDDSpecialColorBackground, "special_bg", true, kDDNone},
|
{kDDSpecialColorBackground, "special_bg", true, kDDNone},
|
||||||
|
@ -256,7 +262,7 @@ void ThemeRenderer::setGraphicsMode(GraphicsMode mode) {
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return;
|
error("Invalid graphics mode");
|
||||||
}
|
}
|
||||||
|
|
||||||
freeRenderer();
|
freeRenderer();
|
||||||
|
|
|
@ -212,9 +212,12 @@ public:
|
||||||
enum GraphicsMode {
|
enum GraphicsMode {
|
||||||
kGfxDisabled = 0, /** No GFX */
|
kGfxDisabled = 0, /** No GFX */
|
||||||
kGfxStandard16bit, /** 2BPP with the standard (aliased) renderer. */
|
kGfxStandard16bit, /** 2BPP with the standard (aliased) renderer. */
|
||||||
kGfxAntialias16bit /** 2BPP with the optimized AA renderer. */
|
kGfxAntialias16bit, /** 2BPP with the optimized AA renderer. */
|
||||||
|
kGfxMAX
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static const char *rendererModeLabels[];
|
||||||
|
|
||||||
/** Default constructor */
|
/** Default constructor */
|
||||||
ThemeRenderer(Common::String fileName, GraphicsMode mode);
|
ThemeRenderer(Common::String fileName, GraphicsMode mode);
|
||||||
|
|
||||||
|
@ -487,6 +490,7 @@ protected:
|
||||||
|
|
||||||
const Common::String &getThemeName() const { return _themeName; }
|
const Common::String &getThemeName() const { return _themeName; }
|
||||||
const Common::String &getThemeFileName() const { return _themeFileName; }
|
const Common::String &getThemeFileName() const { return _themeFileName; }
|
||||||
|
int getThemeRenderer() const { return _graphicsMode; }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Initializes the drawing screen surfaces, _screen and _backBuffer.
|
* Initializes the drawing screen surfaces, _screen and _backBuffer.
|
||||||
|
|
|
@ -58,8 +58,6 @@ void GuiObject::reflowLayout() {
|
||||||
if (!g_gui.xmlEval()->getWidgetData(_name, _x, _y, _w, _h)) {
|
if (!g_gui.xmlEval()->getWidgetData(_name, _x, _y, _w, _h)) {
|
||||||
warning("Could not load widget position for '%s'", _name.c_str());
|
warning("Could not load widget position for '%s'", _name.c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (_x < 0)
|
if (_x < 0)
|
||||||
error("Widget <%s> has x < 0: %d", _name.c_str(), _x);
|
error("Widget <%s> has x < 0: %d", _name.c_str(), _x);
|
||||||
|
@ -96,8 +94,11 @@ NewGui::NewGui() : _redrawStatus(kRedrawDisabled),
|
||||||
|
|
||||||
if (themefile != "builtin" && !themefile.hasSuffix(".zip"))
|
if (themefile != "builtin" && !themefile.hasSuffix(".zip"))
|
||||||
themefile += ".zip";
|
themefile += ".zip";
|
||||||
|
|
||||||
|
ConfMan.registerDefault("gui_renderer", 2);
|
||||||
|
ThemeRenderer::GraphicsMode gfxMode = (ThemeRenderer::GraphicsMode)ConfMan.getInt("gui_renderer");
|
||||||
|
|
||||||
loadNewTheme(themefile);
|
loadNewTheme(themefile, gfxMode);
|
||||||
_themeChange = false;
|
_themeChange = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -105,8 +106,14 @@ NewGui::~NewGui() {
|
||||||
delete _theme;
|
delete _theme;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool NewGui::loadNewTheme(const Common::String &filename) {
|
bool NewGui::loadNewTheme(const Common::String &filename, ThemeRenderer::GraphicsMode gfx) {
|
||||||
|
if (_theme && filename == _theme->getThemeFileName() && gfx == _theme->getThemeRenderer())
|
||||||
|
return true;
|
||||||
|
|
||||||
Common::String oldTheme = (_theme != 0) ? _theme->getThemeFileName() : "";
|
Common::String oldTheme = (_theme != 0) ? _theme->getThemeFileName() : "";
|
||||||
|
|
||||||
|
if (gfx == ThemeRenderer::kGfxDisabled)
|
||||||
|
gfx = (ThemeRenderer::GraphicsMode)ConfMan.getInt("gui_renderer");
|
||||||
|
|
||||||
if (_theme)
|
if (_theme)
|
||||||
_theme->disable();
|
_theme->disable();
|
||||||
|
@ -119,7 +126,7 @@ bool NewGui::loadNewTheme(const Common::String &filename) {
|
||||||
delete _theme;
|
delete _theme;
|
||||||
_theme = 0;
|
_theme = 0;
|
||||||
|
|
||||||
_theme = new ThemeRenderer(filename, GUI::ThemeRenderer::kGfxAntialias16bit);
|
_theme = new ThemeRenderer(filename, gfx);
|
||||||
|
|
||||||
if (!_theme)
|
if (!_theme)
|
||||||
return (!oldTheme.empty() ? loadNewTheme(oldTheme) : false);
|
return (!oldTheme.empty() ? loadNewTheme(oldTheme) : false);
|
||||||
|
|
|
@ -33,6 +33,8 @@
|
||||||
#include "gui/theme.h"
|
#include "gui/theme.h"
|
||||||
#include "gui/widget.h"
|
#include "gui/widget.h"
|
||||||
|
|
||||||
|
#include "gui/ThemeRenderer.h"
|
||||||
|
|
||||||
class OSystem;
|
class OSystem;
|
||||||
|
|
||||||
namespace GUI {
|
namespace GUI {
|
||||||
|
@ -76,7 +78,7 @@ public:
|
||||||
|
|
||||||
bool isActive() const { return ! _dialogStack.empty(); }
|
bool isActive() const { return ! _dialogStack.empty(); }
|
||||||
|
|
||||||
bool loadNewTheme(const Common::String &file);
|
bool loadNewTheme(const Common::String &file, ThemeRenderer::GraphicsMode gfx = ThemeRenderer::kGfxDisabled);
|
||||||
Theme *theme() { return _theme; }
|
Theme *theme() { return _theme; }
|
||||||
|
|
||||||
ThemeEval *xmlEval() { return _theme->evaluator(); }
|
ThemeEval *xmlEval() { return _theme->evaluator(); }
|
||||||
|
|
|
@ -724,9 +724,16 @@ GlobalOptionsDialog::GlobalOptionsDialog()
|
||||||
|
|
||||||
new ButtonWidget(tab, "GlobalOptions_Misc.ThemeButton", "Theme:", kChooseThemeCmd, 0);
|
new ButtonWidget(tab, "GlobalOptions_Misc.ThemeButton", "Theme:", kChooseThemeCmd, 0);
|
||||||
_curTheme = new StaticTextWidget(tab, "GlobalOptions_Misc.CurTheme", g_gui.theme()->getThemeName());
|
_curTheme = new StaticTextWidget(tab, "GlobalOptions_Misc.CurTheme", g_gui.theme()->getThemeName());
|
||||||
|
|
||||||
|
|
||||||
int labelWidth = g_gui.xmlEval()->getVar("Globals.TabLabelWidth");
|
int labelWidth = g_gui.xmlEval()->getVar("Globals.TabLabelWidth");
|
||||||
|
|
||||||
|
_rendererPopUp = new PopUpWidget(tab, "GlobalOptions_Misc.Renderer", "GUI Renderer:", labelWidth);
|
||||||
|
|
||||||
|
for (int i = 1; i < GUI::ThemeRenderer::kGfxMAX; ++i) {
|
||||||
|
_rendererPopUp->appendEntry(GUI::ThemeRenderer::rendererModeLabels[i], i);
|
||||||
|
}
|
||||||
|
|
||||||
_autosavePeriodPopUp = new PopUpWidget(tab, "GlobalOptions_Misc.AutosavePeriod", "Autosave:", labelWidth);
|
_autosavePeriodPopUp = new PopUpWidget(tab, "GlobalOptions_Misc.AutosavePeriod", "Autosave:", labelWidth);
|
||||||
|
|
||||||
for (int i = 0; savePeriodLabels[i]; i++) {
|
for (int i = 0; savePeriodLabels[i]; i++) {
|
||||||
|
@ -799,6 +806,8 @@ void GlobalOptionsDialog::open() {
|
||||||
if (value == savePeriodValues[i])
|
if (value == savePeriodValues[i])
|
||||||
_autosavePeriodPopUp->setSelected(i);
|
_autosavePeriodPopUp->setSelected(i);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_rendererPopUp->setSelected(ConfMan.getInt("gui_renderer") - 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void GlobalOptionsDialog::close() {
|
void GlobalOptionsDialog::close() {
|
||||||
|
@ -828,6 +837,11 @@ void GlobalOptionsDialog::close() {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
ConfMan.setInt("autosave_period", _autosavePeriodPopUp->getSelectedTag(), _domain);
|
ConfMan.setInt("autosave_period", _autosavePeriodPopUp->getSelectedTag(), _domain);
|
||||||
|
|
||||||
|
if ((int)_rendererPopUp->getSelectedTag() != ConfMan.getInt("gui_renderer")) {
|
||||||
|
g_gui.loadNewTheme(g_gui.theme()->getThemeFileName(), (GUI::ThemeRenderer::GraphicsMode)_rendererPopUp->getSelectedTag());
|
||||||
|
ConfMan.setInt("gui_renderer", _rendererPopUp->getSelectedTag(), _domain);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
OptionsDialog::close();
|
OptionsDialog::close();
|
||||||
}
|
}
|
||||||
|
|
|
@ -170,7 +170,7 @@ protected:
|
||||||
// Misc controls
|
// Misc controls
|
||||||
//
|
//
|
||||||
StaticTextWidget *_curTheme;
|
StaticTextWidget *_curTheme;
|
||||||
|
PopUpWidget *_rendererPopUp;
|
||||||
PopUpWidget *_autosavePeriodPopUp;
|
PopUpWidget *_autosavePeriodPopUp;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -310,6 +310,7 @@ public:
|
||||||
|
|
||||||
virtual const Common::String &getThemeFileName() const = 0;
|
virtual const Common::String &getThemeFileName() const = 0;
|
||||||
virtual const Common::String &getThemeName() const = 0;
|
virtual const Common::String &getThemeName() const = 0;
|
||||||
|
virtual int getThemeRenderer() const = 0;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks if the theme renderer supports drawing of images.
|
* Checks if the theme renderer supports drawing of images.
|
||||||
|
|
|
@ -704,6 +704,9 @@
|
||||||
"height = 'Globals.Line.Height' "
|
"height = 'Globals.Line.Height' "
|
||||||
"/> "
|
"/> "
|
||||||
"</layout> "
|
"</layout> "
|
||||||
|
"<widget name = 'Renderer' "
|
||||||
|
"type = 'PopUp' "
|
||||||
|
"/> "
|
||||||
"<widget name = 'AutosavePeriod' "
|
"<widget name = 'AutosavePeriod' "
|
||||||
"type = 'PopUp' "
|
"type = 'PopUp' "
|
||||||
"/> "
|
"/> "
|
||||||
|
|
Binary file not shown.
|
@ -456,6 +456,9 @@
|
||||||
height = 'Globals.Line.Height'
|
height = 'Globals.Line.Height'
|
||||||
/>
|
/>
|
||||||
</layout>
|
</layout>
|
||||||
|
<widget name = 'Renderer'
|
||||||
|
type = 'PopUp'
|
||||||
|
/>
|
||||||
<widget name = 'AutosavePeriod'
|
<widget name = 'AutosavePeriod'
|
||||||
type = 'PopUp'
|
type = 'PopUp'
|
||||||
/>
|
/>
|
||||||
|
|
Binary file not shown.
|
@ -343,6 +343,9 @@
|
||||||
height = 'Globals.Line.Height'
|
height = 'Globals.Line.Height'
|
||||||
/>
|
/>
|
||||||
</layout>
|
</layout>
|
||||||
|
<widget name = 'Renderer'
|
||||||
|
type = 'PopUp'
|
||||||
|
/>
|
||||||
<widget name = 'AutosavePeriod'
|
<widget name = 'AutosavePeriod'
|
||||||
type = 'PopUp'
|
type = 'PopUp'
|
||||||
/>
|
/>
|
||||||
|
|
|
@ -325,6 +325,9 @@
|
||||||
height = 'Globals.Line.Height'
|
height = 'Globals.Line.Height'
|
||||||
/>
|
/>
|
||||||
</layout>
|
</layout>
|
||||||
|
<widget name = 'Renderer'
|
||||||
|
type = 'PopUp'
|
||||||
|
/>
|
||||||
<widget name = 'AutosavePeriod'
|
<widget name = 'AutosavePeriod'
|
||||||
type = 'PopUp'
|
type = 'PopUp'
|
||||||
/>
|
/>
|
||||||
|
|
|
@ -6,7 +6,7 @@ import os
|
||||||
import zipfile
|
import zipfile
|
||||||
|
|
||||||
def buildTheme(themeName):
|
def buildTheme(themeName):
|
||||||
if not os.path.isdir(themeName):
|
if not os.path.isdir(themeName) or not os.path.isfile(os.path.join(themeName, "THEMERC")):
|
||||||
print "Invalid theme name: " + themeName
|
print "Invalid theme name: " + themeName
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue