summaryrefslogtreecommitdiff
path: root/patches/vdr-1.2.6-256-palette.diff
diff options
context:
space:
mode:
Diffstat (limited to 'patches/vdr-1.2.6-256-palette.diff')
-rw-r--r--patches/vdr-1.2.6-256-palette.diff137
1 files changed, 137 insertions, 0 deletions
diff --git a/patches/vdr-1.2.6-256-palette.diff b/patches/vdr-1.2.6-256-palette.diff
new file mode 100644
index 0000000..1ea1c79
--- /dev/null
+++ b/patches/vdr-1.2.6-256-palette.diff
@@ -0,0 +1,137 @@
+--- 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
+@@ -14,6 +14,7 @@
+ #include "font.h"
+
+ #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;