diff options
author | Johannes Schickel | 2006-05-29 14:55:43 +0000 |
---|---|---|
committer | Johannes Schickel | 2006-05-29 14:55:43 +0000 |
commit | 1d72b954c7dd6e15a201ee680d8a5e895626dcd4 (patch) | |
tree | a179572a6eb5fe9c07755392bc74e2e9dfca908f | |
parent | cba9ef32c21a8b40dbd638fd10796024bb7b6d87 (diff) | |
download | scummvm-rg350-1d72b954c7dd6e15a201ee680d8a5e895626dcd4.tar.gz scummvm-rg350-1d72b954c7dd6e15a201ee680d8a5e895626dcd4.tar.bz2 scummvm-rg350-1d72b954c7dd6e15a201ee680d8a5e895626dcd4.zip |
Introduces special switch for GraphicsWidget for use of theme transparency again.
svn-id: r22746
-rw-r--r-- | gui/ThemeClassic.cpp | 2 | ||||
-rw-r--r-- | gui/ThemeNew.cpp | 30 | ||||
-rw-r--r-- | gui/launcher.cpp | 2 | ||||
-rw-r--r-- | gui/theme.h | 6 | ||||
-rw-r--r-- | gui/widget.cpp | 6 | ||||
-rw-r--r-- | gui/widget.h | 2 |
6 files changed, 38 insertions, 10 deletions
diff --git a/gui/ThemeClassic.cpp b/gui/ThemeClassic.cpp index e9ed6066c4..3e8c050f08 100644 --- a/gui/ThemeClassic.cpp +++ b/gui/ThemeClassic.cpp @@ -219,7 +219,7 @@ void ThemeClassic::drawButton(const Common::Rect &r, const Common::String &str, addDirtyRect(r); } -void ThemeClassic::drawSurface(const Common::Rect &r, const Graphics::Surface &surface, kState state, int alpha) { +void ThemeClassic::drawSurface(const Common::Rect &r, const Graphics::Surface &surface, kState state, int alpha, bool themeTrans) { if (!_initOk) return; diff --git a/gui/ThemeNew.cpp b/gui/ThemeNew.cpp index 724711ad26..bb05e477a7 100644 --- a/gui/ThemeNew.cpp +++ b/gui/ThemeNew.cpp @@ -43,7 +43,7 @@ #define kShadowTr4 128 #define kShadowTr5 192 -#define THEME_VERSION 13 +#define THEME_VERSION 14 using Graphics::Surface; @@ -624,7 +624,7 @@ void ThemeNew::drawButton(const Common::Rect &r, const Common::String &str, kSta addDirtyRect(r2); } -void ThemeNew::drawSurface(const Common::Rect &r, const Graphics::Surface &surface, kState state, int alpha) { +void ThemeNew::drawSurface(const Common::Rect &r, const Graphics::Surface &surface, kState state, int alpha, bool themeTrans) { if (!_initOk) return; @@ -639,7 +639,31 @@ void ThemeNew::drawSurface(const Common::Rect &r, const Graphics::Surface &surfa if (alpha != 256) restoreBackground(rect); - drawSurface(rect, &surface, false, false, alpha); + if (themeTrans) + drawSurface(rect, &surface, false, false, alpha); + else { + OverlayColor *dst = (OverlayColor*)_screen.getBasePtr(rect.left, rect.top); + const OverlayColor *src = (OverlayColor*)surface.pixels; + + int h = rect.height(); + if (alpha == 256) { + while (h--) { + memcpy(dst, src, surface.pitch); + dst += _screen.w; + src += surface.w; + } + } else { + int w = rect.width(); + while (h--) { + for (int i = 0; i < w; ++i) { + *dst = getColorAlpha(*src, *dst, alpha); + } + dst += _screen.w; + src += surface.w; + } + } + } + addDirtyRect(rect); } diff --git a/gui/launcher.cpp b/gui/launcher.cpp index 11896f9a09..923d3c9bee 100644 --- a/gui/launcher.cpp +++ b/gui/launcher.cpp @@ -451,6 +451,7 @@ LauncherDialog::LauncherDialog() _logo = 0; if (g_gui.evaluator()->getVar("launcher_logo.visible") == 1) { _logo = new GraphicsWidget(this, "launcher_logo"); + _logo->useThemeTransparency(true); ThemeNew *th = (ThemeNew *)g_gui.theme(); _logo->setGfx(th->getImageSurface(th->kThemeLogo)); @@ -780,6 +781,7 @@ void LauncherDialog::handleScreenChanged() { if (!_logo) _logo = new GraphicsWidget(this, "launcher_logo"); + _logo->useThemeTransparency(true); ThemeNew *th = (ThemeNew *)g_gui.theme(); _logo->setGfx(th->getImageSurface(th->kThemeLogo)); diff --git a/gui/theme.h b/gui/theme.h index 98446e8a6a..fd59fdef2a 100644 --- a/gui/theme.h +++ b/gui/theme.h @@ -142,7 +142,7 @@ public: virtual void drawWidgetBackground(const Common::Rect &r, uint16 hints, kWidgetBackground background = kWidgetBackgroundPlain, kState state = kStateEnabled) = 0; virtual void drawButton(const Common::Rect &r, const Common::String &str, kState state = kStateEnabled) = 0; - virtual void drawSurface(const Common::Rect &r, const Graphics::Surface &surface, kState state = kStateEnabled, int alpha = 256) = 0; + virtual void drawSurface(const Common::Rect &r, const Graphics::Surface &surface, kState state = kStateEnabled, int alpha = 256, bool themeTrans = false) = 0; virtual void drawSlider(const Common::Rect &r, int width, kState state = kStateEnabled) = 0; virtual void drawCheckbox(const Common::Rect &r, const Common::String &str, bool checked, kState state = kStateEnabled) = 0; virtual void drawTab(const Common::Rect &r, int tabHeight, int tabWidth, const Common::Array<Common::String> &tabs, int active, uint16 hints, kState state = kStateEnabled) = 0; @@ -244,7 +244,7 @@ public: void drawWidgetBackground(const Common::Rect &r, uint16 hints, kWidgetBackground background, kState state); void drawButton(const Common::Rect &r, const String &str, kState state); - void drawSurface(const Common::Rect &r, const Graphics::Surface &surface, kState state, int alpha); + void drawSurface(const Common::Rect &r, const Graphics::Surface &surface, kState state, int alpha, bool themeTrans); void drawSlider(const Common::Rect &r, int width, kState state); void drawCheckbox(const Common::Rect &r, const String &str, bool checked, kState state); void drawTab(const Common::Rect &r, int tabHeight, int tabWidth, const Common::Array<String> &tabs, int active, uint16 hints, kState state); @@ -321,7 +321,7 @@ public: void drawWidgetBackground(const Common::Rect &r, uint16 hints, kWidgetBackground background, kState state); void drawButton(const Common::Rect &r, const String &str, kState state); - void drawSurface(const Common::Rect &r, const Graphics::Surface &surface, kState state, int alpha); + void drawSurface(const Common::Rect &r, const Graphics::Surface &surface, kState state, int alpha, bool themeTrans); void drawSlider(const Common::Rect &r, int width, kState state); void drawCheckbox(const Common::Rect &r, const String &str, bool checked, kState state); void drawTab(const Common::Rect &r, int tabHeight, int tabWidth, const Common::Array<String> &tabs, int active, uint16 hints, kState state); diff --git a/gui/widget.cpp b/gui/widget.cpp index d715f6d075..147f3f9e11 100644 --- a/gui/widget.cpp +++ b/gui/widget.cpp @@ -316,7 +316,7 @@ int SliderWidget::posToValue(int pos) { #pragma mark - GraphicsWidget::GraphicsWidget(GuiObject *boss, int x, int y, int w, int h) - : Widget(boss, x, y, w, h), _gfx(), _alpha(256) { + : Widget(boss, x, y, w, h), _gfx(), _alpha(256), _transparency(false) { _flags = WIDGET_ENABLED | WIDGET_CLEARBG; _type = kGraphicsWidget; // HACK: Don't save the background. We want to be sure that redrawing @@ -326,7 +326,7 @@ GraphicsWidget::GraphicsWidget(GuiObject *boss, int x, int y, int w, int h) } GraphicsWidget::GraphicsWidget(GuiObject *boss, String name) - : Widget(boss, name), _gfx(), _alpha(256) { + : Widget(boss, name), _gfx(), _alpha(256), _transparency(false) { _flags = WIDGET_ENABLED | WIDGET_CLEARBG; _type = kGraphicsWidget; // HACK: Don't save the background. We want to be sure that redrawing @@ -371,7 +371,7 @@ void GraphicsWidget::setGfx(int w, int h, int r, int g, int b) { void GraphicsWidget::drawWidget(bool hilite) { if (sizeof(OverlayColor) == _gfx.bytesPerPixel && _gfx.pixels) { - g_gui.theme()->drawSurface(Common::Rect(_x, _y, _x+_w, _y+_h), _gfx, Theme::kStateEnabled, _alpha); + g_gui.theme()->drawSurface(Common::Rect(_x, _y, _x+_w, _y+_h), _gfx, Theme::kStateEnabled, _alpha, _transparency); } } diff --git a/gui/widget.h b/gui/widget.h index 883343511f..56f4007a14 100644 --- a/gui/widget.h +++ b/gui/widget.h @@ -273,12 +273,14 @@ public: void setGfx(int w, int h, int r, int g, int b); void useAlpha(int alpha) { _alpha = alpha; } + void useThemeTransparency(bool enable) { _transparency = enable; } protected: void drawWidget(bool hilite); Graphics::Surface _gfx; int _alpha; + bool _transparency; }; /* ContainerWidget */ |