Index: libs/libmythtv/videoout_vdpau.cpp
===================================================================
--- libs/libmythtv/videoout_vdpau.cpp	(revision 26423)
+++ libs/libmythtv/videoout_vdpau.cpp	(working copy)
@@ -1092,6 +1092,7 @@
         if (m_pips.contains(pipplayer))
         {
             QRect rect = GetPIPRect(loc, pipplayer);
+            Effects fx = { 255 };
 
             if (!m_pip_ready)
                 m_render->DrawBitmap(0, m_pip_surface, NULL, NULL, 0, 0, 0, 0);
@@ -1115,7 +1116,7 @@
                                        QRect(QPoint(0,0), pipVideoDim),
                                        rect, rect);
             ok &= m_render->DrawBitmap(0, m_pip_surface, NULL, &rect,
-                                       255, 0, 0, 0, true);
+                                       &fx, 0, 0, 0, true);
 
             if (pipActive)
             {
@@ -1128,10 +1129,10 @@
                                 QSize(rect.width(), 10));
                 QRect r = QRect(QPoint(rect.x() + rect.width(), rect.y() -10),
                                 QSize(10, rect.height() + 20));
-                m_render->DrawBitmap(0, m_pip_surface, NULL, &l, 255, 127);
-                m_render->DrawBitmap(0, m_pip_surface, NULL, &t, 255, 127);
-                m_render->DrawBitmap(0, m_pip_surface, NULL, &b, 255, 127);
-                m_render->DrawBitmap(0, m_pip_surface, NULL, &r, 255, 127);
+                m_render->DrawBitmap(0, m_pip_surface, NULL, &l, &fx, 127);
+                m_render->DrawBitmap(0, m_pip_surface, NULL, &t, &fx, 127);
+                m_render->DrawBitmap(0, m_pip_surface, NULL, &b, &fx, 127);
+                m_render->DrawBitmap(0, m_pip_surface, NULL, &r, &fx, 127);
             }
 
             m_pip_ready = ok;
Index: libs/libmythtv/osd.cpp
===================================================================
--- libs/libmythtv/osd.cpp	(revision 26423)
+++ libs/libmythtv/osd.cpp	(working copy)
@@ -548,7 +548,8 @@
         {
             if (it.value()->IsVisible())
             {
-                it.value()->Draw(painter, 0, 0, 255, cliprect);
+                Effects fx = { 255 };
+                it.value()->Draw(painter, 0, 0, fx, cliprect);
                 it.value()->SetAlpha(255);
                 it.value()->ResetNeedsRedraw();
             }
@@ -628,8 +629,9 @@
         {
             if (it.value()->NeedsRedraw())
             {
+                Effects fx = { 255 };
                 if (it.value()->IsVisible())
-                    it.value()->Draw(painter, 0, 0, 255, cliprect);
+                    it.value()->Draw(painter, 0, 0, fx, cliprect);
                 it.value()->SetAlpha(255);
                 it.value()->ResetNeedsRedraw();
             }
Index: libs/libmythui/mythpainter.cpp
===================================================================
--- libs/libmythui/mythpainter.cpp	(revision 26423)
+++ libs/libmythui/mythpainter.cpp	(working copy)
@@ -26,7 +26,7 @@
 {
 }
 
-void MythPainter::DrawImage(int x, int y, MythImage *im, int alpha)
+void MythPainter::DrawImage(int x, int y, MythImage *im, Effects fx)
 {
     if (!im)
     {
@@ -36,12 +36,12 @@
     }
     QRect dest = QRect(x, y, im->width(), im->height());
     QRect src = im->rect();
-    DrawImage(dest, im, src, alpha);
+    DrawImage(dest, im, src, fx);
 }
 
-void MythPainter::DrawImage(const QPoint &topLeft, MythImage *im, int alpha)
+void MythPainter::DrawImage(const QPoint &topLeft, MythImage *im, Effects fx)
 {
-    DrawImage(topLeft.x(), topLeft.y(), im, alpha);
+    DrawImage(topLeft.x(), topLeft.y(), im, fx);
 }
 
 // the following assume graphics hardware operates natively at 32bpp
Index: libs/libmythui/mythpainter_qt.cpp
===================================================================
--- libs/libmythui/mythpainter_qt.cpp	(revision 26423)
+++ libs/libmythui/mythpainter_qt.cpp	(working copy)
@@ -109,7 +109,7 @@
 }
 
 void MythQtPainter::DrawImage(const QRect &r, MythImage *im,
-                              const QRect &src, int alpha)
+                              const QRect &src, const Effects &fx)
 {
     if (!painter)
     {
@@ -122,14 +122,14 @@
     if (qim->NeedsRegen())
         qim->RegeneratePixmap();
 
-    painter->setOpacity(static_cast<float>(alpha) / 255.0);
+    painter->setOpacity(static_cast<float>(fx.alpha) / 255.0);
     painter->drawPixmap(r.topLeft(), *(qim->GetPixmap()), src);
     painter->setOpacity(1.0);
 }
 
 void MythQtPainter::DrawText(const QRect &r, const QString &msg,
                              int flags, const MythFontProperties &font,
-                             int alpha, const QRect &boundRect)
+                             const Effects &fx, const QRect &boundRect)
 {
     if (!painter)
     {
@@ -137,9 +137,9 @@
         return;
     }
 
-    (void)alpha;
+    (void)fx.alpha;
 
-    painter->setOpacity(static_cast<float>(alpha) / 255.0);
+    painter->setOpacity(static_cast<float>(fx.alpha) / 255.0);
     
     painter->setFont(font.face());
 
@@ -160,7 +160,7 @@
         painter->drawText(a, flags, msg);
     }
 
-    if (font.hasOutline() && alpha > 128)
+    if (font.hasOutline() && fx.alpha > 128)
     {
         QColor outlineColor;
         int outlineSize, outlineAlpha;
Index: libs/libmythui/mythmainwindow.cpp
===================================================================
--- libs/libmythui/mythmainwindow.cpp	(revision 26423)
+++ libs/libmythui/mythmainwindow.cpp	(working copy)
@@ -696,7 +696,8 @@
             for (screenit = redrawList.begin(); screenit != redrawList.end();
                  ++screenit)
             {
-                (*screenit)->Draw(d->painter, 0, 0, 255, rects[i]);
+                Effects fx = { 255 };
+                (*screenit)->Draw(d->painter, 0, 0, fx, rects[i]);
             }
         }
     }
Index: libs/libmythui/mythpainter_qimage.cpp
===================================================================
--- libs/libmythui/mythpainter_qimage.cpp	(revision 26423)
+++ libs/libmythui/mythpainter_qimage.cpp	(working copy)
@@ -143,25 +143,25 @@
 }
 
 void MythQImagePainter::DrawImage(const QRect &r, MythImage *im,
-                                  const QRect &src, int alpha)
+                                  const QRect &src, const Effects &fx)
 {
     if (!painter)
     {
         VERBOSE(VB_IMPORTANT, "FATAL ERROR: DrawImage called with no painter");
         return;
     }
-    
-    (void)alpha;
 
+    (void)fx.alpha;
+
     CheckPaintMode(QRect(r.topLeft(), src.size()));
-    painter->setOpacity(static_cast<float>(alpha) / 255.0);
+    painter->setOpacity(static_cast<float>(fx.alpha) / 255.0);
     painter->drawImage(r.topLeft(), (QImage)(*im), src);
     painter->setOpacity(1.0);
 }
 
 void MythQImagePainter::DrawText(const QRect &r, const QString &msg,
                                  int flags, const MythFontProperties &font,
-                                 int alpha, const QRect &boundRect)
+                                 const Effects &fx, const QRect &boundRect)
 {
     MythImage *im = GetImageFromString(msg, flags, r, font);
     if (!im)
@@ -202,7 +202,7 @@
         srcRect.setRect(x,y,width,height);
     }
 
-    DrawImage(destRect, im, srcRect, alpha);
+    DrawImage(destRect, im, srcRect, fx);
 }
 
 void MythQImagePainter::DrawRect(const QRect &area, bool drawFill,
@@ -237,8 +237,9 @@
 {
     MythImage *im = GetImageFromRect(area.size(), radius, drawFill, fillColor,
                                      drawLine, lineWidth, lineColor);
+    Effects fx = { 255 };
     if (im)
-        DrawImage(area, im, QRect(0, 0, area.width(), area.height()), 255);
+        DrawImage(area, im, QRect(0, 0, area.width(), area.height()), fx);
 }
 
 MythImage* MythQImagePainter::GetImageFromRect(const QSize &size, int radius,
Index: libs/libmythui/mythuishape.cpp
===================================================================
--- libs/libmythui/mythuishape.cpp	(revision 26423)
+++ libs/libmythui/mythuishape.cpp	(working copy)
@@ -77,7 +77,7 @@
  *  \copydoc MythUIType::DrawSelf()
  */
 void MythUIShape::DrawSelf(MythPainter *p, int xoffset, int yoffset,
-                          int alphaMod, QRect clipRect)
+                          Effects fx, QRect clipRect)
 {
     QRect area = GetArea();
     area.translate(xoffset, yoffset);
@@ -101,7 +101,7 @@
             srcRect = m_cropRect.toQRect();
         else
             srcRect = m_image->rect();
-        p->DrawImage(dest, m_image, srcRect, CalcAlpha(alphaMod));
+        p->DrawImage(dest, m_image, srcRect, fx);
     }
 }
 
Index: libs/libmythui/mythpainter_yuva.cpp
===================================================================
--- libs/libmythui/mythpainter_yuva.cpp	(revision 26423)
+++ libs/libmythui/mythpainter_yuva.cpp	(working copy)
@@ -16,7 +16,7 @@
 }
 
 void MythYUVAPainter::DrawImage(const QRect &dest, MythImage *im,
-                                const QRect &src, int alpha)
+                                const QRect &src, const Effects &fx)
 {
     if (im->format() != QImage::Format_ARGB32)
     {
@@ -25,11 +25,11 @@
     }
 
     im->ConvertToYUV();
-    MythQImagePainter::DrawImage(dest, im, src, alpha);
+    MythQImagePainter::DrawImage(dest, im, src, fx);
 }
 
 void MythYUVAPainter::DrawText(const QRect &dest, const QString &msg, int flags,
-                               const MythFontProperties &font, int alpha,
+                               const MythFontProperties &font, const Effects &fx,
                                const QRect &boundRect)
 {
     MythFontProperties *converted = GetConvertedFont(font);
@@ -39,7 +39,7 @@
         if (im)
             im->SetToYUV();
         MythQImagePainter::DrawText(dest, msg, flags, *converted,
-                                    alpha, boundRect);
+                                    fx, boundRect);
     }
 }
 
Index: libs/libmythui/mythpainter_ogl.h
===================================================================
--- libs/libmythui/mythpainter_ogl.h	(revision 26423)
+++ libs/libmythui/mythpainter_ogl.h	(working copy)
@@ -28,9 +28,9 @@
     virtual void End();
 
     virtual void DrawImage(const QRect &dest, MythImage *im, const QRect &src,
-                           int alpha);
+                           const Effects &fx);
     virtual void DrawText(const QRect &dest, const QString &msg, int flags,
-                          const MythFontProperties &font, int alpha,
+                          const MythFontProperties &font, const Effects &fx,
                           const QRect &boundRect);
     virtual void DrawRect(const QRect &area,
                           bool drawFill, const QColor &fillColor, 
Index: libs/libmythui/mythuibuttonlist.h
===================================================================
--- libs/libmythui/mythuibuttonlist.h	(revision 26423)
+++ libs/libmythui/mythuibuttonlist.h	(working copy)
@@ -172,7 +172,7 @@
                        WrapFlowing };
 
     virtual void DrawSelf(MythPainter *p, int xoffset, int yoffset,
-                          int alphaMod, QRect clipRect);
+                          Effects fx, QRect clipRect);
     void Const();
     virtual void Init();
 
Index: libs/libmythui/mythuitype.cpp
===================================================================
--- libs/libmythui/mythuitype.cpp	(revision 26423)
+++ libs/libmythui/mythuitype.cpp	(working copy)
@@ -37,7 +37,7 @@
     m_Area = MythRect(0, 0, 0, 0);
     m_MinArea = MythRect(0, 0, 0, 0);
     m_NeedsRedraw = false;
-    m_Alpha = 255;
+    m_Effects = { 255 };
     m_AlphaChangeMode = m_AlphaChange = m_AlphaMin = 0;
     m_AlphaMax = 255;
     m_Moving = false;
@@ -376,15 +376,15 @@
     if (m_AlphaChangeMode == 0)
         return;
 
-    m_Alpha += m_AlphaChange;
+    m_Effects.alpha += m_AlphaChange;
 
-    if (m_Alpha > m_AlphaMax)
-        m_Alpha = m_AlphaMax;
-    if (m_Alpha < m_AlphaMin)
-        m_Alpha = m_AlphaMin;
+    if (m_Effects.alpha > m_AlphaMax)
+        m_Effects.alpha = m_AlphaMax;
+    if (m_Effects.alpha < m_AlphaMin)
+        m_Effects.alpha = m_AlphaMin;
 
     // Reached limits so change direction
-    if (m_Alpha == m_AlphaMax || m_Alpha == m_AlphaMin)
+    if (m_Effects.alpha == m_AlphaMax || m_Effects.alpha == m_AlphaMin)
     {
         if (m_AlphaChangeMode == 2)
         {
@@ -421,14 +421,14 @@
 
 int MythUIType::CalcAlpha(int alphamod)
 {
-    return (int)(m_Alpha * (alphamod / 255.0));
+    return (int)(m_Effects.alpha * (alphamod / 255.0));
 }
 
-void MythUIType::DrawSelf(MythPainter *, int, int, int, QRect)
+void MythUIType::DrawSelf(MythPainter *, int, int, Effects, QRect)
 {
 }
 
-void MythUIType::Draw(MythPainter *p, int xoffset, int yoffset, int alphaMod,
+void MythUIType::Draw(MythPainter *p, int xoffset, int yoffset, Effects fx,
                       QRect clipRect)
 {
     m_DirtyRegion = QRegion(QRect(0,0,0,0));
@@ -442,13 +442,13 @@
     if (!realArea.intersects(clipRect))
         return;
 
-    DrawSelf(p, xoffset, yoffset, alphaMod, clipRect);
+    DrawSelf(p, xoffset, yoffset, fx, clipRect);
 
     QList<MythUIType *>::Iterator it;
     for (it = m_ChildrenList.begin(); it != m_ChildrenList.end(); ++it)
     {
         (*it)->Draw(p, xoffset + m_Area.x(), yoffset + m_Area.y(),
-                    CalcAlpha(alphaMod), clipRect);
+                    fx, clipRect);
     }
 }
 
@@ -668,23 +668,23 @@
     m_AlphaMin = minalpha;
     m_AlphaMax = maxalpha;
 
-    if (m_Alpha > m_AlphaMax)
-        m_Alpha = m_AlphaMax;
-    if (m_Alpha < m_AlphaMin)
-        m_Alpha = m_AlphaMin;
+    if (m_Effects.alpha > m_AlphaMax)
+        m_Effects.alpha = m_AlphaMax;
+    if (m_Effects.alpha < m_AlphaMin)
+        m_Effects.alpha = m_AlphaMin;
 }
 
 void MythUIType::SetAlpha(int newalpha)
 {
-    if (m_Alpha == newalpha)
+    if (m_Effects.alpha == newalpha)
         return;
-    m_Alpha = newalpha;
+    m_Effects.alpha = newalpha;
     SetRedraw();
 }
 
 int MythUIType::GetAlpha(void) const
 {
-    return m_Alpha;
+    return m_Effects.alpha;
 }
 
 /** \brief Key event handler
@@ -811,7 +811,7 @@
     SetArea(base->m_Area);
     m_MinArea = base->m_MinArea;
     m_MinSize = base->m_MinSize;
-    m_Alpha = base->m_Alpha;
+    m_Effects = base->m_Effects;
     m_AlphaChangeMode = base->m_AlphaChangeMode;
     m_AlphaChange = base->m_AlphaChange;
     m_AlphaMin = base->m_AlphaMin;
@@ -863,16 +863,16 @@
     }
     else if (element.tagName() == "alpha")
     {
-        m_Alpha = getFirstText(element).toInt();
+        m_Effects.alpha = getFirstText(element).toInt();
         m_AlphaChangeMode = 0;
     }
     else if (element.tagName() == "alphapulse")
     {
         m_AlphaChangeMode = 2;
         m_AlphaMin = element.attribute("min", "0").toInt();
-        m_Alpha = m_AlphaMax = element.attribute("max", "255").toInt();
+        m_Effects.alpha = m_AlphaMax = element.attribute("max", "255").toInt();
         if (m_AlphaMax > 255)
-            m_Alpha = m_AlphaMax = 255;
+            m_Effects.alpha = m_AlphaMax = 255;
         if (m_AlphaMin < 0)
             m_AlphaMin = 0;
         m_AlphaChange = element.attribute("change", "5").toInt();
Index: libs/libmythui/mythuiwebbrowser.h
===================================================================
--- libs/libmythui/mythuiwebbrowser.h	(revision 26423)
+++ libs/libmythui/mythuiwebbrowser.h	(working copy)
@@ -98,7 +98,7 @@
     void SetBackgroundColor(QColor color);
 
     virtual void DrawSelf(MythPainter *p, int xoffset, int yoffset,
-                          int alphaMod, QRect clipRegion);
+                          Effects fx, QRect clipRegion);
 
     virtual bool ParseElement(
         const QString &filename, QDomElement &element, bool showWarnings);
Index: libs/libmythui/mythrender_opengl.h
===================================================================
--- libs/libmythui/mythrender_opengl.h	(revision 26423)
+++ libs/libmythui/mythrender_opengl.h	(working copy)
@@ -17,6 +17,7 @@
 #endif
 
 #include "mythverbose.h"
+#include "mythpainter.h"
 #include "mythrender_base.h"
 #include "mythrender_opengl_defs.h"
 
@@ -114,7 +115,7 @@
     void EnableShaderObject(uint obj);
 
     void DrawBitmap(uint tex, uint target, const QRect *src, const QRect *dst,
-                    uint prog, int alpha = 255, int red = 255, int green = 255,
+                    uint prog, const Effects *fx, int red = 255, int green = 255,
                     int blue = 255);
     void DrawBitmap(uint *textures, uint texture_count, uint target,
                     const QRectF *src, const QRectF *dst, uint prog,
Index: libs/libmythui/mythuibuttonlist.cpp
===================================================================
--- libs/libmythui/mythuibuttonlist.cpp	(revision 26423)
+++ libs/libmythui/mythuibuttonlist.cpp	(working copy)
@@ -2380,7 +2380,7 @@
 /**
  *  \copydoc MythUIType::DrawSelf()
  */
-void MythUIButtonList::DrawSelf(MythPainter *, int, int, int, QRect)
+void MythUIButtonList::DrawSelf(MythPainter *, int, int, Effects, QRect)
 {
     if (m_needsUpdate)
         SetPositionArrowStates();
Index: libs/libmythui/mythuitext.h
===================================================================
--- libs/libmythui/mythuitext.h	(revision 26423)
+++ libs/libmythui/mythuitext.h	(working copy)
@@ -53,7 +53,7 @@
 
   protected:
     virtual void DrawSelf(MythPainter *p, int xoffset, int yoffset,
-                          int alphaMod, QRect clipRect);
+                          Effects fx, QRect clipRect);
 
     virtual bool ParseElement(
         const QString &filename, QDomElement &element, bool showWarnings);
Index: libs/libmythui/mythrender_vdpau.h
===================================================================
--- libs/libmythui/mythrender_vdpau.h	(revision 26423)
+++ libs/libmythui/mythrender_vdpau.h	(working copy)
@@ -119,7 +119,7 @@
     bool UploadMythImage(uint id, MythImage *image);
     bool UploadYUVFrame(uint id, void* const planes[3], uint32_t pitches[3]);
     bool DrawBitmap(uint id, uint target, const QRect *src,
-                    const QRect *dst, int alpha = 0, int red = 0,
+                    const QRect *dst, const Effects *fx, int red = 0,
                     int blue = 0, int green = 0, bool blend = false);
 
     QSize GetBitmapSize(uint id);
Index: libs/libmythui/mythpainter_vdpau.h
===================================================================
--- libs/libmythui/mythpainter_vdpau.h	(revision 26423)
+++ libs/libmythui/mythpainter_vdpau.h	(working copy)
@@ -28,9 +28,9 @@
     virtual void End();
 
     virtual void DrawImage(const QRect &dest, MythImage *im, const QRect &src,
-                           int alpha);
+                           const Effects &fx);
     virtual void DrawText(const QRect &dest, const QString &msg, int flags,
-                          const MythFontProperties &font, int alpha,
+                          const MythFontProperties &font, const Effects &fx,
                           const QRect &boundRect);
     virtual void DrawRect(const QRect &area,
                           bool drawFill, const QColor &fillColor,
Index: libs/libmythui/mythpainter.h
===================================================================
--- libs/libmythui/mythpainter.h	(revision 26423)
+++ libs/libmythui/mythpainter.h	(working copy)
@@ -13,7 +13,7 @@
 //  #include "mythfontproperties.h"
 
 #include "compat.h"
-
+#include "mythuitype.h"
 #include "mythexp.h"
 
 class MythFontProperties;
@@ -40,13 +40,13 @@
     QPaintDevice *GetParent(void) { return m_Parent; }
 
     virtual void DrawImage(const QRect &dest, MythImage *im, const QRect &src,
-                           int alpha) = 0;
+                           const Effects &fx) = 0;
 
-    void DrawImage(int x, int y, MythImage *im, int alpha);
-    void DrawImage(const QPoint &topLeft, MythImage *im, int alph);
+    void DrawImage(int x, int y, MythImage *im, Effects fx);
+    void DrawImage(const QPoint &topLeft, MythImage *im, Effects fx);
 
     virtual void DrawText(const QRect &dest, const QString &msg, int flags,
-                          const MythFontProperties &font, int alpha,
+                          const MythFontProperties &font, const Effects &fx,
                           const QRect &boundRect) = 0;
 
     virtual void DrawRect(const QRect &area,
Index: libs/libmythui/mythpainter_qt.h
===================================================================
--- libs/libmythui/mythpainter_qt.h	(revision 26423)
+++ libs/libmythui/mythpainter_qt.h	(working copy)
@@ -27,9 +27,9 @@
     virtual void SetClipRect(const QRect &clipRect);
 
     virtual void DrawImage(const QRect &dest, MythImage *im, const QRect &src,
-                           int alpha);
+                           const Effects &fx);
     virtual void DrawText(const QRect &dest, const QString &msg, int flags,
-                          const MythFontProperties &font, int alpha,
+                          const MythFontProperties &font, const Effects &fx,
                           const QRect &boundRect);
     virtual void DrawRect(const QRect &area,
                           bool drawFill, const QColor &fillColor, 
Index: libs/libmythui/mythuitype.h
===================================================================
--- libs/libmythui/mythuitype.h	(revision 26423)
+++ libs/libmythui/mythuitype.h	(working copy)
@@ -11,6 +11,11 @@
 #include "mythrect.h"
 #include "mythgesture.h"
 
+struct Effects
+{
+    int alpha;
+};
+
 class MythImage;
 class MythPainter;
 class MythGestureEvent;
@@ -76,7 +81,7 @@
     // Called each draw pulse.  Will redraw automatically if dirty afterwards
     virtual void Pulse(void);
 
-    void Draw(MythPainter *p, int xoffset, int yoffset, int alphaMod = 255,
+    void Draw(MythPainter *p, int xoffset, int yoffset, Effects fx,
               QRect clipRegion = QRect());
 
     virtual void SetPosition(int x, int y);
@@ -147,7 +152,7 @@
     
   protected:
     virtual void DrawSelf(MythPainter *p, int xoffset, int yoffset,
-                          int alphaMod, QRect clipRegion);
+                          Effects fx, QRect clipRegion);
 
     void AddFocusableChildrenToList(QMap<int, MythUIType *> &focusList);
     void HandleAlphaPulse();
@@ -180,7 +185,8 @@
     QRegion m_DirtyRegion;
     bool m_NeedsRedraw;
 
-    int m_Alpha;
+    Effects m_Effects;
+
     int m_AlphaChangeMode; // 0 - none, 1 - once, 2 - cycle
     int m_AlphaChange;
     int m_AlphaMin;
Index: libs/libmythui/mythpainter_vdpau.cpp
===================================================================
--- libs/libmythui/mythpainter_vdpau.cpp	(revision 26423)
+++ libs/libmythui/mythpainter_vdpau.cpp	(working copy)
@@ -97,7 +97,7 @@
     DeleteBitmaps();
 
     if (m_target)
-        m_render->DrawBitmap(0, m_target, NULL, NULL);
+        m_render->DrawBitmap(0, m_target, NULL, NULL, NULL);
     else if (m_swap_control)
         m_render->WaitForFlip();
 
@@ -139,16 +139,16 @@
 }
 
 void MythVDPAUPainter::DrawImage(const QRect &r, MythImage *im,
-                                 const QRect &src, int alpha)
+                                 const QRect &src, const Effects &fx)
 {
     if (m_render)
         m_render->DrawBitmap(GetTextureFromCache(im), m_target,
-                             &src, &r /*dst*/, alpha, 255, 255, 255);
+                             &src, &r /*dst*/, &fx, 255, 255, 255);
 }
 
 void MythVDPAUPainter::DrawText(const QRect &r, const QString &msg,
                                 int flags, const MythFontProperties &font,
-                                int alpha, const QRect &boundRect)
+                                const Effects &fx, const QRect &boundRect)
 {
     MythImage *im = GetImageFromString(msg, flags, r, font);
     if (!im)
@@ -189,7 +189,7 @@
         srcRect.setRect(x,y,width,height);
     }
 
-    DrawImage(destRect, im, srcRect, alpha);
+    DrawImage(destRect, im, srcRect, fx);
 }
 
 void MythVDPAUPainter::DrawRect(const QRect &area, bool drawFill,
@@ -198,7 +198,10 @@
 {
     if (m_render)
     {
-        m_render->DrawBitmap(0, m_target, NULL, &area, fillColor.alpha(),
+        Effects fx;
+        fx.alpha = fillColor.alpha();
+
+        m_render->DrawBitmap(0, m_target, NULL, &area, &fx,
                              fillColor.red(), fillColor.green(),
                              fillColor.blue());
 
@@ -210,16 +213,16 @@
                    QSize(lineWidth, area.height()));
         QRect right(QPoint(area.x() + area.width() - lineWidth, area.y()),
                     QSize(lineWidth, area.height()));
-        m_render->DrawBitmap(0, m_target, NULL, &top, lineColor.alpha(),
+        m_render->DrawBitmap(0, m_target, NULL, &top, &fx,
                              lineColor.red(), lineColor.green(),
                              lineColor.blue());
-        m_render->DrawBitmap(0, m_target, NULL, &bot, lineColor.alpha(),
+        m_render->DrawBitmap(0, m_target, NULL, &bot, &fx,
                              lineColor.red(), lineColor.green(),
                              lineColor.blue());
-        m_render->DrawBitmap(0, m_target, NULL, &left, lineColor.alpha(),
+        m_render->DrawBitmap(0, m_target, NULL, &left, &fx,
                              lineColor.red(), lineColor.green(),
                              lineColor.blue());
-        m_render->DrawBitmap(0, m_target, NULL, &right, lineColor.alpha(),
+        m_render->DrawBitmap(0, m_target, NULL, &right, &fx,
                              lineColor.red(), lineColor.green(),
                              lineColor.blue());
     }
@@ -235,7 +238,10 @@
     if (!im)
         return;
 
-    DrawImage(area, im, QRect(0, 0, area.width(), area.height()), 255);
+    Effects fx;
+    fx.alpha = 255;
+
+    DrawImage(area, im, QRect(0, 0, area.width(), area.height()), fx);
 }
 
 MythImage *MythVDPAUPainter::GetFormatImage()
Index: libs/libmythui/mythuishape.h
===================================================================
--- libs/libmythui/mythuishape.h	(revision 26423)
+++ libs/libmythui/mythuishape.h	(working copy)
@@ -26,7 +26,7 @@
 
   protected:
     virtual void DrawSelf(MythPainter *p, int xoffset, int yoffset,
-                          int alphaMod, QRect clipRect);
+                          Effects fx, QRect clipRect);
 
     virtual bool ParseElement(
         const QString &filename, QDomElement &element, bool showWarnings);
Index: libs/libmythui/mythuiguidegrid.h
===================================================================
--- libs/libmythui/mythuiguidegrid.h	(revision 26423)
+++ libs/libmythui/mythuiguidegrid.h	(working copy)
@@ -22,7 +22,7 @@
     ~MythUIGuideGrid();
 
     virtual void DrawSelf(MythPainter *p, int xoffset, int yoffset,
-                          int alphaMod, QRect clipRect);
+                          Effects fx, QRect clipRect);
 
     enum FillType { Alpha = 10, Dense, Eco, Solid };
 
Index: libs/libmythui/mythpainter_yuva.h
===================================================================
--- libs/libmythui/mythpainter_yuva.h	(revision 26423)
+++ libs/libmythui/mythpainter_yuva.h	(working copy)
@@ -15,9 +15,9 @@
 
     QString GetName(void) { return QString("YUVA"); }
     void DrawImage(const QRect &dest, MythImage *im, const QRect &src,
-                   int alpha);
+                   const Effects &fx);
     void DrawText(const QRect &dest, const QString &msg, int flags,
-                  const MythFontProperties &font, int alpha,
+                  const MythFontProperties &font, const Effects &fx,
                   const QRect &boundRect);
     void DrawRect(const QRect &area, bool drawFill, const QColor &fillColor, 
                   bool drawLine, int lineWidth, const QColor &lineColor);
Index: libs/libmythui/mythuiimage.cpp
===================================================================
--- libs/libmythui/mythuiimage.cpp	(revision 26423)
+++ libs/libmythui/mythuiimage.cpp	(working copy)
@@ -1029,7 +1029,7 @@
  *  \copydoc MythUIType::DrawSelf()
  */
 void MythUIImage::DrawSelf(MythPainter *p, int xoffset, int yoffset,
-                           int alphaMod, QRect clipRect)
+                           Effects fx, QRect clipRect)
 {
     m_ImagesLock.lock();
     if (m_Images.size() > 0)
@@ -1052,7 +1052,7 @@
         QRect area = GetArea().toQRect();
         area.translate(xoffset, yoffset);
 
-        int alpha = CalcAlpha(alphaMod);
+        fx.alpha = CalcAlpha(fx.alpha);
 
         MythImage *currentImage = m_Images[m_CurPos];
         if (currentImage)
@@ -1088,7 +1088,7 @@
         else
             srcRect = currentImageArea;
 
-        p->DrawImage(area, currentImage, srcRect, alpha);
+        p->DrawImage(area, currentImage, srcRect, fx);
         currentImage->DownRef();
         d->m_UpdateLock.unlock();
     }
Index: libs/libmythui/mythuitext.cpp
===================================================================
--- libs/libmythui/mythuitext.cpp	(revision 26423)
+++ libs/libmythui/mythuitext.cpp	(working copy)
@@ -281,16 +281,16 @@
 }
 
 void MythUIText::DrawSelf(MythPainter *p, int xoffset, int yoffset,
-                          int alphaMod, QRect clipRect)
+                          Effects fx, QRect clipRect)
 {
     QRect area = GetArea().toQRect();
     area.translate(xoffset, yoffset);
     QRect drawrect = m_drawRect.toQRect();
     drawrect.translate(xoffset, yoffset);
 
-    int alpha = CalcAlpha(alphaMod);
+    fx.alpha = CalcAlpha(fx.alpha);
 
-    p->DrawText(drawrect, m_CutMessage, m_Justification, *m_Font, alpha, area);
+    p->DrawText(drawrect, m_CutMessage, m_Justification, *m_Font, fx, area);
 }
 
 /*
Index: libs/libmythui/mythuiguidegrid.cpp
===================================================================
--- libs/libmythui/mythuiguidegrid.cpp	(revision 26423)
+++ libs/libmythui/mythuiguidegrid.cpp	(working copy)
@@ -291,8 +291,9 @@
 }
 
 void MythUIGuideGrid::DrawSelf(MythPainter *p, int xoffset, int yoffset,
-                               int alphaMod, QRect clipRect)
+                               Effects fx, QRect clipRect)
 {
+    int alphaMod = fx.alpha;
     for (int i = 0; i < m_rowCount; i++)
     {
         QList<UIGTCon*>::iterator it = allData[i].begin();
@@ -383,6 +384,8 @@
     QRect area = data->drawArea;
     area.translate(m_Area.x(), m_Area.y());
     area.adjust(breakin, breakin, -breakin, -breakin);
+    Effects fx;
+    fx.alpha = CalcAlpha(alphaMod);
 
     // draw arrows
     if (data->arrow != 0)
@@ -392,12 +395,12 @@
             if (m_verticalLayout)
             {
                 p->DrawImage(area.left() + (area.width() / 2) - (m_arrowImages[2]->width() / 2),
-                             area.top() , m_arrowImages[2], alphaMod);
+                             area.top() , m_arrowImages[2], fx);
             }
             else
             {
                 p->DrawImage(area.left(), area.top() + (area.height() / 2) -
-                            (m_arrowImages[0]->height() / 2), m_arrowImages[0], alphaMod);
+                            (m_arrowImages[0]->height() / 2), m_arrowImages[0], fx);
             }
         }
         if (data->arrow == 2 || data->arrow == 3)
@@ -405,13 +408,13 @@
             if (m_verticalLayout)
             {
                 p->DrawImage(area.left() + (area.width() / 2) - (m_arrowImages[3]->width() / 2),
-                            area.top() + area.height() - m_arrowImages[3]->height(), m_arrowImages[3], alphaMod);
+                            area.top() + area.height() - m_arrowImages[3]->height(), m_arrowImages[3], fx);
             }
             else
             {
                 p->DrawImage(area.right() - m_arrowImages[1]->width(),
                             area.top() + (area.height() / 2) -
-                            (m_arrowImages[1]->height() / 2), m_arrowImages[1], alphaMod);
+                            (m_arrowImages[1]->height() / 2), m_arrowImages[1], fx);
             }
         }
     }
@@ -421,7 +424,7 @@
     {
         p->DrawImage(area.right() - m_recImages[data->recType]->width(),
                      area.bottom() - m_recImages[data->recType]->height(),
-                     m_recImages[data->recType], alphaMod);
+                     m_recImages[data->recType], fx);
     }
 }
 
@@ -521,6 +524,9 @@
     if (m_drawCategoryText && !data->category.isEmpty())
         msg += QString(" (%1)").arg(data->category);
 
+    Effects fx;
+    fx.alpha = CalcAlpha(alphaMod);
+
     QRect area = data->drawArea;
     area.translate(m_Area.x(), m_Area.y());
     area.adjust(m_textOffset.x(), m_textOffset.y(),
@@ -544,7 +550,7 @@
     if (area.width() <= 0 || area.height() <= 0)
         return;
 
-    p->DrawText(area, msg, m_justification, *m_font, alphaMod, area);
+    p->DrawText(area, msg, m_justification, *m_font, fx, area);
 }
 
 void MythUIGuideGrid::SetProgramInfo(int row, int col, const QRect &area,
Index: libs/libmythui/mythpainter_ogl.cpp
===================================================================
--- libs/libmythui/mythpainter_ogl.cpp	(revision 26423)
+++ libs/libmythui/mythpainter_ogl.cpp	(working copy)
@@ -182,12 +182,12 @@
 }
 
 void MythOpenGLPainter::DrawImage(const QRect &r, MythImage *im,
-                                  const QRect &src, int alpha)
+                                  const QRect &src, const Effects &fx)
 {
 
     if (realRender)
         realRender->DrawBitmap(GetTextureFromCache(im), target,
-                               &src, &r, 0, alpha);
+                               &src, &r, 0, &fx);
 }
 
 MythImage *MythOpenGLPainter::GetImageFromString(const QString &msg,
@@ -307,7 +307,7 @@
 
 void MythOpenGLPainter::DrawText(const QRect &r, const QString &msg,
                                  int flags, const MythFontProperties &font,
-                                 int alpha, const QRect &boundRect)
+                                 const Effects &fx, const QRect &boundRect)
 {
     if (r.width() <= 0 || r.height() <= 0)
         return;
@@ -352,7 +352,7 @@
         srcRect.setRect(x,y,width,height);
     }
 
-    DrawImage(destRect, im, srcRect, alpha);
+    DrawImage(destRect, im, srcRect, fx);
 }
 
 void MythOpenGLPainter::DrawRect(const QRect &area,
@@ -400,7 +400,10 @@
 
     MythImage *im = GetFormatImage();
     im->Assign(image);
-    MythPainter::DrawImage(area.x(), area.y(), im, 255);
+
+    Effects fx = { 255 };
+
+    MythPainter::DrawImage(area.x(), area.y(), im, fx);
     im->DownRef();
 }
 
Index: libs/libmythui/mythrender_vdpau.cpp
===================================================================
--- libs/libmythui/mythrender_vdpau.cpp	(revision 26423)
+++ libs/libmythui/mythrender_vdpau.cpp	(working copy)
@@ -617,7 +617,7 @@
     m_outputSurfaces.insert(id, VDPAUOutputSurface(tmp, size, fmt));
     id_lock.unlock();
 
-    DrawBitmap(0, id, NULL, NULL);
+    DrawBitmap(0, id, NULL, NULL, NULL);
     return id;
 }
 
@@ -1308,7 +1308,7 @@
 
 bool MythRenderVDPAU::DrawBitmap(uint id, uint target,
                                  const QRect *src, const QRect *dst,
-                                 int alpha, int red, int green, int blue,
+                                 const Effects *fx, int red, int green, int blue,
                                  bool blend)
 {
     uint bitmap = VDP_INVALID_HANDLE;
@@ -1357,6 +1357,12 @@
         vsrc.y1 = src->y() + src->height();
     }
 
+    int alpha = 255;
+    if (fx)
+    {
+        alpha = fx->alpha;
+    }
+
     VdpColor color;
     bool nullblend = (red == 0 && green == 0 && blue == 0 && alpha == 0);
     if (!nullblend)
Index: libs/libmythui/mythuiwebbrowser.cpp
===================================================================
--- libs/libmythui/mythuiwebbrowser.cpp	(revision 26423)
+++ libs/libmythui/mythuiwebbrowser.cpp	(working copy)
@@ -628,7 +628,7 @@
  *  \copydoc MythUIType::DrawSelf()
  */
 void MythUIWebBrowser::DrawSelf(MythPainter *p, int xoffset, int yoffset,
-                       int alphaMod, QRect clipRegion)
+                       Effects fx, QRect clipRegion)
 {
     if (!m_image || m_image->isNull() || !m_browser || m_browser->hasFocus())
         return;
@@ -636,7 +636,7 @@
     QRect area = m_Area;
     area.translate(xoffset, yoffset);
 
-    p->DrawImage(area.x(), area.y(), m_image, alphaMod);
+    p->DrawImage(area.x(), area.y(), m_image, fx);
 }
 
 /**
Index: libs/libmythui/mythrender_opengl.cpp
===================================================================
--- libs/libmythui/mythrender_opengl.cpp	(revision 26423)
+++ libs/libmythui/mythrender_opengl.cpp	(working copy)
@@ -894,7 +894,7 @@
 }
 
 void MythRenderOpenGL::DrawBitmap(uint tex, uint target, const QRect *src,
-                                  const QRect *dst, uint prog, int alpha,
+                                  const QRect *dst, uint prog, const Effects *fx,
                                   int red, int green, int blue)
 {
     if (tex && !m_textures.contains(tex))
@@ -931,7 +931,7 @@
     BindFramebuffer(target);
     EnableFragmentProgram(prog);
     SetBlend(true);
-    SetColor(red, green, blue, alpha);
+    SetColor(red, green, blue, fx->alpha);
     if (tex)
     {
         EnableTextures(tex);
Index: libs/libmythui/mythuiimage.h
===================================================================
--- libs/libmythui/mythuiimage.h	(revision 26423)
+++ libs/libmythui/mythuiimage.h	(working copy)
@@ -61,7 +61,7 @@
 
   protected:
     virtual void DrawSelf(MythPainter *p, int xoffset, int yoffset,
-                          int alphaMod, QRect clipRect);
+                          Effects fx, QRect clipRect);
 
     void Init(void);
     void Clear(void);
Index: libs/libmythui/mythpainter_qimage.h
===================================================================
--- libs/libmythui/mythpainter_qimage.h	(revision 26423)
+++ libs/libmythui/mythpainter_qimage.h	(working copy)
@@ -33,9 +33,9 @@
     virtual void Clear(QPaintDevice *device, const QRegion &region);
 
     virtual void DrawImage(const QRect &dest, MythImage *im, const QRect &src,
-                           int alpha);
+                           const Effects &fx);
     virtual void DrawText(const QRect &dest, const QString &msg, int flags,
-                          const MythFontProperties &font, int alpha,
+                          const MythFontProperties &font, const Effects &fx,
                           const QRect &boundRect);
     virtual void DrawRect(const QRect &area,
                           bool drawFill, const QColor &fillColor, 
