aboutsummaryrefslogtreecommitdiff
path: root/gui/ThemeRenderer.cpp
diff options
context:
space:
mode:
authorVicent Marti2008-07-03 10:26:55 +0000
committerVicent Marti2008-07-03 10:26:55 +0000
commit48fd843e759ab3a8a23ba2be902a8a815a41e8f8 (patch)
treeeeebd2d5368071bc596347736dfeb4e59cbf6b21 /gui/ThemeRenderer.cpp
parent8dbec866d6350c044297e16aa8ede432a3bd174b (diff)
downloadscummvm-rg350-48fd843e759ab3a8a23ba2be902a8a815a41e8f8.tar.gz
scummvm-rg350-48fd843e759ab3a8a23ba2be902a8a815a41e8f8.tar.bz2
scummvm-rg350-48fd843e759ab3a8a23ba2be902a8a815a41e8f8.zip
Rendering pipeline. WIP.
svn-id: r32882
Diffstat (limited to 'gui/ThemeRenderer.cpp')
-rw-r--r--gui/ThemeRenderer.cpp76
1 files changed, 48 insertions, 28 deletions
diff --git a/gui/ThemeRenderer.cpp b/gui/ThemeRenderer.cpp
index 283860341b..7b14b93b23 100644
--- a/gui/ThemeRenderer.cpp
+++ b/gui/ThemeRenderer.cpp
@@ -68,10 +68,9 @@ const char *ThemeRenderer::kDrawDataStrings[] = {
"separator"
};
-ThemeRenderer::ThemeRenderer() :
+ThemeRenderer::ThemeRenderer(Common::String themeName, GraphicsMode mode) :
_vectorRenderer(0), _system(0), _graphicsMode(kGfxDisabled),
- _screen(0), _bytesPerPixel(0), _initOk(false), _themeOk(false),
- _needThemeLoad(false), _enabled(false) {
+ _screen(0), _bytesPerPixel(0), _initOk(false), _themeOk(false) {
_system = g_system;
_parser = new ThemeParser(this);
@@ -79,8 +78,50 @@ ThemeRenderer::ThemeRenderer() :
_widgets[i] = 0;
}
- _graphicsMode = kGfxAntialias16bit; // default GFX mode
- // TODO: load this from a config file
+ _graphicsMode = mode;
+ setGraphicsMode(_graphicsMode);
+
+ if (isThemeLoadingRequired())
+ loadTheme(themeName);
+
+ _initOk = true;
+ _themeName = themeName;
+}
+
+bool ThemeRenderer::init() {
+ // reset everything and reload the graphics
+ deinit();
+ setGraphicsMode(_graphicsMode);
+
+ if (_screen->pixels) {
+ _initOk = true;
+ clearAll();
+ resetDrawArea();
+ }
+
+ if (isThemeLoadingRequired())
+ loadTheme(_themeName);
+
+ return true;
+}
+
+void ThemeRenderer::deinit() {
+ if (_initOk) {
+ _system->hideOverlay();
+ freeRenderer();
+ freeScreen();
+ unloadTheme();
+ _initOk = false;
+ }
+}
+
+void ThemeRenderer::clearAll() {
+ if (!_initOk)
+ return;
+
+ _vectorRenderer->clearSurface();
+ _vectorRenderer->copyWholeFrame(_system);
+ _system->updateScreen();
}
template<typename PixelType>
@@ -92,16 +133,7 @@ void ThemeRenderer::screenInit() {
_system->clearOverlay();
}
-void ThemeRenderer::setGraphicsMode(Graphics_Mode mode) {
-
- // FIXME: reload theme everytime we change resolution...
- // what if we change the renderer too?
- // ...We may need to reload it to re-cache the widget
- // surfaces
- if (_system->getOverlayWidth() != _screen->w ||
- _system->getOverlayHeight() != _screen->h)
- _needThemeLoad = true;
-
+void ThemeRenderer::setGraphicsMode(GraphicsMode mode) {
switch (mode) {
case kGfxStandard16bit:
case kGfxAntialias16bit:
@@ -133,6 +165,7 @@ bool ThemeRenderer::addDrawData(DrawData data_id, bool cached) {
_widgets[data_id] = new WidgetDrawData;
_widgets[data_id]->_cached = cached;
+ _widgets[data_id]->_surfaceCache = 0;
return true;
}
@@ -158,7 +191,6 @@ bool ThemeRenderer::loadTheme(Common::String themeName) {
}
}
- _needThemeLoad = false;
_themeOk = true;
return true;
}
@@ -182,18 +214,6 @@ bool ThemeRenderer::loadThemeXML(Common::String themeName) {
return parser()->parse();
}
-bool ThemeRenderer::init() {
- if (!_screen || _system->getOverlayWidth() != _screen->w ||
- _system->getOverlayHeight() != _screen->h )
- setGraphicsMode(_graphicsMode);
-
- if (needThemeReload())
- loadTheme();
-
- _initOk = true;
- return true;
-}
-
bool ThemeRenderer::isWidgetCached(DrawData type, const Common::Rect &r) {
return _widgets[type] && _widgets[type]->_cached &&
_widgets[type]->_surfaceCache->w == r.width() &&