diff options
author | Vicent Marti | 2008-07-03 10:26:55 +0000 |
---|---|---|
committer | Vicent Marti | 2008-07-03 10:26:55 +0000 |
commit | 48fd843e759ab3a8a23ba2be902a8a815a41e8f8 (patch) | |
tree | eeebd2d5368071bc596347736dfeb4e59cbf6b21 /gui/ThemeRenderer.cpp | |
parent | 8dbec866d6350c044297e16aa8ede432a3bd174b (diff) | |
download | scummvm-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.cpp | 76 |
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() && |