summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKlaus Schmidinger <vdr@tvdr.de>2014-01-25 14:26:26 +0100
committerKlaus Schmidinger <vdr@tvdr.de>2014-01-25 14:26:26 +0100
commit6bd94489deb08ab5eed2e83cbb1f818295fd9a26 (patch)
tree0b135bfd08efda30b571593653bef4e83de66e71
parentc7316989f5a911796846c15ebdd7f645739fe4ad (diff)
downloadvdr-6bd94489deb08ab5eed2e83cbb1f818295fd9a26.tar.gz
vdr-6bd94489deb08ab5eed2e83cbb1f818295fd9a26.tar.bz2
cFont::CreateFont() now returns a dummy font in case there are no fonts installed
-rw-r--r--HISTORY4
-rw-r--r--font.c23
-rw-r--r--font.h4
3 files changed, 17 insertions, 14 deletions
diff --git a/HISTORY b/HISTORY
index 0be24913..aab6a0f3 100644
--- a/HISTORY
+++ b/HISTORY
@@ -7870,9 +7870,11 @@ Video Disk Recorder Revision History
and also to use the correct directory with --edit (the latter reported by Marko
Mäkelä).
-2014-01-16: Version 2.0.6
+2014-01-25: Version 2.0.6
- Updated 'sources.conf' (thanks to Antti Hartikainen).
+- cFont::CreateFont() now returns a dummy font in case there are no fonts installed.
+ This prevents a crash with the LCARS skin on a system that has no fonts.
- Increased MIN_TS_PACKETS_FOR_FRAME_DETECTOR to 10 in order to be able to record
channels that need more than 5 TS packets for detecting frame borders (reported by
Eike Sauer).
diff --git a/font.c b/font.c
index c6400d4e..91299389 100644
--- a/font.c
+++ b/font.c
@@ -6,7 +6,7 @@
*
* BiDi support by Osama Alrawab <alrawab@hotmail.com> @2008 Tripoli-Libya.
*
- * $Id: font.c 2.13.1.1 2013/04/07 14:54:15 kls Exp $
+ * $Id: font.c 2.13.1.2 2014/01/25 14:25:29 kls Exp $
*/
#include "font.h"
@@ -382,10 +382,13 @@ void cFreetypeFont::DrawText(cPixmap *Pixmap, int x, int y, const char *s, tColo
// A dummy font, in case there are no fonts installed:
class cDummyFont : public cFont {
+private:
+ int height;
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; }
+ cDummyFont(int CharHeight) { height = CharHeight; }
+ virtual int Width(uint c) const { return height; }
+ virtual int Width(const char *s) const { return height; }
+ virtual int Height(void) const { return height; }
virtual void DrawText(cBitmap *Bitmap, int x, int y, const char *s, tColor ColorFg, tColor ColorBg, int Width) const {}
virtual void DrawText(cPixmap *Pixmap, int x, int y, const char *s, tColor ColorFg, tColor ColorBg, int Width) const {};
};
@@ -396,11 +399,8 @@ cFont *cFont::fonts[eDvbFontSize] = { NULL };
void cFont::SetFont(eDvbFont Font, const char *Name, int CharHeight)
{
- cFont *f = CreateFont(Name, constrain(CharHeight, MINFONTSIZE, MAXFONTSIZE));
- if (!f || !f->Height())
- f = new cDummyFont;
delete fonts[Font];
- fonts[Font] = f;
+ fonts[Font] = CreateFont(Name, constrain(CharHeight, MINFONTSIZE, MAXFONTSIZE));
}
const cFont *cFont::GetFont(eDvbFont Font)
@@ -423,9 +423,10 @@ const cFont *cFont::GetFont(eDvbFont Font)
cFont *cFont::CreateFont(const char *Name, int CharHeight, int CharWidth)
{
cString fn = GetFontFileName(Name);
- if (*fn)
- return new cFreetypeFont(fn, CharHeight, CharWidth);
- return NULL;
+ cFont *f = *fn ? new cFreetypeFont(fn, CharHeight, CharWidth) : NULL;
+ if (!f || !f->Height())
+ f = new cDummyFont(CharHeight);
+ return f;
}
bool cFont::GetAvailableFontNames(cStringList *FontNames, bool Monospaced)
diff --git a/font.h b/font.h
index 86bd8b33..02008742 100644
--- a/font.h
+++ b/font.h
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: font.h 2.7 2013/02/17 13:17:42 kls Exp $
+ * $Id: font.h 2.7.1.1 2014/01/25 14:24:51 kls Exp $
*/
#ifndef __FONT_H
@@ -75,7 +75,7 @@ public:
///< default width. Name is of the form "Family:Style", for instance
///< "Verdana:Bold Italic" or "Times New Roman". See GetAvailableFontNames()
///< for how to get a list of all available font names.
- ///< If the requested font can't be created, NULL is returned.
+ ///< If the requested font can't be created, a dummy font is returned.
///< The caller must delete the font when it is no longer needed.
static bool GetAvailableFontNames(cStringList *FontNames, bool Monospaced = false);
///< Queries the font configuration for a list of available font names,