X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/cdb99d1b59657be0c907836e1a2110939a00e257..7e6f5cba9756abef94d02d2f24601b1793f24f4e:/lib/gdi/font.cpp diff --git a/lib/gdi/font.cpp b/lib/gdi/font.cpp index 6d445ed6..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]; @@ -843,9 +848,6 @@ void eTextPara::realign(int dir) // der code hier ist ein wenig merkwuerdig. num++; } - if (!num) // line mit nur einem space - continue; - switch (dir) { case dirRight: