diff options
Diffstat (limited to 'gui')
-rw-r--r-- | gui/ThemeDefaultXML.cpp | 2 | ||||
-rw-r--r-- | gui/ThemeRenderer.cpp | 14 | ||||
-rw-r--r-- | gui/ThemeRenderer.h | 14 |
3 files changed, 24 insertions, 6 deletions
diff --git a/gui/ThemeDefaultXML.cpp b/gui/ThemeDefaultXML.cpp index 0561f4b8d1..bbd18fce5c 100644 --- a/gui/ThemeDefaultXML.cpp +++ b/gui/ThemeDefaultXML.cpp @@ -63,7 +63,7 @@ bool ThemeRenderer::loadDefaultXML() { "<drawdata id = 'tab_active' cache = false>" "<text vertical_align = 'center' horizontal_align = 'center' color = '255, 255, 255' />" - "<drawstep func = 'tab' radius = '8' stroke = '0' fill = 'gradient' gradient_start = '206, 121, 99' gradient_end = '173, 40, 8' shadow = 3 />" + "<drawstep func = 'tab' radius = '8' stroke = '2' fill = 'gradient' gradient_start = '206, 121, 99' gradient_end = '173, 40, 8' shadow = 3 />" "</drawdata>" "<drawdata id = 'tab_inactive' cache = false>" diff --git a/gui/ThemeRenderer.cpp b/gui/ThemeRenderer.cpp index 7995c34a40..4b56eba4a2 100644 --- a/gui/ThemeRenderer.cpp +++ b/gui/ThemeRenderer.cpp @@ -76,7 +76,7 @@ const char *ThemeRenderer::kDrawDataStrings[] = { ThemeRenderer::ThemeRenderer(Common::String themeName, GraphicsMode mode) : _vectorRenderer(0), _system(0), _graphicsMode(kGfxDisabled), - _screen(0), _bytesPerPixel(0), _initOk(false), _themeOk(false), _enabled(false) { + _screen(0), _backBuffer(0), _bytesPerPixel(0), _initOk(false), _themeOk(false), _enabled(false) { _system = g_system; _parser = new ThemeParser(this); @@ -153,9 +153,15 @@ void ThemeRenderer::disable() { } template<typename PixelType> -void ThemeRenderer::screenInit() { +void ThemeRenderer::screenInit(bool backBuffer) { freeScreen(); - + freeBackbuffer(); + + if (backBuffer) { + _backBuffer = new Surface; + _backBuffer->create(_system->getOverlayWidth(), _system->getOverlayHeight(), sizeof(PixelType)); + } + _screen = new Surface; _screen->create(_system->getOverlayWidth(), _system->getOverlayHeight(), sizeof(PixelType)); _system->clearOverlay(); @@ -166,7 +172,7 @@ void ThemeRenderer::setGraphicsMode(GraphicsMode mode) { case kGfxStandard16bit: case kGfxAntialias16bit: _bytesPerPixel = sizeof(uint16); - screenInit<uint16>(); + screenInit<uint16>(kEnableBackCaching); break; default: diff --git a/gui/ThemeRenderer.h b/gui/ThemeRenderer.h index 3addda17a7..e7e320d048 100644 --- a/gui/ThemeRenderer.h +++ b/gui/ThemeRenderer.h @@ -73,6 +73,9 @@ class ThemeRenderer : public Theme { /** Constant value to expand dirty rectangles, to make sure they are fully copied */ static const int kDirtyRectangleThreshold = 2; + + /** Sets whether backcaching is enabled */ + static const bool kEnableBackCaching = true; public: enum GraphicsMode { @@ -204,7 +207,7 @@ public: void setGraphicsMode(GraphicsMode mode); protected: - template<typename PixelType> void screenInit(); + template<typename PixelType> void screenInit(bool backBuffer); bool loadThemeXML(Common::String themeName); bool loadDefaultXML(); @@ -228,6 +231,14 @@ protected: delete _vectorRenderer; _vectorRenderer = 0; } + + void freeBackbuffer() { + if (_backBuffer != 0) { + _backBuffer->free(); + delete _backBuffer; + _backBuffer = 0; + } + } void freeScreen() { if (_screen != 0) { @@ -283,6 +294,7 @@ protected: GUI::ThemeParser *_parser; Graphics::Surface *_screen; + Graphics::Surface *_backBuffer; int _bytesPerPixel; GraphicsMode _graphicsMode; |