aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohannes Schickel2006-05-29 14:55:43 +0000
committerJohannes Schickel2006-05-29 14:55:43 +0000
commit1d72b954c7dd6e15a201ee680d8a5e895626dcd4 (patch)
treea179572a6eb5fe9c07755392bc74e2e9dfca908f
parentcba9ef32c21a8b40dbd638fd10796024bb7b6d87 (diff)
downloadscummvm-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.cpp2
-rw-r--r--gui/ThemeNew.cpp30
-rw-r--r--gui/launcher.cpp2
-rw-r--r--gui/theme.h6
-rw-r--r--gui/widget.cpp6
-rw-r--r--gui/widget.h2
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 */