--- vdrold/osdbase.c 2004-06-13 13:58:22.000000000 +0200 +++ vdr-1.2.6/osdbase.c 2004-06-13 14:01:26.000000000 +0200 @@ -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) @@ -116,7 +122,7 @@ fontType = fontOsd; font = NULL; if (width > 0 && height > 0) { - bitmap = MALLOC(char, width * height); + bitmap = MALLOC(unsigned char, width * height); if (bitmap) { Clean(); memset(bitmap, 0x00, width * height); @@ -188,7 +194,7 @@ dirtyY2 = -1; } -void cBitmap::SetIndex(int x, int y, char Index) +void cBitmap::SetIndex(int x, int y, unsigned char Index) { if (bitmap) { if (0 <= x && x < width && 0 <= y && y < height) { @@ -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; @@ -269,7 +286,7 @@ Fill(0, 0, width - 1, height - 1, clrBackground); } -const char *cBitmap::Data(int x, int y) +const unsigned char *cBitmap::Data(int x, int y) { return &bitmap[y * width + x]; } @@ -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) @@ -329,7 +349,7 @@ cBitmap::Text(x, y, s, ColorFg, ColorBg); } -const char *cWindow::Data(int x, int y) +const unsigned char *cWindow::Data(int x, int y) { return cBitmap::Data(x, y); } --- vdrold/osdbase.h 2004-06-13 14:05:47.000000000 +0200 +++ vdr-1.2.6/osdbase.h 2004-06-13 13:59:45.000000000 +0200 @@ -13,7 +13,8 @@ #include #include "font.h" -#define MAXNUMCOLORS 16 +#define MAXNUMCOLORS 256 +#define VDR_OSDPIP_PATCHED enum eDvbColor { #ifdef DEBUG_OSD @@ -69,13 +70,14 @@ // 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: cFont *font; eDvbFont fontType; - char *bitmap; + unsigned char *bitmap; bool clearWithBackground; protected: int width, height; @@ -86,9 +88,10 @@ bool ClearWithBackground(void) { return clearWithBackground; } eDvbFont SetFont(eDvbFont Font); bool Dirty(int &x1, int &y1, int &x2, int &y2); - void SetIndex(int x, int y, char Index); + void SetIndex(int x, int y, unsigned 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); @@ -97,7 +100,7 @@ void Fill(int x1, int y1, int x2, int y2, eDvbColor Color); void Clean(void); void Clear(void); - const char *Data(int x, int y); + const unsigned char *Data(int x, int y); }; #define MAXNUMWINDOWS 7 // OSD windows are counted 1...7 @@ -122,7 +125,7 @@ void Fill(int x1, int y1, int x2, int y2, eDvbColor Color); void SetBitmap(int x, int y, const cBitmap &Bitmap); void Text(int x, int y, const char *s, eDvbColor ColorFg = clrWhite, eDvbColor ColorBg = clrBackground); - const char *Data(int x, int y); + const unsigned char *Data(int x, int y); }; typedef int tWindowHandle;