summaryrefslogtreecommitdiff
path: root/osd.c
diff options
context:
space:
mode:
authorKlaus Schmidinger <kls (at) cadsoft (dot) de>2004-06-06 18:00:00 +0200
committerKlaus Schmidinger <kls (at) cadsoft (dot) de>2004-06-06 18:00:00 +0200
commitc281d01c089f4c9410a2756d3bcd99a56f702c86 (patch)
tree8fdb640ba345e60cb3de7816ef4983fb78e829a2 /osd.c
parentb81bf2d1c92e2ac820d2116c66f328869eb627cd (diff)
downloadvdr-patch-lnbsharing-c281d01c089f4c9410a2756d3bcd99a56f702c86.tar.gz
vdr-patch-lnbsharing-c281d01c089f4c9410a2756d3bcd99a56f702c86.tar.bz2
Version 1.3.10vdr-1.3.10
- Fixed some default parameters in 'skincurses'. - Fixed cBitmap::DrawPixel(), which messed with other bitmaps' palettes in case the pixel coordinates were outside this bitmap (thanks to Sascha Volkenandt for reporting this one). - The cBitmap::DrawText() function now doesn't set any background pixels if the given background color is clrTransparent. This allows drawing "transparent" texts (suggested by Sascha Volkenandt). - The cBitmap::SetXpm() function now ignores unused "none" color entries, which some broken graphics tools write into XPM files (suggested by Sascha Volkenandt). - No longer setting lnb voltage if the frontend is not DVB-S (thanks to Marco Schlüßler). - Fixed displaying the current channel when switching via the SVDRP command CHAN (thanks to Jürgen Schmitz for reporting this one). - Fixed missing audio after replaying a DVD (thanks to Marco Schlüßler). - Added a note about the default assignment of the color keys to MANUAL. - Added a note about NPTL ("Native Posix Thread Library") to the INSTALL file (apparently the "fix" in version 1.3.0 didn't really fix this). - Modified 'libsi' to require callers to state the buffer sizes when getting strings in order to avoid buffer overflows (thanks to Philip Lawatsch for debugging a buffer overflow in eit.c).
Diffstat (limited to 'osd.c')
-rw-r--r--osd.c32
1 files changed, 22 insertions, 10 deletions
diff --git a/osd.c b/osd.c
index a63d0e1..ac950ff 100644
--- a/osd.c
+++ b/osd.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: osd.c 1.48 2004/05/28 15:33:22 kls Exp $
+ * $Id: osd.c 1.52 2004/06/05 16:52:51 kls Exp $
*/
#include "osd.h"
@@ -244,7 +244,7 @@ bool cBitmap::LoadXpm(const char *FileName)
return Result;
}
-bool cBitmap::SetXpm(char *Xpm[])
+bool cBitmap::SetXpm(char *Xpm[], bool IgnoreNone)
{
char **p = Xpm;
int w, h, n, c;
@@ -257,10 +257,11 @@ bool cBitmap::SetXpm(char *Xpm[])
return false;
}
int b = 0;
- while (1 << (1 << b) < n)
+ while (1 << (1 << b) < (IgnoreNone ? n - 1 : n))
b++;
SetBpp(1 << b);
SetSize(w, h);
+ int NoneColorIndex = MAXNUMCOLORS;
for (int i = 0; i < n; i++) {
const char *s = *++p;
if (int(strlen(s)) < c) {
@@ -273,14 +274,18 @@ bool cBitmap::SetXpm(char *Xpm[])
return false;
}
s = skipspace(s + 1);
- if (strcasecmp(s, "none") == 0)
+ if (strcasecmp(s, "none") == 0) {
s = "#00000000";
+ NoneColorIndex = i;
+ if (IgnoreNone)
+ continue;
+ }
if (*s != '#') {
esyslog("ERROR: unknown color code in XPM: '%c'", *s);
return false;
}
tColor color = strtoul(++s, NULL, 16) | 0xFF000000;
- SetColor(i, color);
+ SetColor((IgnoreNone && i > NoneColorIndex) ? i - 1 : i, color);
}
for (int y = 0; y < h; y++) {
const char *s = *++p;
@@ -295,13 +300,17 @@ bool cBitmap::SetXpm(char *Xpm[])
return false;
}
if (strncmp(Xpm[i + 1], s, c) == 0) {
- SetIndex(x, y, i);
+ if (i == NoneColorIndex)
+ NoneColorIndex = MAXNUMCOLORS;
+ SetIndex(x, y, (IgnoreNone && i > NoneColorIndex) ? i - 1 : i);
break;
}
}
s += c;
}
}
+ if (NoneColorIndex < MAXNUMCOLORS && !IgnoreNone)
+ return SetXpm(Xpm, true);
return true;
}
@@ -324,7 +333,8 @@ void cBitmap::DrawPixel(int x, int y, tColor Color)
{
x -= x0;
y -= y0;
- SetIndex(x, y, Index(Color));
+ if (0 <= x && x < width && 0 <= y && y < height)
+ SetIndex(x, y, Index(Color));
}
void cBitmap::DrawBitmap(int x, int y, const cBitmap &Bitmap, tColor ColorFg, tColor ColorBg)
@@ -354,7 +364,8 @@ void cBitmap::DrawText(int x, int y, const char *s, tColor ColorFg, tColor Color
int ch = Height ? Height : h;
if (!Intersects(x, y, x + cw - 1, y + ch - 1))
return;
- DrawRectangle(x, y, x + cw - 1, y + ch - 1, ColorBg);
+ if (ColorBg != clrTransparent)
+ DrawRectangle(x, y, x + cw - 1, y + ch - 1, ColorBg);
limit = x + cw - x0;
if (Width) {
if ((Alignment & taLeft) != 0)
@@ -386,7 +397,7 @@ void cBitmap::DrawText(int x, int y, const char *s, tColor ColorFg, tColor Color
x -= x0;
y -= y0;
tIndex fg = Index(ColorFg);
- tIndex bg = Index(ColorBg);
+ tIndex bg = (ColorBg != clrTransparent) ? Index(ColorBg) : 0;
while (s && *s) {
const cFont::tCharData *CharData = Font->CharData(*s++);
if (limit && int(x + CharData->width) > limit)
@@ -395,7 +406,8 @@ void cBitmap::DrawText(int x, int y, const char *s, tColor ColorFg, tColor Color
for (int row = 0; row < h; row++) {
cFont::tPixelData PixelData = CharData->lines[row];
for (int col = CharData->width; col-- > 0; ) {
- SetIndex(x + col, y + row, (PixelData & 1) ? fg : bg);
+ if (ColorBg != clrTransparent || (PixelData & 1))
+ SetIndex(x + col, y + row, (PixelData & 1) ? fg : bg);
PixelData >>= 1;
}
}