aboutsummaryrefslogtreecommitdiff
path: root/lib/gdi/font.cpp
diff options
context:
space:
mode:
authorFelix Domke <tmbinc@elitedvb.net>2008-01-24 21:55:26 +0000
committerFelix Domke <tmbinc@elitedvb.net>2008-01-24 21:55:26 +0000
commita3a94a50132256f3a6524efd6dba0e52e4774087 (patch)
treeb2c0f87fc56f867f437178b99a20b4bdfa17a494 /lib/gdi/font.cpp
parentd3f23bc82dcf800c265938a6bc7d07f5c61e924a (diff)
downloadenigma2-a3a94a50132256f3a6524efd6dba0e52e4774087.tar.gz
enigma2-a3a94a50132256f3a6524efd6dba0e52e4774087.zip
you don't want to know... (don't rely on clut in 32bit modes)
Diffstat (limited to 'lib/gdi/font.cpp')
-rw-r--r--lib/gdi/font.cpp27
1 files changed, 16 insertions, 11 deletions
diff --git a/lib/gdi/font.cpp b/lib/gdi/font.cpp
index ce1b3c4b..c438f89b 100644
--- a/lib/gdi/font.cpp
+++ b/lib/gdi/font.cpp
@@ -693,18 +693,23 @@ void eTextPara::blit(gDC &dc, const ePoint &offset, const gRGB &background, cons
} else if (surface->bpp == 32)
{
opcode=3;
- if (surface->clut.data)
- {
- lookup8=getColor(surface->clut, background, foreground).lookup;
- for (int i=0; i<16; ++i)
- lookup32_normal[i]=((surface->clut.data[lookup8[i]].a<<24)|
- (surface->clut.data[lookup8[i]].r<<16)|
- (surface->clut.data[lookup8[i]].g<<8)|
- (surface->clut.data[lookup8[i]].b))^0xFF000000;
- } else
+
+ for (int i=0; i<16; ++i)
{
- for (int i=0; i<16; ++i)
- lookup32_normal[i]=(0x010101*i)|0xFF000000;
+#define BLEND(y, x, a) (y + (((x-y) * a)>>8))
+
+ unsigned char da = background.a, dr = background.r, dg = background.g, db = background.b;
+ int sa = i * 16;
+ if (sa < 256)
+ {
+ da = BLEND(background.a, foreground.a, sa) & 0xFF;
+ dr = BLEND(background.r, foreground.r, sa) & 0xFF;
+ dg = BLEND(background.g, foreground.g, sa) & 0xFF;
+ db = BLEND(background.b, foreground.b, sa) & 0xFF;
+ }
+#undef BLEND
+ da ^= 0xFF;
+ lookup32_normal[i]=db | (dg << 8) | (dr << 16) | (da << 24);;
}
for (int i=0; i<16; ++i)
lookup32_invert[i]=lookup32_normal[i^0xF];