diff --git a/CONTRIBUTORS b/CONTRIBUTORS index df80aa46..aa4a0d10 100644 --- a/CONTRIBUTORS +++ b/CONTRIBUTORS @@ -925,3 +925,6 @@ Christian Tramnitz Jens Rosenboom for fixing the SVDRP command 'STAT DISK' to avoid a 'division by 0' in case the disk is full + +Andreas Regel + for fixing handling bitmap indexes for 256 color mode diff --git a/HISTORY b/HISTORY index 0eccb5c2..d6a8284a 100644 --- a/HISTORY +++ b/HISTORY @@ -2633,3 +2633,4 @@ Video Disk Recorder Revision History - Fixed handling CA ids (was broken in 1.3.4). - Fixed the SVDRP command 'STAT DISK' to avoid a 'division by 0' in case the disk is full (thanks to Jens Rosenboom). +- Fixed handling bitmap indexes for 256 color mode (thanks to Andreas Regel). diff --git a/osdbase.c b/osdbase.c index 2ba4de85..71794068 100644 --- a/osdbase.c +++ b/osdbase.c @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: osdbase.c 1.11 2003/10/19 14:32:32 kls Exp $ + * $Id: osdbase.c 1.12 2004/01/31 10:31:13 kls Exp $ */ #include "osdbase.h" @@ -116,7 +116,7 @@ cBitmap::cBitmap(int Width, int Height, int Bpp, bool ClearWithBackground) fontType = fontOsd; font = NULL; if (width > 0 && height > 0) { - bitmap = MALLOC(char, width * height); + bitmap = MALLOC(u_char, width * height); if (bitmap) { Clean(); memset(bitmap, 0x00, width * height); @@ -186,7 +186,7 @@ void cBitmap::Clean(void) dirtyY2 = -1; } -void cBitmap::SetIndex(int x, int y, char Index) +void cBitmap::SetIndex(int x, int y, u_char Index) { if (bitmap) { if (0 <= x && x < width && 0 <= y && y < height) { @@ -231,8 +231,8 @@ int cBitmap::Width(const char *s) void cBitmap::Text(int x, int y, const char *s, eDvbColor ColorFg, eDvbColor ColorBg) { if (bitmap) { - char fg = Index(ColorFg); - char bg = Index(ColorBg); + u_char fg = Index(ColorFg); + u_char bg = Index(ColorBg); int h = font->Height(s); while (s && *s) { const cFont::tCharData *CharData = font->CharData(*s++); @@ -253,7 +253,7 @@ void cBitmap::Text(int x, int y, const char *s, eDvbColor ColorFg, eDvbColor Col void cBitmap::Fill(int x1, int y1, int x2, int y2, eDvbColor Color) { if (bitmap) { - char c = Index(Color); + u_char c = Index(Color); for (int y = y1; y <= y2; y++) for (int x = x1; x <= x2; x++) SetIndex(x, y, c); @@ -267,7 +267,7 @@ void cBitmap::Clear(void) Fill(0, 0, width - 1, height - 1, clrBackground); } -const char *cBitmap::Data(int x, int y) +const u_char *cBitmap::Data(int x, int y) { return &bitmap[y * width + x]; } @@ -327,7 +327,7 @@ void cWindow::Text(int x, int y, const char *s, eDvbColor ColorFg, eDvbColor Col cBitmap::Text(x, y, s, ColorFg, ColorBg); } -const char *cWindow::Data(int x, int y) +const u_char *cWindow::Data(int x, int y) { return cBitmap::Data(x, y); } diff --git a/osdbase.h b/osdbase.h index a77d4f96..3277d820 100644 --- a/osdbase.h +++ b/osdbase.h @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: osdbase.h 1.8 2004/01/04 15:19:20 kls Exp $ + * $Id: osdbase.h 1.9 2004/01/31 10:28:49 kls Exp $ */ #ifndef __OSDBASE_H @@ -49,7 +49,7 @@ private: bool fetched[MAXNUMCOLORS]; bool full; protected: - typedef unsigned char tIndexes[MAXNUMCOLORS]; + typedef u_char tIndexes[MAXNUMCOLORS]; public: cPalette(int Bpp); int Index(eDvbColor Color); @@ -75,7 +75,7 @@ class cBitmap : public cPalette { private: const cFont *font; eDvbFont fontType; - char *bitmap; + u_char *bitmap; bool clearWithBackground; protected: int width, height; @@ -86,7 +86,7 @@ public: 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, u_char Index); void SetPixel(int x, int y, eDvbColor Color); void SetBitmap(int x, int y, const cBitmap &Bitmap); int Width(void) { return width; } @@ -97,7 +97,7 @@ public: 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 u_char *Data(int x, int y); }; #define MAXNUMWINDOWS 7 // OSD windows are counted 1...7 @@ -122,7 +122,7 @@ public: 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 u_char *Data(int x, int y); }; typedef int tWindowHandle;