diff -u vdr-1.2.6/osdbase.c vdr/osdbase.c --- vdr-1.2.6/osdbase.c 2003-08-24 13:38:27.000000000 +0200 +++ vdr/osdbase.c 2004-01-13 09:33:21.000000000 +0100 @@ -104,6 +104,12 @@ } } +void cPalette::Replace(const cPalette &Palette) +{ + for (int i = 0; i < Palette.numColors; i++) + SetColor(i, Palette.color[i]); +} + // --- cBitmap --------------------------------------------------------------- cBitmap::cBitmap(int Width, int Height, int Bpp, bool ClearWithBackground) @@ -220,6 +226,17 @@ } } +void cBitmap::SetBitmap256(int x, int y, const cBitmap &Bitmap) +{ + if (bitmap && Bitmap.bitmap) { + Replace(Bitmap); + for (int ix = 0; ix < Bitmap.width; ix++) { + for (int iy = 0; iy < Bitmap.height; iy++) + SetIndex(x + ix, y + iy, Bitmap.bitmap[Bitmap.width * iy + ix]); + } + } +} + int cBitmap::Width(unsigned char c) { return font ? font->Width(c) : -1; @@ -317,7 +334,10 @@ x -= x0; y -= y0; } - cBitmap::SetBitmap(x, y, Bitmap); + if (bpp == 8) + cBitmap::SetBitmap256(x, y, Bitmap); + else + cBitmap::SetBitmap(x, y, Bitmap); } void cWindow::Text(int x, int y, const char *s, eDvbColor ColorFg, eDvbColor ColorBg) diff -u vdr-1.2.6/osdbase.h vdr/osdbase.h --- vdr-1.2.6/osdbase.h 2002-09-08 16:12:41.000000000 +0200 +++ vdr/osdbase.h 2004-01-13 09:22:24.000000000 +0100 @@ -14,6 +14,7 @@ #include "font.h" #define MAXNUMCOLORS 256 +#define VDR_OSDPIP_PATCHED enum eDvbColor { #ifdef DEBUG_OSD @@ -69,7 +70,8 @@ // stored yet, NumColors will be set to 0 and the function will // return NULL. void Take(const cPalette &Palette, tIndexes *Indexes = NULL); - }; + void Replace(const cPalette &Palette); +}; class cBitmap : public cPalette { private: @@ -89,6 +91,7 @@ void SetIndex(int x, int y, char Index); void SetPixel(int x, int y, eDvbColor Color); void SetBitmap(int x, int y, const cBitmap &Bitmap); + void SetBitmap256(int x, int y, const cBitmap &Bitmap); int Width(void) { return width; } int Width(unsigned char c); int Width(const char *s);