From 3c68ef28d0518579c4269c3545699c623d8df47b Mon Sep 17 00:00:00 2001 From: Klaus Schmidinger Date: Sun, 17 Jun 2007 11:47:18 +0200 Subject: [PATCH] Using dummy font if no fonts are installed --- HISTORY | 2 ++ font.c | 25 ++++++++++++++++++++++--- vdr.c | 8 +++++++- 3 files changed, 31 insertions(+), 4 deletions(-) diff --git a/HISTORY b/HISTORY index 33795add..30adc15e 100644 --- a/HISTORY +++ b/HISTORY @@ -5244,3 +5244,5 @@ Video Disk Recorder Revision History - Replaced strn0cpy() with Utf8Strn0Cpy() where necessary. - Now using 'fontconfig' to determine which fonts to use (thanks to Anssi Hannula for code and hints on how to do this). +- If no fonts are installed, VDR now uses a dummy font that doesn't actually draw + any text, and logs an error message. diff --git a/font.c b/font.c index f0722744..f2933e64 100644 --- a/font.c +++ b/font.c @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: font.c 1.16 2007/06/17 11:03:33 kls Exp $ + * $Id: font.c 1.17 2007/06/17 11:46:25 kls Exp $ */ #include "font.h" @@ -287,14 +287,33 @@ void cFreetypeFont::DrawText(cBitmap *Bitmap, int x, int y, const char *s, tColo } } +// --- cDummyFont ------------------------------------------------------------ + +// A dummy font, in case there are no fonts installed: + +class cDummyFont : public cFont { +public: + virtual int Width(uint c) const { return 10; } + virtual int Width(const char *s) const { return 50; } + virtual int Height(void) const { return 20; } + virtual void DrawText(cBitmap *Bitmap, int x, int y, const char *s, tColor ColorFg, tColor ColorBg, int Width) const {} + }; + // --- cFont ----------------------------------------------------------------- cFont *cFont::fonts[eDvbFontSize] = { NULL }; void cFont::SetFont(eDvbFont Font, const char *Name, int CharHeight) { - delete fonts[Font]; - fonts[Font] = new cFreetypeFont(GetFontFileName(Name), CharHeight); + cString fn = GetFontFileName(Name); + if (*fn) { + delete fonts[Font]; + fonts[Font] = new cFreetypeFont(fn, CharHeight); + } + if (!fonts[Font] || !fonts[Font]->Height()) { + delete fonts[Font]; + fonts[Font] = new cDummyFont; + } } const cFont *cFont::GetFont(eDvbFont Font) diff --git a/vdr.c b/vdr.c index f3218eb2..e28c7281 100644 --- a/vdr.c +++ b/vdr.c @@ -22,7 +22,7 @@ * * The project's page is at http://www.cadsoft.de/vdr * - * $Id: vdr.c 1.292 2007/06/15 13:20:34 kls Exp $ + * $Id: vdr.c 1.293 2007/06/17 11:23:08 kls Exp $ */ #include @@ -550,6 +550,12 @@ int main(int argc, char *argv[]) )) EXIT(2); + if (!*cFont::GetFontFileName(Setup.FontOsd)) { + const char *msg = "no fonts available - OSD will not show any text!"; + fprintf(stderr, "vdr: %s\n", msg); + esyslog("ERROR: %s", msg); + } + // Recordings: Recordings.Update();