mirror of
https://github.com/vdr-projects/vdr.git
synced 2025-03-01 10:50:46 +00:00
Version 1.5.4
- Increased APIVERSION (forgot to do that in 1.5.2 and 1.5.3). - Fixed a crash in i18n character set conversion (thanks to Alexander Riedel, Jose Alberto Reguero and Christian Wieninger for patches that cured part of the problem). - Adjusted the 'skincurses' plugin to UTF-8 handling. - Using nl_langinfo(CODESET) to determine the local codeset to use (thanks to Thomas Günther). The codeset names in 'libsi/si.c' have been changed to the canonical spelling with '-' (thanks to Ludwig Nussel for pointing this out). - Modified handling invalid characters in VFAT mode. - 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. - The new function cFont::CreateFont() can be used by plugins to create and use fonts of their own, independent of VDR's standard fonts. - Updated the Finnish OSD texts (thanks to Rolf Ahrenberg). - Changed the parameter "OSD font" to "Default font" in "Setup/OSD" (suggested by Rolf Ahrenberg). - Fixed handling detached processes in SystemExec() (thanks to Udo Richter). - The info.vdr file now also stores the name of the channel, and the new function cRecordingInfo::ChannelName() returns this information if available (based on a patch from Alexander Hans). - The new function cOsd::SetOsdPosition() can be used to dynamically change the position and size of the OSD (based on a request from Christoph Haubrich). Plugins that implement skins should no longer use Setup.OSDWidth etc. directly, but should rather use cOsd::OsdWidth() etc. instead. Currently a change to the OSD position will only apply to newly opened OSDs.
This commit is contained in:
parent
b9b9ace9a8
commit
b1e4da3be6
12
CONTRIBUTORS
12
CONTRIBUTORS
@ -886,6 +886,7 @@ Ludwig Nussel <ludwig.nussel@web.de>
|
|||||||
for removing the LOCK_THREAD from the LIRC thread
|
for removing the LOCK_THREAD from the LIRC thread
|
||||||
for making the Makefile patch friendlier
|
for making the Makefile patch friendlier
|
||||||
for a patch that was used for implementing setting the user id
|
for a patch that was used for implementing setting the user id
|
||||||
|
for pointing out that the canonical spelling of codesets is with '-'
|
||||||
|
|
||||||
Thomas Koch <tom@harhar.net>
|
Thomas Koch <tom@harhar.net>
|
||||||
for his support in keeping the Premiere World channels up to date in 'channels.conf'
|
for his support in keeping the Premiere World channels up to date in 'channels.conf'
|
||||||
@ -1012,6 +1013,7 @@ Rolf Ahrenberg <rahrenbe@cc.hut.fi>
|
|||||||
for adding --remove-destination to the 'cp' command for binaries in the Makefiles of
|
for adding --remove-destination to the 'cp' command for binaries in the Makefiles of
|
||||||
the plugins
|
the plugins
|
||||||
for increasing the maximum number of DVB devices to 8
|
for increasing the maximum number of DVB devices to 8
|
||||||
|
for suggesting to change the parameter "OSD font" to "Default font" in "Setup/OSD"
|
||||||
|
|
||||||
Ralf Klueber <ralf.klueber@vodafone.com>
|
Ralf Klueber <ralf.klueber@vodafone.com>
|
||||||
for reporting a bug in cutting a recording if there is only a single editing mark
|
for reporting a bug in cutting a recording if there is only a single editing mark
|
||||||
@ -1495,6 +1497,7 @@ Udo Richter <udo_richter@gmx.de>
|
|||||||
up at a particular time
|
up at a particular time
|
||||||
for making the HUP signal force a restart of VDR
|
for making the HUP signal force a restart of VDR
|
||||||
for fixing a race condition with signal handlers at program exit
|
for fixing a race condition with signal handlers at program exit
|
||||||
|
for fixing handling detached processes in SystemExec()
|
||||||
|
|
||||||
Sven Kreiensen <svenk@kammer.uni-hannover.de>
|
Sven Kreiensen <svenk@kammer.uni-hannover.de>
|
||||||
for his help in keeping 'channels.conf.terr' up to date
|
for his help in keeping 'channels.conf.terr' up to date
|
||||||
@ -1739,6 +1742,7 @@ Thomas G
|
|||||||
for suggesting to extend the version number reported with the '-V' option to also
|
for suggesting to extend the version number reported with the '-V' option to also
|
||||||
show the current APIVERSION
|
show the current APIVERSION
|
||||||
for fixing i18n characters for the Hungarian texts
|
for fixing i18n characters for the Hungarian texts
|
||||||
|
for implementing using nl_langinfo(CODESET) to determine the local codeset to use
|
||||||
|
|
||||||
David Woodhouse <dwmw2@infradead.org>
|
David Woodhouse <dwmw2@infradead.org>
|
||||||
for his help in replacing the get/put_unaligned() macros from asm/unaligned.h with
|
for his help in replacing the get/put_unaligned() macros from asm/unaligned.h with
|
||||||
@ -1841,6 +1845,7 @@ Christian Wieninger <cwieninger@gmx.de>
|
|||||||
from the "Schedule" menu in case it starts withing the next two minutes
|
from the "Schedule" menu in case it starts withing the next two minutes
|
||||||
for reporting a problem with a format string in recording.c on 64bit systems
|
for reporting a problem with a format string in recording.c on 64bit systems
|
||||||
for reporting a problem with the device selection in case of timer conflicts
|
for reporting a problem with the device selection in case of timer conflicts
|
||||||
|
for a patch that fixed part of a crash in i18n character set conversion
|
||||||
|
|
||||||
Thiemo Gehrke <tgehrke@reel-multimedia.com>
|
Thiemo Gehrke <tgehrke@reel-multimedia.com>
|
||||||
for suggesting to add a setup option to turn off the automatic timeout of the
|
for suggesting to add a setup option to turn off the automatic timeout of the
|
||||||
@ -1921,6 +1926,7 @@ Alexander Hans <cleditor@arcor.de>
|
|||||||
to be drawn with a transparent background
|
to be drawn with a transparent background
|
||||||
for reporting that the "'1' for encrypted radio channels" part in the description
|
for reporting that the "'1' for encrypted radio channels" part in the description
|
||||||
of the VPID in vdr.5 is obsolete
|
of the VPID in vdr.5 is obsolete
|
||||||
|
for a patch that was used to implement storing the channel name in info.vdr
|
||||||
|
|
||||||
Daniel Karsubka <dkar@gmx.de>
|
Daniel Karsubka <dkar@gmx.de>
|
||||||
for suggesting to write the epg.data file when VDR exits
|
for suggesting to write the epg.data file when VDR exits
|
||||||
@ -1947,6 +1953,7 @@ Christoph Haubrich <christoph1.haubrich@arcor.de>
|
|||||||
for reporting that the log message "deleting plugin: ..." is irritating when
|
for reporting that the log message "deleting plugin: ..." is irritating when
|
||||||
calling "vdr --help"
|
calling "vdr --help"
|
||||||
for fixing cDevice::ToggleMute()
|
for fixing cDevice::ToggleMute()
|
||||||
|
for suggestions that led to implementing cOsd::SetOsdPosition() etc.
|
||||||
|
|
||||||
Pekka Mauno <pekka.mauno@iki.fi>
|
Pekka Mauno <pekka.mauno@iki.fi>
|
||||||
for fixing cSchedule::GetFollowingEvent() in case there is currently no present
|
for fixing cSchedule::GetFollowingEvent() in case there is currently no present
|
||||||
@ -2021,6 +2028,7 @@ Anssi Hannula <anssi.hannula@gmail.com>
|
|||||||
for improving handling Transfer Mode devices when selecting a device to receive
|
for improving handling Transfer Mode devices when selecting a device to receive
|
||||||
for fixing handling frequencies in NitFilter::Process()
|
for fixing handling frequencies in NitFilter::Process()
|
||||||
for making non-primary devices in Transfer mode be also used for recording
|
for making non-primary devices in Transfer mode be also used for recording
|
||||||
|
for code and hints on how to use 'fontconfig' to determine which fonts to use
|
||||||
|
|
||||||
Antti Hartikainen <ami+vdr@ah.fi>
|
Antti Hartikainen <ami+vdr@ah.fi>
|
||||||
for updating 'S13E' in 'sources.conf'
|
for updating 'S13E' in 'sources.conf'
|
||||||
@ -2087,3 +2095,7 @@ Krzysztof Parma <krzycho@zoz.wodzislaw.pl>
|
|||||||
Alexander Riedel <alexander-riedel@t-online.de>
|
Alexander Riedel <alexander-riedel@t-online.de>
|
||||||
for a patch that was used as a base to implement support for Freetype fonts and
|
for a patch that was used as a base to implement support for Freetype fonts and
|
||||||
UTF-8 handling
|
UTF-8 handling
|
||||||
|
for a patch that fixed part of a crash in i18n character set conversion
|
||||||
|
|
||||||
|
Jose Alberto Reguero <jareguero@telefonica.net>
|
||||||
|
for a patch that fixed part of a crash in i18n character set conversion
|
||||||
|
31
HISTORY
31
HISTORY
@ -5229,3 +5229,34 @@ Video Disk Recorder Revision History
|
|||||||
- Improved editing strings that are too long to fit into the editable area.
|
- Improved editing strings that are too long to fit into the editable area.
|
||||||
- Changes to the OSD settings in the "Setup/OSD" menu now immediately take effect
|
- Changes to the OSD settings in the "Setup/OSD" menu now immediately take effect
|
||||||
when the "Ok" key is pressed.
|
when the "Ok" key is pressed.
|
||||||
|
|
||||||
|
2007-06-17: Version 1.5.4
|
||||||
|
|
||||||
|
- Increased APIVERSION (forgot to do that in 1.5.2 and 1.5.3).
|
||||||
|
- Fixed a crash in i18n character set conversion (thanks to Alexander Riedel,
|
||||||
|
Jose Alberto Reguero and Christian Wieninger for patches that cured part of
|
||||||
|
the problem).
|
||||||
|
- Adjusted the 'skincurses' plugin to UTF-8 handling.
|
||||||
|
- Using nl_langinfo(CODESET) to determine the local codeset to use (thanks to
|
||||||
|
Thomas Günther). The codeset names in 'libsi/si.c' have been changed to the
|
||||||
|
canonical spelling with '-' (thanks to Ludwig Nussel for pointing this out).
|
||||||
|
- Modified handling invalid characters in VFAT mode.
|
||||||
|
- 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.
|
||||||
|
- The new function cFont::CreateFont() can be used by plugins to create and use
|
||||||
|
fonts of their own, independent of VDR's standard fonts.
|
||||||
|
- Updated the Finnish OSD texts (thanks to Rolf Ahrenberg).
|
||||||
|
- Changed the parameter "OSD font" to "Default font" in "Setup/OSD" (suggested
|
||||||
|
by Rolf Ahrenberg).
|
||||||
|
- Fixed handling detached processes in SystemExec() (thanks to Udo Richter).
|
||||||
|
- The info.vdr file now also stores the name of the channel, and the new function
|
||||||
|
cRecordingInfo::ChannelName() returns this information if available (based on
|
||||||
|
a patch from Alexander Hans).
|
||||||
|
- The new function cOsd::SetOsdPosition() can be used to dynamically change the
|
||||||
|
position and size of the OSD (based on a request from Christoph Haubrich).
|
||||||
|
Plugins that implement skins should no longer use Setup.OSDWidth etc. directly,
|
||||||
|
but should rather use cOsd::OsdWidth() etc. instead.
|
||||||
|
Currently a change to the OSD position will only apply to newly opened OSDs.
|
||||||
|
4
INSTALL
4
INSTALL
@ -22,6 +22,7 @@ to work properly.
|
|||||||
You will also need to install the following libraries, as well as their
|
You will also need to install the following libraries, as well as their
|
||||||
"devel" packages to get the necessary header files for compiling VDR:
|
"devel" packages to get the necessary header files for compiling VDR:
|
||||||
|
|
||||||
|
fontconfig
|
||||||
freetype2
|
freetype2
|
||||||
libcap
|
libcap
|
||||||
libjpeg
|
libjpeg
|
||||||
@ -29,9 +30,6 @@ You will also need to install the following libraries, as well as their
|
|||||||
If the "capability" module is not compiled into your kernel, you may
|
If the "capability" module is not compiled into your kernel, you may
|
||||||
need to do "modprobe capability" before running VDR.
|
need to do "modprobe capability" before running VDR.
|
||||||
|
|
||||||
When running VDR, the Freetype fonts must be installed in the directory
|
|
||||||
/usr/share/fonts/truetype.
|
|
||||||
|
|
||||||
After extracting the package, change into the VDR directory
|
After extracting the package, change into the VDR directory
|
||||||
and type 'make'. This should produce an executable file
|
and type 'make'. This should produce an executable file
|
||||||
named 'vdr', which can be run after the DVB driver has been
|
named 'vdr', which can be run after the DVB driver has been
|
||||||
|
8
MANUAL
8
MANUAL
@ -509,10 +509,10 @@ Version 1.4
|
|||||||
utilize these. If either of these conditions is not met,
|
utilize these. If either of these conditions is not met,
|
||||||
rendering will be done without anti-aliasing.
|
rendering will be done without anti-aliasing.
|
||||||
|
|
||||||
OSD font name = arialbd.ttf
|
Default font = Sans Serif:Bold
|
||||||
Small font name = arial.ttf
|
Small font = Sans Serif
|
||||||
Fixed font name = courbd.ttf
|
Fixed font = Courier:Bold
|
||||||
The file names of the various fonts to use.
|
The names of the various fonts to use.
|
||||||
|
|
||||||
OSD font size = 22
|
OSD font size = 22
|
||||||
Small font size = 18
|
Small font size = 18
|
||||||
|
4
Makefile
4
Makefile
@ -4,7 +4,7 @@
|
|||||||
# See the main source file 'vdr.c' for copyright information and
|
# See the main source file 'vdr.c' for copyright information and
|
||||||
# how to reach the author.
|
# how to reach the author.
|
||||||
#
|
#
|
||||||
# $Id: Makefile 1.100 2007/05/28 11:22:42 kls Exp $
|
# $Id: Makefile 1.101 2007/06/16 10:48:59 kls Exp $
|
||||||
|
|
||||||
.DELETE_ON_ERROR:
|
.DELETE_ON_ERROR:
|
||||||
|
|
||||||
@ -17,7 +17,7 @@ CXXFLAGS ?= -g -O2 -Wall -Woverloaded-virtual
|
|||||||
LSIDIR = ./libsi
|
LSIDIR = ./libsi
|
||||||
MANDIR = /usr/local/man
|
MANDIR = /usr/local/man
|
||||||
BINDIR = /usr/local/bin
|
BINDIR = /usr/local/bin
|
||||||
LIBS = -ljpeg -lpthread -ldl -lcap -lfreetype
|
LIBS = -ljpeg -lpthread -ldl -lcap -lfreetype -lfontconfig
|
||||||
INCLUDES = -I/usr/include/freetype2
|
INCLUDES = -I/usr/include/freetype2
|
||||||
|
|
||||||
PLUGINDIR= ./PLUGINS
|
PLUGINDIR= ./PLUGINS
|
||||||
|
@ -39,3 +39,7 @@ VDR Plugin 'skincurses' Revision History
|
|||||||
2006-09-10: Version 0.0.8
|
2006-09-10: Version 0.0.8
|
||||||
|
|
||||||
- The size of the OSD is now adjusted to the size of the console window.
|
- The size of the OSD is now adjusted to the size of the console window.
|
||||||
|
|
||||||
|
2007-06-15: Version 0.1.0
|
||||||
|
|
||||||
|
- Implemented UTF-8 handling.
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
#
|
#
|
||||||
# Makefile for a Video Disk Recorder plugin
|
# Makefile for a Video Disk Recorder plugin
|
||||||
#
|
#
|
||||||
# $Id: Makefile 1.7 2006/09/09 12:38:35 kls Exp $
|
# $Id: Makefile 1.8 2007/06/10 16:19:08 kls Exp $
|
||||||
|
|
||||||
# The official name of this plugin.
|
# The official name of this plugin.
|
||||||
# This name will be used in the '-P...' option of VDR to load the plugin.
|
# This name will be used in the '-P...' option of VDR to load the plugin.
|
||||||
@ -66,7 +66,7 @@ $(DEPFILE): Makefile
|
|||||||
all: libvdr-$(PLUGIN).so
|
all: libvdr-$(PLUGIN).so
|
||||||
|
|
||||||
libvdr-$(PLUGIN).so: $(OBJS)
|
libvdr-$(PLUGIN).so: $(OBJS)
|
||||||
$(CXX) $(CXXFLAGS) -shared $(OBJS) -lncurses -o $@
|
$(CXX) $(CXXFLAGS) -shared $(OBJS) -lncursesw -o $@
|
||||||
@cp --remove-destination $@ $(LIBDIR)/$@.$(APIVERSION)
|
@cp --remove-destination $@ $(LIBDIR)/$@.$(APIVERSION)
|
||||||
|
|
||||||
dist: clean
|
dist: clean
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
*
|
*
|
||||||
* See the README file for copyright information and how to reach the author.
|
* See the README file for copyright information and how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: skincurses.c 1.11 2006/09/10 14:23:55 kls Exp $
|
* $Id: skincurses.c 1.13 2007/06/16 09:05:04 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <ncurses.h>
|
#include <ncurses.h>
|
||||||
@ -11,7 +11,7 @@
|
|||||||
#include <vdr/plugin.h>
|
#include <vdr/plugin.h>
|
||||||
#include <vdr/skins.h>
|
#include <vdr/skins.h>
|
||||||
|
|
||||||
static const char *VERSION = "0.0.8";
|
static const char *VERSION = "0.1.0";
|
||||||
static const char *DESCRIPTION = "A text only skin";
|
static const char *DESCRIPTION = "A text only skin";
|
||||||
static const char *MAINMENUENTRY = NULL;
|
static const char *MAINMENUENTRY = NULL;
|
||||||
|
|
||||||
@ -19,12 +19,10 @@ static const char *MAINMENUENTRY = NULL;
|
|||||||
|
|
||||||
class cCursesFont : public cFont {
|
class cCursesFont : public cFont {
|
||||||
public:
|
public:
|
||||||
cCursesFont(void): cFont(NULL) {}
|
virtual int Width(uint c) const { return 1; }
|
||||||
virtual int Width(unsigned char c) const { return 1; }
|
virtual int Width(const char *s) const { return s ? Utf8StrLen(s) : 0; }
|
||||||
virtual int Width(const char *s) const { return s ? strlen(s) : 0; }
|
|
||||||
virtual int Height(unsigned char c) const { return 1; }
|
|
||||||
virtual int Height(const char *s) const { return 1; }
|
|
||||||
virtual int Height(void) const { return 1; }
|
virtual int Height(void) const { return 1; }
|
||||||
|
virtual void DrawText(cBitmap *Bitmap, int x, int y, const char *s, tColor ColorFg, tColor ColorBg, int Width) const {}
|
||||||
};
|
};
|
||||||
|
|
||||||
static const cCursesFont Font;
|
static const cCursesFont Font;
|
||||||
@ -135,6 +133,8 @@ void cCursesOsd::RestoreRegion(void)
|
|||||||
|
|
||||||
void cCursesOsd::DrawText(int x, int y, const char *s, tColor ColorFg, tColor ColorBg, const cFont *Font, int Width, int Height, int Alignment)
|
void cCursesOsd::DrawText(int x, int y, const char *s, tColor ColorFg, tColor ColorBg, const cFont *Font, int Width, int Height, int Alignment)
|
||||||
{
|
{
|
||||||
|
if (!s)
|
||||||
|
return;
|
||||||
int w = Font->Width(s);
|
int w = Font->Width(s);
|
||||||
int h = Font->Height();
|
int h = Font->Height();
|
||||||
if (Width || Height) {
|
if (Width || Height) {
|
||||||
@ -253,7 +253,7 @@ void cSkinCursesDisplayChannel::Flush(void)
|
|||||||
{
|
{
|
||||||
if (!message) {
|
if (!message) {
|
||||||
cString date = DayDateTime();
|
cString date = DayDateTime();
|
||||||
osd->DrawText(OsdWidth - strlen(date), 0, date, clrWhite, clrBackground, &Font);
|
osd->DrawText(OsdWidth - Utf8StrLen(date), 0, date, clrWhite, clrBackground, &Font);
|
||||||
}
|
}
|
||||||
osd->Flush();
|
osd->Flush();
|
||||||
}
|
}
|
||||||
@ -388,7 +388,7 @@ void cSkinCursesDisplayMenu::SetEvent(const cEvent *Event)
|
|||||||
if (Event->Vps() && Event->Vps() != Event->StartTime()) {
|
if (Event->Vps() && Event->Vps() != Event->StartTime()) {
|
||||||
char *buffer;
|
char *buffer;
|
||||||
asprintf(&buffer, " VPS: %s", *Event->GetVpsString());
|
asprintf(&buffer, " VPS: %s", *Event->GetVpsString());
|
||||||
osd->DrawText(OsdWidth - strlen(buffer), y, buffer, clrBlack, clrYellow, &Font);
|
osd->DrawText(OsdWidth - Utf8StrLen(buffer), y, buffer, clrBlack, clrYellow, &Font);
|
||||||
free(buffer);
|
free(buffer);
|
||||||
}
|
}
|
||||||
y += ts.Height();
|
y += ts.Height();
|
||||||
@ -443,7 +443,7 @@ void cSkinCursesDisplayMenu::SetText(const char *Text, bool FixedFont)
|
|||||||
void cSkinCursesDisplayMenu::Flush(void)
|
void cSkinCursesDisplayMenu::Flush(void)
|
||||||
{
|
{
|
||||||
cString date = DayDateTime();
|
cString date = DayDateTime();
|
||||||
osd->DrawText(OsdWidth - strlen(date) - 2, 0, date, clrBlack, clrCyan, &Font);
|
osd->DrawText(OsdWidth - Utf8StrLen(date) - 2, 0, date, clrBlack, clrCyan, &Font);
|
||||||
osd->Flush();
|
osd->Flush();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -508,12 +508,12 @@ void cSkinCursesDisplayReplay::SetProgress(int Current, int Total)
|
|||||||
|
|
||||||
void cSkinCursesDisplayReplay::SetCurrent(const char *Current)
|
void cSkinCursesDisplayReplay::SetCurrent(const char *Current)
|
||||||
{
|
{
|
||||||
osd->DrawText(0, 2, Current, clrWhite, clrBackground, &Font, strlen(Current) + 3);
|
osd->DrawText(0, 2, Current, clrWhite, clrBackground, &Font, Utf8StrLen(Current) + 3);
|
||||||
}
|
}
|
||||||
|
|
||||||
void cSkinCursesDisplayReplay::SetTotal(const char *Total)
|
void cSkinCursesDisplayReplay::SetTotal(const char *Total)
|
||||||
{
|
{
|
||||||
osd->DrawText(OsdWidth - strlen(Total), 2, Total, clrWhite, clrBackground, &Font);
|
osd->DrawText(OsdWidth - Utf8StrLen(Total), 2, Total, clrWhite, clrBackground, &Font);
|
||||||
}
|
}
|
||||||
|
|
||||||
void cSkinCursesDisplayReplay::SetJump(const char *Jump)
|
void cSkinCursesDisplayReplay::SetJump(const char *Jump)
|
||||||
@ -569,7 +569,7 @@ void cSkinCursesDisplayVolume::SetVolume(int Current, int Total, bool Mute)
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
const char *Prompt = tr("Volume ");
|
const char *Prompt = tr("Volume ");
|
||||||
int l = strlen(Prompt);
|
int l = Utf8StrLen(Prompt);
|
||||||
int p = (OsdWidth - l) * Current / Total;
|
int p = (OsdWidth - l) * Current / Total;
|
||||||
osd->DrawText(0, 0, Prompt, clrGreen, clrBackground, &Font);
|
osd->DrawText(0, 0, Prompt, clrGreen, clrBackground, &Font);
|
||||||
osd->DrawRectangle(l, 0, l + p - 1, 0, clrGreen);
|
osd->DrawRectangle(l, 0, l + p - 1, 0, clrGreen);
|
||||||
|
20
config.c
20
config.c
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: config.c 1.151 2007/06/02 11:21:40 kls Exp $
|
* $Id: config.c 1.153 2007/06/17 11:54:54 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
@ -265,9 +265,9 @@ cSetup::cSetup(void)
|
|||||||
OSDMessageTime = 1;
|
OSDMessageTime = 1;
|
||||||
UseSmallFont = 1;
|
UseSmallFont = 1;
|
||||||
AntiAlias = 1;
|
AntiAlias = 1;
|
||||||
strcpy(FontOsd, "arialbd.ttf");
|
strcpy(FontOsd, DefaultFontOsd);
|
||||||
strcpy(FontSml, "arial.ttf");
|
strcpy(FontSml, DefaultFontSml);
|
||||||
strcpy(FontFix, "courbd.ttf");
|
strcpy(FontFix, DefaultFontFix);
|
||||||
FontOsdSize = 22;
|
FontOsdSize = 22;
|
||||||
FontSmlSize = 18;
|
FontSmlSize = 18;
|
||||||
FontFixSize = 20;
|
FontFixSize = 20;
|
||||||
@ -385,8 +385,8 @@ bool cSetup::ParseLanguages(const char *Value, int *Values)
|
|||||||
bool cSetup::Parse(const char *Name, const char *Value)
|
bool cSetup::Parse(const char *Name, const char *Value)
|
||||||
{
|
{
|
||||||
if (!strcasecmp(Name, "OSDLanguage")) OSDLanguage = atoi(Value);
|
if (!strcasecmp(Name, "OSDLanguage")) OSDLanguage = atoi(Value);
|
||||||
else if (!strcasecmp(Name, "OSDSkin")) strn0cpy(OSDSkin, Value, MaxSkinName);
|
else if (!strcasecmp(Name, "OSDSkin")) Utf8Strn0Cpy(OSDSkin, Value, MaxSkinName);
|
||||||
else if (!strcasecmp(Name, "OSDTheme")) strn0cpy(OSDTheme, Value, MaxThemeName);
|
else if (!strcasecmp(Name, "OSDTheme")) Utf8Strn0Cpy(OSDTheme, Value, MaxThemeName);
|
||||||
else if (!strcasecmp(Name, "PrimaryDVB")) PrimaryDVB = atoi(Value);
|
else if (!strcasecmp(Name, "PrimaryDVB")) PrimaryDVB = atoi(Value);
|
||||||
else if (!strcasecmp(Name, "ShowInfoOnChSwitch")) ShowInfoOnChSwitch = atoi(Value);
|
else if (!strcasecmp(Name, "ShowInfoOnChSwitch")) ShowInfoOnChSwitch = atoi(Value);
|
||||||
else if (!strcasecmp(Name, "TimeoutRequChInfo")) TimeoutRequChInfo = atoi(Value);
|
else if (!strcasecmp(Name, "TimeoutRequChInfo")) TimeoutRequChInfo = atoi(Value);
|
||||||
@ -394,7 +394,7 @@ bool cSetup::Parse(const char *Name, const char *Value)
|
|||||||
else if (!strcasecmp(Name, "MenuScrollWrap")) MenuScrollWrap = atoi(Value);
|
else if (!strcasecmp(Name, "MenuScrollWrap")) MenuScrollWrap = atoi(Value);
|
||||||
else if (!strcasecmp(Name, "MenuKeyCloses")) MenuKeyCloses = atoi(Value);
|
else if (!strcasecmp(Name, "MenuKeyCloses")) MenuKeyCloses = atoi(Value);
|
||||||
else if (!strcasecmp(Name, "MarkInstantRecord")) MarkInstantRecord = atoi(Value);
|
else if (!strcasecmp(Name, "MarkInstantRecord")) MarkInstantRecord = atoi(Value);
|
||||||
else if (!strcasecmp(Name, "NameInstantRecord")) strn0cpy(NameInstantRecord, Value, MaxFileName);
|
else if (!strcasecmp(Name, "NameInstantRecord")) Utf8Strn0Cpy(NameInstantRecord, Value, MaxFileName);
|
||||||
else if (!strcasecmp(Name, "InstantRecordTime")) InstantRecordTime = atoi(Value);
|
else if (!strcasecmp(Name, "InstantRecordTime")) InstantRecordTime = atoi(Value);
|
||||||
else if (!strcasecmp(Name, "LnbSLOF")) LnbSLOF = atoi(Value);
|
else if (!strcasecmp(Name, "LnbSLOF")) LnbSLOF = atoi(Value);
|
||||||
else if (!strcasecmp(Name, "LnbFrequLo")) LnbFrequLo = atoi(Value);
|
else if (!strcasecmp(Name, "LnbFrequLo")) LnbFrequLo = atoi(Value);
|
||||||
@ -435,9 +435,9 @@ bool cSetup::Parse(const char *Name, const char *Value)
|
|||||||
else if (!strcasecmp(Name, "OSDMessageTime")) OSDMessageTime = atoi(Value);
|
else if (!strcasecmp(Name, "OSDMessageTime")) OSDMessageTime = atoi(Value);
|
||||||
else if (!strcasecmp(Name, "UseSmallFont")) UseSmallFont = atoi(Value);
|
else if (!strcasecmp(Name, "UseSmallFont")) UseSmallFont = atoi(Value);
|
||||||
else if (!strcasecmp(Name, "AntiAlias")) AntiAlias = atoi(Value);
|
else if (!strcasecmp(Name, "AntiAlias")) AntiAlias = atoi(Value);
|
||||||
else if (!strcasecmp(Name, "FontOsd")) strn0cpy(FontOsd, Value, MAXFONTNAME);
|
else if (!strcasecmp(Name, "FontOsd")) Utf8Strn0Cpy(FontOsd, Value, MAXFONTNAME);
|
||||||
else if (!strcasecmp(Name, "FontSml")) strn0cpy(FontSml, Value, MAXFONTNAME);
|
else if (!strcasecmp(Name, "FontSml")) Utf8Strn0Cpy(FontSml, Value, MAXFONTNAME);
|
||||||
else if (!strcasecmp(Name, "FontFix")) strn0cpy(FontFix, Value, MAXFONTNAME);
|
else if (!strcasecmp(Name, "FontFix")) Utf8Strn0Cpy(FontFix, Value, MAXFONTNAME);
|
||||||
else if (!strcasecmp(Name, "FontOsdSize")) FontOsdSize = atoi(Value);
|
else if (!strcasecmp(Name, "FontOsdSize")) FontOsdSize = atoi(Value);
|
||||||
else if (!strcasecmp(Name, "FontSmlSize")) FontSmlSize = atoi(Value);
|
else if (!strcasecmp(Name, "FontSmlSize")) FontSmlSize = atoi(Value);
|
||||||
else if (!strcasecmp(Name, "FontFixSize")) FontFixSize = atoi(Value);
|
else if (!strcasecmp(Name, "FontFixSize")) FontFixSize = atoi(Value);
|
||||||
|
10
config.h
10
config.h
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: config.h 1.290 2007/06/02 11:22:17 kls Exp $
|
* $Id: config.h 1.291 2007/06/13 06:38:33 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef __CONFIG_H
|
#ifndef __CONFIG_H
|
||||||
@ -22,13 +22,13 @@
|
|||||||
|
|
||||||
// VDR's own version number:
|
// VDR's own version number:
|
||||||
|
|
||||||
#define VDRVERSION "1.5.3"
|
#define VDRVERSION "1.5.4"
|
||||||
#define VDRVERSNUM 10503 // Version * 10000 + Major * 100 + Minor
|
#define VDRVERSNUM 10504 // Version * 10000 + Major * 100 + Minor
|
||||||
|
|
||||||
// The plugin API's version number:
|
// The plugin API's version number:
|
||||||
|
|
||||||
#define APIVERSION "1.5.1"
|
#define APIVERSION "1.5.4"
|
||||||
#define APIVERSNUM 10501 // Version * 10000 + Major * 100 + Minor
|
#define APIVERSNUM 10504 // Version * 10000 + Major * 100 + Minor
|
||||||
|
|
||||||
// When loading plugins, VDR searches them by their APIVERSION, which
|
// When loading plugins, VDR searches them by their APIVERSION, which
|
||||||
// may be smaller than VDRVERSION in case there have been no changes to
|
// may be smaller than VDRVERSION in case there have been no changes to
|
||||||
|
4
device.c
4
device.c
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: device.c 1.140 2007/04/30 09:34:00 kls Exp $
|
* $Id: device.c 1.141 2007/06/16 09:31:32 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "device.h"
|
#include "device.h"
|
||||||
@ -859,7 +859,7 @@ bool cDevice::SetAvailableTrack(eTrackType Type, int Index, uint16_t Id, const c
|
|||||||
if (Language)
|
if (Language)
|
||||||
strn0cpy(availableTracks[t].language, Language, sizeof(availableTracks[t].language));
|
strn0cpy(availableTracks[t].language, Language, sizeof(availableTracks[t].language));
|
||||||
if (Description)
|
if (Description)
|
||||||
strn0cpy(availableTracks[t].description, Description, sizeof(availableTracks[t].description));
|
Utf8Strn0Cpy(availableTracks[t].description, Description, sizeof(availableTracks[t].description));
|
||||||
if (Id) {
|
if (Id) {
|
||||||
availableTracks[t].id = Id; // setting 'id' last to avoid the need for extensive locking
|
availableTracks[t].id = Id; // setting 'id' last to avoid the need for extensive locking
|
||||||
int numAudioTracks = NumAudioTracks();
|
int numAudioTracks = NumAudioTracks();
|
||||||
|
103
font.c
103
font.c
@ -4,17 +4,22 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: font.c 1.15 2007/06/09 14:41:27 kls Exp $
|
* $Id: font.c 1.19 2007/06/17 12:13:49 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "font.h"
|
#include "font.h"
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
|
#include <fontconfig/fontconfig.h>
|
||||||
#include <ft2build.h>
|
#include <ft2build.h>
|
||||||
#include FT_FREETYPE_H
|
#include FT_FREETYPE_H
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
#include "osd.h"
|
#include "osd.h"
|
||||||
#include "tools.h"
|
#include "tools.h"
|
||||||
|
|
||||||
|
const char *DefaultFontOsd = "Sans Serif:Bold";
|
||||||
|
const char *DefaultFontSml = "Sans Serif";
|
||||||
|
const char *DefaultFontFix = "Courier:Bold";
|
||||||
|
|
||||||
// --- cFreetypeFont ---------------------------------------------------------
|
// --- cFreetypeFont ---------------------------------------------------------
|
||||||
|
|
||||||
#define KERNING_UNKNOWN (-10000)
|
#define KERNING_UNKNOWN (-10000)
|
||||||
@ -22,7 +27,7 @@
|
|||||||
struct tKerning {
|
struct tKerning {
|
||||||
uint prevSym;
|
uint prevSym;
|
||||||
int kerning;
|
int kerning;
|
||||||
tKerning(uint PrevSym, int Kerning) { prevSym = PrevSym; kerning = Kerning; }
|
tKerning(uint PrevSym, int Kerning = 0) { prevSym = PrevSym; kerning = Kerning; }
|
||||||
};
|
};
|
||||||
|
|
||||||
class cGlyph : public cListObject {
|
class cGlyph : public cListObject {
|
||||||
@ -286,14 +291,29 @@ 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 *cFont::fonts[eDvbFontSize] = { NULL };
|
cFont *cFont::fonts[eDvbFontSize] = { NULL };
|
||||||
|
|
||||||
void cFont::SetFont(eDvbFont Font, const char *Name, int CharHeight)
|
void cFont::SetFont(eDvbFont Font, const char *Name, int CharHeight)
|
||||||
{
|
{
|
||||||
|
cFont *f = CreateFont(Name, CharHeight);
|
||||||
|
if (!f || !f->Height())
|
||||||
|
f = new cDummyFont;
|
||||||
delete fonts[Font];
|
delete fonts[Font];
|
||||||
fonts[Font] = new cFreetypeFont(*Name == '/' ? Name : *AddDirectory(FONTDIR, Name), CharHeight);
|
fonts[Font] = f;
|
||||||
}
|
}
|
||||||
|
|
||||||
const cFont *cFont::GetFont(eDvbFont Font)
|
const cFont *cFont::GetFont(eDvbFont Font)
|
||||||
@ -304,14 +324,85 @@ const cFont *cFont::GetFont(eDvbFont Font)
|
|||||||
Font = fontSml;
|
Font = fontSml;
|
||||||
if (!fonts[Font]) {
|
if (!fonts[Font]) {
|
||||||
switch (Font) {
|
switch (Font) {
|
||||||
case fontOsd: SetFont(Font, AddDirectory(FONTDIR, Setup.FontOsd), Setup.FontOsdSize); break;
|
case fontOsd: SetFont(Font, Setup.FontOsd, Setup.FontOsdSize); break;
|
||||||
case fontSml: SetFont(Font, AddDirectory(FONTDIR, Setup.FontSml), Setup.FontSmlSize); break;
|
case fontSml: SetFont(Font, Setup.FontSml, Setup.FontSmlSize); break;
|
||||||
case fontFix: SetFont(Font, AddDirectory(FONTDIR, Setup.FontFix), Setup.FontFixSize); break;
|
case fontFix: SetFont(Font, Setup.FontFix, Setup.FontFixSize); break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return fonts[Font];
|
return fonts[Font];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
cFont *cFont::CreateFont(const char *Name, int CharHeight)
|
||||||
|
{
|
||||||
|
cString fn = GetFontFileName(Name);
|
||||||
|
if (*fn)
|
||||||
|
return new cFreetypeFont(fn, CharHeight);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool cFont::GetAvailableFontNames(cStringList *FontNames, bool Monospaced)
|
||||||
|
{
|
||||||
|
if (!FontNames->Size()) {
|
||||||
|
FcInit();
|
||||||
|
FcObjectSet *os = FcObjectSetBuild(FC_FAMILY, FC_STYLE, NULL);
|
||||||
|
FcPattern *pat = FcPatternCreate();
|
||||||
|
FcPatternAddBool(pat, FC_SCALABLE, FcTrue);
|
||||||
|
if (Monospaced)
|
||||||
|
FcPatternAddInteger(pat, FC_SPACING, FC_MONO);
|
||||||
|
FcFontSet* fontset = FcFontList(NULL, pat, os);
|
||||||
|
for (int i = 0; i < fontset->nfont; i++) {
|
||||||
|
char *s = (char *)FcNameUnparse(fontset->fonts[i]);
|
||||||
|
if (s) {
|
||||||
|
// Strip i18n stuff:
|
||||||
|
char *p = strchr(s, ',');
|
||||||
|
if (p)
|
||||||
|
*p = 0;
|
||||||
|
// Make it user presentable:
|
||||||
|
s = strreplace(s, "\\", ""); // '-' is escaped
|
||||||
|
s = strreplace(s, "style=", "");
|
||||||
|
FontNames->Append(s); // takes ownership of s
|
||||||
|
}
|
||||||
|
}
|
||||||
|
FcFontSetDestroy(fontset);
|
||||||
|
FcPatternDestroy(pat);
|
||||||
|
FcObjectSetDestroy(os);
|
||||||
|
FcFini();
|
||||||
|
FontNames->Sort();
|
||||||
|
}
|
||||||
|
return FontNames->Size() > 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
cString cFont::GetFontFileName(const char *FontName)
|
||||||
|
{
|
||||||
|
cString FontFileName;
|
||||||
|
if (FontName) {
|
||||||
|
char *fn = strdup(FontName);
|
||||||
|
fn = strreplace(fn, ":", ":style=");
|
||||||
|
fn = strreplace(fn, "-", "\\-");
|
||||||
|
FcInit();
|
||||||
|
FcPattern *pat = FcNameParse((FcChar8 *)fn);
|
||||||
|
FcPatternAddBool(pat, FC_SCALABLE, FcTrue);
|
||||||
|
FcConfigSubstitute(NULL, pat, FcMatchPattern);
|
||||||
|
FcDefaultSubstitute(pat);
|
||||||
|
FcFontSet *fontset = FcFontSort(NULL, pat, FcFalse, NULL, NULL);
|
||||||
|
for (int i = 0; i < fontset->nfont; i++) {
|
||||||
|
FcBool scalable;
|
||||||
|
FcPatternGetBool(fontset->fonts[i], FC_SCALABLE, 0, &scalable);
|
||||||
|
if (scalable) {
|
||||||
|
FcChar8 *s = NULL;
|
||||||
|
FcPatternGetString(fontset->fonts[i], FC_FILE, 0, &s);
|
||||||
|
FontFileName = (char *)s;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
FcFontSetDestroy(fontset);
|
||||||
|
FcPatternDestroy(pat);
|
||||||
|
free(fn);
|
||||||
|
FcFini();
|
||||||
|
}
|
||||||
|
return FontFileName;
|
||||||
|
}
|
||||||
|
|
||||||
// --- cTextWrapper ----------------------------------------------------------
|
// --- cTextWrapper ----------------------------------------------------------
|
||||||
|
|
||||||
cTextWrapper::cTextWrapper(void)
|
cTextWrapper::cTextWrapper(void)
|
||||||
|
28
font.h
28
font.h
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: font.h 1.16 2007/06/10 12:58:54 kls Exp $
|
* $Id: font.h 1.19 2007/06/17 12:11:31 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef __FONT_H
|
#ifndef __FONT_H
|
||||||
@ -12,10 +12,10 @@
|
|||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
#include "tools.h"
|
||||||
|
|
||||||
#define MAXFONTNAME 64
|
#define MAXFONTNAME 64
|
||||||
#define MAXFONTSIZE 64
|
#define MAXFONTSIZE 64
|
||||||
#define FONTDIR "/usr/share/fonts/truetype"
|
|
||||||
|
|
||||||
enum eDvbFont {
|
enum eDvbFont {
|
||||||
fontOsd,
|
fontOsd,
|
||||||
@ -28,6 +28,10 @@ class cBitmap;
|
|||||||
typedef uint32_t tColor; // see also osd.h
|
typedef uint32_t tColor; // see also osd.h
|
||||||
typedef uint8_t tIndex;
|
typedef uint8_t tIndex;
|
||||||
|
|
||||||
|
extern const char *DefaultFontOsd;
|
||||||
|
extern const char *DefaultFontSml;
|
||||||
|
extern const char *DefaultFontFix;
|
||||||
|
|
||||||
class cFont {
|
class cFont {
|
||||||
private:
|
private:
|
||||||
static cFont *fonts[];
|
static cFont *fonts[];
|
||||||
@ -45,14 +49,30 @@ public:
|
|||||||
///< Draws the given text into the Bitmap at position (x, y) with the given colors.
|
///< Draws the given text into the Bitmap at position (x, y) with the given colors.
|
||||||
///< The text will not exceed the given Width (if > 0), and will end with a complete character.
|
///< The text will not exceed the given Width (if > 0), and will end with a complete character.
|
||||||
static void SetFont(eDvbFont Font, const char *Name, int CharHeight);
|
static void SetFont(eDvbFont Font, const char *Name, int CharHeight);
|
||||||
///< Sets the given Font to use the font data from the file Name and make its characters
|
///< Sets the given Font to use the font data according to Name (see CreateFont())
|
||||||
///< CharHeight pixels high.
|
///< and make its characters CharHeight pixels high.
|
||||||
static const cFont *GetFont(eDvbFont Font);
|
static const cFont *GetFont(eDvbFont Font);
|
||||||
///< Gets the given Font, which was previously set by a call to SetFont().
|
///< Gets the given Font, which was previously set by a call to SetFont().
|
||||||
///< If no SetFont() call has been made, the font as defined in the setup is returned.
|
///< If no SetFont() call has been made, the font as defined in the setup is returned.
|
||||||
///< The caller must not use the returned font outside the scope in which
|
///< The caller must not use the returned font outside the scope in which
|
||||||
///< it was retrieved by the call to GetFont(), because a call to SetFont()
|
///< it was retrieved by the call to GetFont(), because a call to SetFont()
|
||||||
///< may delete an existing font.
|
///< may delete an existing font.
|
||||||
|
static cFont *CreateFont(const char *Name, int CharHeight);
|
||||||
|
///< Creates a new font object with the given Name and makes its characters
|
||||||
|
///< CharHeight pixels high. 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.
|
||||||
|
///< 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,
|
||||||
|
///< which is returned in FontNames. If Monospaced is true, only
|
||||||
|
///< monospaced fonts will be returned. The resulting font names are
|
||||||
|
///< in a format that can be used with GetFontFileName() to get the name
|
||||||
|
///< of the actual font file.
|
||||||
|
///< Returns true if any font names were found.
|
||||||
|
static cString GetFontFileName(const char *FontName);
|
||||||
|
///< Retruns the actual font file name for the given FontName.
|
||||||
};
|
};
|
||||||
|
|
||||||
class cTextWrapper {
|
class cTextWrapper {
|
||||||
|
29
i18n.c
29
i18n.c
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: i18n.c 1.294 2007/06/09 08:44:54 kls Exp $
|
* $Id: i18n.c 1.297 2007/06/17 12:31:02 kls Exp $
|
||||||
*
|
*
|
||||||
* Translations provided by:
|
* Translations provided by:
|
||||||
*
|
*
|
||||||
@ -3563,7 +3563,7 @@ const tI18nPhrase Phrases[] = {
|
|||||||
"",// TODO
|
"",// TODO
|
||||||
"",// TODO
|
"",// TODO
|
||||||
"",// TODO
|
"",// TODO
|
||||||
"",// TODO
|
"Käytä antialiasointia",
|
||||||
"",// TODO
|
"",// TODO
|
||||||
"",// TODO
|
"",// TODO
|
||||||
"",// TODO
|
"",// TODO
|
||||||
@ -3578,15 +3578,15 @@ const tI18nPhrase Phrases[] = {
|
|||||||
"",// TODO
|
"",// TODO
|
||||||
"",// TODO
|
"",// TODO
|
||||||
},
|
},
|
||||||
{ "Setup.OSD$OSD font name",
|
{ "Setup.OSD$Default font",
|
||||||
"OSD Schriftart",
|
"Standard-Schriftart",
|
||||||
"",// TODO
|
|
||||||
"",// TODO
|
"",// TODO
|
||||||
"",// TODO
|
"",// TODO
|
||||||
"",// TODO
|
"",// TODO
|
||||||
"",// TODO
|
"",// TODO
|
||||||
"",// TODO
|
"",// TODO
|
||||||
"",// TODO
|
"",// TODO
|
||||||
|
"Oletuskirjasintyyppi",
|
||||||
"",// TODO
|
"",// TODO
|
||||||
"",// TODO
|
"",// TODO
|
||||||
"",// TODO
|
"",// TODO
|
||||||
@ -3601,7 +3601,7 @@ const tI18nPhrase Phrases[] = {
|
|||||||
"",// TODO
|
"",// TODO
|
||||||
"",// TODO
|
"",// TODO
|
||||||
},
|
},
|
||||||
{ "Setup.OSD$Small font name",
|
{ "Setup.OSD$Small font",
|
||||||
"Kleine Schriftart",
|
"Kleine Schriftart",
|
||||||
"",// TODO
|
"",// TODO
|
||||||
"",// TODO
|
"",// TODO
|
||||||
@ -3609,7 +3609,7 @@ const tI18nPhrase Phrases[] = {
|
|||||||
"",// TODO
|
"",// TODO
|
||||||
"",// TODO
|
"",// TODO
|
||||||
"",// TODO
|
"",// TODO
|
||||||
"",// TODO
|
"Pienikirjasintyyppi",
|
||||||
"",// TODO
|
"",// TODO
|
||||||
"",// TODO
|
"",// TODO
|
||||||
"",// TODO
|
"",// TODO
|
||||||
@ -3624,7 +3624,7 @@ const tI18nPhrase Phrases[] = {
|
|||||||
"",// TODO
|
"",// TODO
|
||||||
"",// TODO
|
"",// TODO
|
||||||
},
|
},
|
||||||
{ "Setup.OSD$Fixed font name",
|
{ "Setup.OSD$Fixed font",
|
||||||
"Festbreiten-Schriftart",
|
"Festbreiten-Schriftart",
|
||||||
"",// TODO
|
"",// TODO
|
||||||
"",// TODO
|
"",// TODO
|
||||||
@ -3632,7 +3632,7 @@ const tI18nPhrase Phrases[] = {
|
|||||||
"",// TODO
|
"",// TODO
|
||||||
"",// TODO
|
"",// TODO
|
||||||
"",// TODO
|
"",// TODO
|
||||||
"",// TODO
|
"Tasavälinen kirjasintyyppi",
|
||||||
"",// TODO
|
"",// TODO
|
||||||
"",// TODO
|
"",// TODO
|
||||||
"",// TODO
|
"",// TODO
|
||||||
@ -3655,7 +3655,7 @@ const tI18nPhrase Phrases[] = {
|
|||||||
"",// TODO
|
"",// TODO
|
||||||
"",// TODO
|
"",// TODO
|
||||||
"",// TODO
|
"",// TODO
|
||||||
"",// TODO
|
"Oletuskirjasintyypin koko (px)",
|
||||||
"",// TODO
|
"",// TODO
|
||||||
"",// TODO
|
"",// TODO
|
||||||
"",// TODO
|
"",// TODO
|
||||||
@ -3678,7 +3678,7 @@ const tI18nPhrase Phrases[] = {
|
|||||||
"",// TODO
|
"",// TODO
|
||||||
"",// TODO
|
"",// TODO
|
||||||
"",// TODO
|
"",// TODO
|
||||||
"",// TODO
|
"Pienen kirjasintyypin koko (px)",
|
||||||
"",// TODO
|
"",// TODO
|
||||||
"",// TODO
|
"",// TODO
|
||||||
"",// TODO
|
"",// TODO
|
||||||
@ -3701,7 +3701,7 @@ const tI18nPhrase Phrases[] = {
|
|||||||
"",// TODO
|
"",// TODO
|
||||||
"",// TODO
|
"",// TODO
|
||||||
"",// TODO
|
"",// TODO
|
||||||
"",// TODO
|
"Tasavälisen kirjasintyypin koko (px)",
|
||||||
"",// TODO
|
"",// TODO
|
||||||
"",// TODO
|
"",// TODO
|
||||||
"",// TODO
|
"",// TODO
|
||||||
@ -6820,7 +6820,7 @@ static const char *ConvertPhrase(const tI18nPhrase *Original, tI18nPhrase **Conv
|
|||||||
*Converted = new tI18nPhrase[NumPhrases + 1];
|
*Converted = new tI18nPhrase[NumPhrases + 1];
|
||||||
memset(*Converted, 0, sizeof(tI18nPhrase) * (NumPhrases + 1));
|
memset(*Converted, 0, sizeof(tI18nPhrase) * (NumPhrases + 1));
|
||||||
}
|
}
|
||||||
if (!(*Converted)[NrPhrase][NrLanguage]) {
|
if (!(*Converted)[NrPhrase][NrLanguage] && Original[NrPhrase][NrLanguage]) {
|
||||||
cCharSetConv csc(Phrases[1][NrLanguage], cCharSetConv::SystemCharacterTable());
|
cCharSetConv csc(Phrases[1][NrLanguage], cCharSetConv::SystemCharacterTable());
|
||||||
(*Converted)[NrPhrase][NrLanguage] = strdup(csc.Convert(Original[NrPhrase][NrLanguage]));
|
(*Converted)[NrPhrase][NrLanguage] = strdup(csc.Convert(Original[NrPhrase][NrLanguage]));
|
||||||
}
|
}
|
||||||
@ -6851,7 +6851,8 @@ const char *I18nTranslate(const char *s, const char *Plugin)
|
|||||||
return t;
|
return t;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
p = Phrases;
|
p = OriginalPhrases = Phrases;
|
||||||
|
ConvertedPhrases = &Converted;
|
||||||
}
|
}
|
||||||
esyslog("%s%sno translation found for '%s' in language %d (%s)", Plugin ? Plugin : "", Plugin ? ": " : "", s, Setup.OSDLanguage, Phrases[0][Setup.OSDLanguage]);
|
esyslog("%s%sno translation found for '%s' in language %d (%s)", Plugin ? Plugin : "", Plugin ? ": " : "", s, Setup.OSDLanguage, Phrases[0][Setup.OSDLanguage]);
|
||||||
}
|
}
|
||||||
|
94
libsi/si.c
94
libsi/si.c
@ -6,7 +6,7 @@
|
|||||||
* the Free Software Foundation; either version 2 of the License, or *
|
* the Free Software Foundation; either version 2 of the License, or *
|
||||||
* (at your option) any later version. *
|
* (at your option) any later version. *
|
||||||
* *
|
* *
|
||||||
* $Id: si.c 1.20 2007/06/10 09:31:34 kls Exp $
|
* $Id: si.c 1.21 2007/06/15 13:08:31 kls Exp $
|
||||||
* *
|
* *
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
|
|
||||||
@ -250,59 +250,59 @@ char *String::getText(char *buffer, char *shortVersion, int sizeBuffer, int size
|
|||||||
}
|
}
|
||||||
|
|
||||||
static const char *CharacterTables1[] = {
|
static const char *CharacterTables1[] = {
|
||||||
NULL, // 0x00
|
NULL, // 0x00
|
||||||
"ISO8859-5", // 0x01
|
"ISO-8859-5", // 0x01
|
||||||
"ISO8859-6", // 0x02
|
"ISO-8859-6", // 0x02
|
||||||
"ISO8859-7", // 0x03
|
"ISO-8859-7", // 0x03
|
||||||
"ISO8859-8", // 0x04
|
"ISO-8859-8", // 0x04
|
||||||
"ISO8859-9", // 0x05
|
"ISO-8859-9", // 0x05
|
||||||
"ISO8859-10", // 0x06
|
"ISO-8859-10", // 0x06
|
||||||
"ISO8859-11", // 0x07
|
"ISO-8859-11", // 0x07
|
||||||
"ISO8859-12", // 0x08
|
"ISO-8859-12", // 0x08
|
||||||
"ISO8859-13", // 0x09
|
"ISO-8859-13", // 0x09
|
||||||
"ISO8859-14", // 0x0A
|
"ISO-8859-14", // 0x0A
|
||||||
"ISO8859-15", // 0x0B
|
"ISO-8859-15", // 0x0B
|
||||||
NULL, // 0x0C
|
NULL, // 0x0C
|
||||||
NULL, // 0x0D
|
NULL, // 0x0D
|
||||||
NULL, // 0x0E
|
NULL, // 0x0E
|
||||||
NULL, // 0x0F
|
NULL, // 0x0F
|
||||||
NULL, // 0x10
|
NULL, // 0x10
|
||||||
"UTF16", // 0x11
|
"UTF-16", // 0x11
|
||||||
"EUC-KR", // 0x12
|
"EUC-KR", // 0x12
|
||||||
"GB2312", // 0x13
|
"GB2312", // 0x13
|
||||||
"GBK", // 0x14
|
"GBK", // 0x14
|
||||||
"UTF8", // 0x15
|
"UTF-8", // 0x15
|
||||||
NULL, // 0x16
|
NULL, // 0x16
|
||||||
NULL, // 0x17
|
NULL, // 0x17
|
||||||
NULL, // 0x18
|
NULL, // 0x18
|
||||||
NULL, // 0x19
|
NULL, // 0x19
|
||||||
NULL, // 0x1A
|
NULL, // 0x1A
|
||||||
NULL, // 0x1B
|
NULL, // 0x1B
|
||||||
NULL, // 0x1C
|
NULL, // 0x1C
|
||||||
NULL, // 0x1D
|
NULL, // 0x1D
|
||||||
NULL, // 0x1E
|
NULL, // 0x1E
|
||||||
NULL, // 0x1F
|
NULL, // 0x1F
|
||||||
};
|
};
|
||||||
|
|
||||||
#define SingleByteLimit 0x0B
|
#define SingleByteLimit 0x0B
|
||||||
|
|
||||||
static const char *CharacterTables2[] = {
|
static const char *CharacterTables2[] = {
|
||||||
NULL, // 0x00
|
NULL, // 0x00
|
||||||
"ISO8859-1", // 0x01
|
"ISO-8859-1", // 0x01
|
||||||
"ISO8859-2", // 0x02
|
"ISO-8859-2", // 0x02
|
||||||
"ISO8859-3", // 0x03
|
"ISO-8859-3", // 0x03
|
||||||
"ISO8859-4", // 0x04
|
"ISO-8859-4", // 0x04
|
||||||
"ISO8859-5", // 0x05
|
"ISO-8859-5", // 0x05
|
||||||
"ISO8859-6", // 0x06
|
"ISO-8859-6", // 0x06
|
||||||
"ISO8859-7", // 0x07
|
"ISO-8859-7", // 0x07
|
||||||
"ISO8859-8", // 0x08
|
"ISO-8859-8", // 0x08
|
||||||
"ISO8859-9", // 0x09
|
"ISO-8859-9", // 0x09
|
||||||
"ISO8859-10", // 0x0A
|
"ISO-8859-10", // 0x0A
|
||||||
"ISO8859-11", // 0x0B
|
"ISO-8859-11", // 0x0B
|
||||||
NULL, // 0x0C
|
NULL, // 0x0C
|
||||||
"ISO8859-13", // 0x0D
|
"ISO-8859-13", // 0x0D
|
||||||
"ISO8859-14", // 0x0E
|
"ISO-8859-14", // 0x0E
|
||||||
"ISO8859-15", // 0x0F
|
"ISO-8859-15", // 0x0F
|
||||||
};
|
};
|
||||||
|
|
||||||
#define NumEntries(Table) (sizeof(Table) / sizeof(char *))
|
#define NumEntries(Table) (sizeof(Table) / sizeof(char *))
|
||||||
|
39
menu.c
39
menu.c
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: menu.c 1.451 2007/06/09 14:36:46 kls Exp $
|
* $Id: menu.c 1.455 2007/06/17 12:33:01 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "menu.h"
|
#include "menu.h"
|
||||||
@ -2160,7 +2160,7 @@ private:
|
|||||||
cThemes themes;
|
cThemes themes;
|
||||||
int originalThemeIndex;
|
int originalThemeIndex;
|
||||||
int themeIndex;
|
int themeIndex;
|
||||||
cFileNameList fontNames;
|
cStringList fontOsdNames, fontSmlNames, fontFixNames;
|
||||||
int fontOsdIndex, fontSmlIndex, fontFixIndex;
|
int fontOsdIndex, fontSmlIndex, fontFixIndex;
|
||||||
virtual void Set(void);
|
virtual void Set(void);
|
||||||
public:
|
public:
|
||||||
@ -2176,12 +2176,15 @@ cMenuSetupOSD::cMenuSetupOSD(void)
|
|||||||
skinDescriptions = new const char*[numSkins];
|
skinDescriptions = new const char*[numSkins];
|
||||||
themes.Load(Skins.Current()->Name());
|
themes.Load(Skins.Current()->Name());
|
||||||
themeIndex = originalThemeIndex = Skins.Current()->Theme() ? themes.GetThemeIndex(Skins.Current()->Theme()->Description()) : 0;
|
themeIndex = originalThemeIndex = Skins.Current()->Theme() ? themes.GetThemeIndex(Skins.Current()->Theme()->Description()) : 0;
|
||||||
fontNames.Load(FONTDIR);
|
cFont::GetAvailableFontNames(&fontOsdNames);
|
||||||
if (fontNames.Size()) {
|
cFont::GetAvailableFontNames(&fontSmlNames);
|
||||||
fontOsdIndex = max(0, fontNames.Find(Setup.FontOsd));
|
cFont::GetAvailableFontNames(&fontFixNames, true);
|
||||||
fontSmlIndex = max(0, fontNames.Find(Setup.FontSml));
|
fontOsdNames.Insert(strdup(DefaultFontOsd));
|
||||||
fontFixIndex = max(0, fontNames.Find(Setup.FontFix));
|
fontSmlNames.Insert(strdup(DefaultFontSml));
|
||||||
}
|
fontFixNames.Insert(strdup(DefaultFontFix));
|
||||||
|
fontOsdIndex = max(0, fontOsdNames.Find(Setup.FontOsd));
|
||||||
|
fontSmlIndex = max(0, fontSmlNames.Find(Setup.FontSml));
|
||||||
|
fontFixIndex = max(0, fontFixNames.Find(Setup.FontFix));
|
||||||
Set();
|
Set();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2211,11 +2214,9 @@ void cMenuSetupOSD::Set(void)
|
|||||||
Add(new cMenuEditIntItem( tr("Setup.OSD$Message time (s)"), &data.OSDMessageTime, 1, 60));
|
Add(new cMenuEditIntItem( tr("Setup.OSD$Message time (s)"), &data.OSDMessageTime, 1, 60));
|
||||||
Add(new cMenuEditStraItem(tr("Setup.OSD$Use small font"), &data.UseSmallFont, 3, useSmallFontTexts));
|
Add(new cMenuEditStraItem(tr("Setup.OSD$Use small font"), &data.UseSmallFont, 3, useSmallFontTexts));
|
||||||
Add(new cMenuEditBoolItem(tr("Setup.OSD$Anti-alias"), &data.AntiAlias));
|
Add(new cMenuEditBoolItem(tr("Setup.OSD$Anti-alias"), &data.AntiAlias));
|
||||||
if (fontNames.Size()) {
|
Add(new cMenuEditStraItem(tr("Setup.OSD$Default font"), &fontOsdIndex, fontOsdNames.Size(), &fontOsdNames[0]));
|
||||||
Add(new cMenuEditStraItem(tr("Setup.OSD$OSD font name"), &fontOsdIndex, fontNames.Size(), &fontNames[0]));
|
Add(new cMenuEditStraItem(tr("Setup.OSD$Small font"), &fontSmlIndex, fontSmlNames.Size(), &fontSmlNames[0]));
|
||||||
Add(new cMenuEditStraItem(tr("Setup.OSD$Small font name"), &fontSmlIndex, fontNames.Size(), &fontNames[0]));
|
Add(new cMenuEditStraItem(tr("Setup.OSD$Fixed font"), &fontFixIndex, fontFixNames.Size(), &fontFixNames[0]));
|
||||||
Add(new cMenuEditStraItem(tr("Setup.OSD$Fixed font name"), &fontFixIndex, fontNames.Size(), &fontNames[0]));
|
|
||||||
}
|
|
||||||
Add(new cMenuEditIntItem( tr("Setup.OSD$OSD font size (pixel)"), &data.FontOsdSize, 10, MAXFONTSIZE));
|
Add(new cMenuEditIntItem( tr("Setup.OSD$OSD font size (pixel)"), &data.FontOsdSize, 10, MAXFONTSIZE));
|
||||||
Add(new cMenuEditIntItem( tr("Setup.OSD$Small font size (pixel)"),&data.FontSmlSize, 10, MAXFONTSIZE));
|
Add(new cMenuEditIntItem( tr("Setup.OSD$Small font size (pixel)"),&data.FontSmlSize, 10, MAXFONTSIZE));
|
||||||
Add(new cMenuEditIntItem( tr("Setup.OSD$Fixed font size (pixel)"),&data.FontFixSize, 10, MAXFONTSIZE));
|
Add(new cMenuEditIntItem( tr("Setup.OSD$Fixed font size (pixel)"),&data.FontFixSize, 10, MAXFONTSIZE));
|
||||||
@ -2239,14 +2240,14 @@ eOSState cMenuSetupOSD::ProcessKey(eKeys Key)
|
|||||||
if (skinIndex != originalSkinIndex) {
|
if (skinIndex != originalSkinIndex) {
|
||||||
cSkin *Skin = Skins.Get(skinIndex);
|
cSkin *Skin = Skins.Get(skinIndex);
|
||||||
if (Skin) {
|
if (Skin) {
|
||||||
strn0cpy(data.OSDSkin, Skin->Name(), sizeof(data.OSDSkin));
|
Utf8Strn0Cpy(data.OSDSkin, Skin->Name(), sizeof(data.OSDSkin));
|
||||||
Skins.SetCurrent(Skin->Name());
|
Skins.SetCurrent(Skin->Name());
|
||||||
ModifiedApperance = true;
|
ModifiedApperance = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (themes.NumThemes() && Skins.Current()->Theme()) {
|
if (themes.NumThemes() && Skins.Current()->Theme()) {
|
||||||
Skins.Current()->Theme()->Load(themes.FileName(themeIndex));
|
Skins.Current()->Theme()->Load(themes.FileName(themeIndex));
|
||||||
strn0cpy(data.OSDTheme, themes.Name(themeIndex), sizeof(data.OSDTheme));
|
Utf8Strn0Cpy(data.OSDTheme, themes.Name(themeIndex), sizeof(data.OSDTheme));
|
||||||
ModifiedApperance |= themeIndex != originalThemeIndex;
|
ModifiedApperance |= themeIndex != originalThemeIndex;
|
||||||
}
|
}
|
||||||
if (data.OSDLeft != Setup.OSDLeft || data.OSDTop != Setup.OSDTop || data.OSDWidth != Setup.OSDWidth || data.OSDHeight != Setup.OSDHeight) {
|
if (data.OSDLeft != Setup.OSDLeft || data.OSDTop != Setup.OSDTop || data.OSDWidth != Setup.OSDWidth || data.OSDHeight != Setup.OSDHeight) {
|
||||||
@ -2255,11 +2256,9 @@ eOSState cMenuSetupOSD::ProcessKey(eKeys Key)
|
|||||||
}
|
}
|
||||||
if (data.UseSmallFont != Setup.UseSmallFont || data.AntiAlias != Setup.AntiAlias)
|
if (data.UseSmallFont != Setup.UseSmallFont || data.AntiAlias != Setup.AntiAlias)
|
||||||
ModifiedApperance = true;
|
ModifiedApperance = true;
|
||||||
if (fontNames.Size()) {
|
Utf8Strn0Cpy(data.FontOsd, fontOsdNames[fontOsdIndex], sizeof(data.FontOsd));
|
||||||
strn0cpy(data.FontOsd, fontNames[fontOsdIndex], sizeof(data.FontOsd));
|
Utf8Strn0Cpy(data.FontSml, fontSmlNames[fontSmlIndex], sizeof(data.FontSml));
|
||||||
strn0cpy(data.FontSml, fontNames[fontSmlIndex], sizeof(data.FontSml));
|
Utf8Strn0Cpy(data.FontFix, fontFixNames[fontFixIndex], sizeof(data.FontFix));
|
||||||
strn0cpy(data.FontFix, fontNames[fontFixIndex], sizeof(data.FontFix));
|
|
||||||
}
|
|
||||||
if (strcmp(data.FontOsd, Setup.FontOsd) || data.FontOsdSize != Setup.FontOsdSize) {
|
if (strcmp(data.FontOsd, Setup.FontOsd) || data.FontOsdSize != Setup.FontOsdSize) {
|
||||||
cFont::SetFont(fontOsd, data.FontOsd, data.FontOsdSize);
|
cFont::SetFont(fontOsd, data.FontOsd, data.FontOsdSize);
|
||||||
ModifiedApperance = true;
|
ModifiedApperance = true;
|
||||||
|
14
osd.c
14
osd.c
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: osd.c 1.69 2007/06/10 12:16:36 kls Exp $
|
* $Id: osd.c 1.70 2007/06/17 13:54:34 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "osd.h"
|
#include "osd.h"
|
||||||
@ -642,6 +642,10 @@ const tIndex *cBitmap::Data(int x, int y)
|
|||||||
|
|
||||||
// --- cOsd ------------------------------------------------------------------
|
// --- cOsd ------------------------------------------------------------------
|
||||||
|
|
||||||
|
int cOsd::osdLeft = 0;
|
||||||
|
int cOsd::osdTop = 0;
|
||||||
|
int cOsd::osdWidth = 0;
|
||||||
|
int cOsd::osdHeight = 0;
|
||||||
int cOsd::isOpen = 0;
|
int cOsd::isOpen = 0;
|
||||||
|
|
||||||
cOsd::cOsd(int Left, int Top)
|
cOsd::cOsd(int Left, int Top)
|
||||||
@ -664,6 +668,14 @@ cOsd::~cOsd()
|
|||||||
isOpen--;
|
isOpen--;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void cOsd::SetOsdPostion(int Left, int Top, int Width, int Height)
|
||||||
|
{
|
||||||
|
osdLeft = Left;
|
||||||
|
osdTop = Top;
|
||||||
|
osdWidth = Width;
|
||||||
|
osdHeight = Height;
|
||||||
|
}
|
||||||
|
|
||||||
void cOsd::SetAntiAliasGranularity(uint FixedColors, uint BlendColors)
|
void cOsd::SetAntiAliasGranularity(uint FixedColors, uint BlendColors)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < numBitmaps; i++)
|
for (int i = 0; i < numBitmaps; i++)
|
||||||
|
13
osd.h
13
osd.h
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: osd.h 1.54 2007/06/10 12:15:52 kls Exp $
|
* $Id: osd.h 1.55 2007/06/17 13:59:22 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef __OSD_H
|
#ifndef __OSD_H
|
||||||
@ -13,6 +13,7 @@
|
|||||||
#include <limits.h>
|
#include <limits.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
#include "config.h"
|
||||||
#include "font.h"
|
#include "font.h"
|
||||||
|
|
||||||
#define MAXNUMCOLORS 256
|
#define MAXNUMCOLORS 256
|
||||||
@ -245,6 +246,7 @@ struct tArea {
|
|||||||
class cOsd {
|
class cOsd {
|
||||||
friend class cOsdProvider;
|
friend class cOsdProvider;
|
||||||
private:
|
private:
|
||||||
|
static int osdLeft, osdTop, osdWidth, osdHeight;
|
||||||
static int isOpen;
|
static int isOpen;
|
||||||
cBitmap *savedRegion;
|
cBitmap *savedRegion;
|
||||||
cBitmap *bitmaps[MAXOSDAREAS];
|
cBitmap *bitmaps[MAXOSDAREAS];
|
||||||
@ -270,6 +272,15 @@ protected:
|
|||||||
public:
|
public:
|
||||||
virtual ~cOsd();
|
virtual ~cOsd();
|
||||||
///< Shuts down the OSD.
|
///< Shuts down the OSD.
|
||||||
|
static int OsdLeft(void) { return osdLeft ? osdLeft : Setup.OSDLeft; }
|
||||||
|
static int OsdTop(void) { return osdTop ? osdTop : Setup.OSDTop; }
|
||||||
|
static int OsdWidth(void) { return osdWidth ? osdWidth : Setup.OSDWidth; }
|
||||||
|
static int OsdHeight(void) { return osdHeight ? osdHeight : Setup.OSDHeight; }
|
||||||
|
static void SetOsdPostion(int Left, int Top, int Width, int Height);
|
||||||
|
///< Sets the position and size of the OSD to the given values.
|
||||||
|
///< This may be useful for plugins that determine the scaling of the
|
||||||
|
///< video image and need to scale the OSD accordingly to fit on the
|
||||||
|
///< screen.
|
||||||
static int IsOpen(void) { return isOpen; }
|
static int IsOpen(void) { return isOpen; }
|
||||||
int Left(void) { return left; }
|
int Left(void) { return left; }
|
||||||
int Top(void) { return top; }
|
int Top(void) { return top; }
|
||||||
|
39
recording.c
39
recording.c
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: recording.c 1.151 2006/10/07 12:46:22 kls Exp $
|
* $Id: recording.c 1.154 2007/06/17 13:10:12 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "recording.h"
|
#include "recording.h"
|
||||||
@ -262,6 +262,7 @@ void cResumeFile::Delete(void)
|
|||||||
cRecordingInfo::cRecordingInfo(const cChannel *Channel, const cEvent *Event)
|
cRecordingInfo::cRecordingInfo(const cChannel *Channel, const cEvent *Event)
|
||||||
{
|
{
|
||||||
channelID = Channel ? Channel->GetChannelID() : tChannelID::InvalidID;
|
channelID = Channel ? Channel->GetChannelID() : tChannelID::InvalidID;
|
||||||
|
channelName = Channel ? strdup(Channel->Name()) : NULL;
|
||||||
ownEvent = Event ? NULL : new cEvent(0);
|
ownEvent = Event ? NULL : new cEvent(0);
|
||||||
event = ownEvent ? ownEvent : Event;
|
event = ownEvent ? ownEvent : Event;
|
||||||
aux = NULL;
|
aux = NULL;
|
||||||
@ -304,6 +305,7 @@ cRecordingInfo::~cRecordingInfo()
|
|||||||
{
|
{
|
||||||
delete ownEvent;
|
delete ownEvent;
|
||||||
free(aux);
|
free(aux);
|
||||||
|
free(channelName);
|
||||||
}
|
}
|
||||||
|
|
||||||
void cRecordingInfo::SetData(const char *Title, const char *ShortText, const char *Description)
|
void cRecordingInfo::SetData(const char *Title, const char *ShortText, const char *Description)
|
||||||
@ -334,8 +336,11 @@ bool cRecordingInfo::Read(FILE *f)
|
|||||||
switch (*s) {
|
switch (*s) {
|
||||||
case 'C': {
|
case 'C': {
|
||||||
char *p = strchr(t, ' ');
|
char *p = strchr(t, ' ');
|
||||||
if (p)
|
if (p) {
|
||||||
|
free(channelName);
|
||||||
|
asprintf(&channelName, "%s", compactspace(p));
|
||||||
*p = 0; // strips optional channel name
|
*p = 0; // strips optional channel name
|
||||||
|
}
|
||||||
if (*t)
|
if (*t)
|
||||||
channelID = tChannelID::FromString(t);
|
channelID = tChannelID::FromString(t);
|
||||||
}
|
}
|
||||||
@ -375,7 +380,7 @@ bool cRecordingInfo::Read(FILE *f)
|
|||||||
bool cRecordingInfo::Write(FILE *f, const char *Prefix) const
|
bool cRecordingInfo::Write(FILE *f, const char *Prefix) const
|
||||||
{
|
{
|
||||||
if (channelID.Valid())
|
if (channelID.Valid())
|
||||||
fprintf(f, "%sC %s\n", Prefix, *channelID.ToString());
|
fprintf(f, "%sC %s%s%s\n", Prefix, *channelID.ToString(), channelName ? " " : "", channelName ? channelName : "");
|
||||||
event->Dump(f, Prefix, true);
|
event->Dump(f, Prefix, true);
|
||||||
if (aux)
|
if (aux)
|
||||||
fprintf(f, "%s@ %s\n", Prefix, aux);
|
fprintf(f, "%s@ %s\n", Prefix, aux);
|
||||||
@ -406,34 +411,14 @@ char *ExchangeChars(char *s, bool ToFileSystem)
|
|||||||
// The VFAT file system can't handle all characters, so we
|
// The VFAT file system can't handle all characters, so we
|
||||||
// have to take extra efforts to encode/decode them:
|
// have to take extra efforts to encode/decode them:
|
||||||
if (ToFileSystem) {
|
if (ToFileSystem) {
|
||||||
|
const char *InvalidChars = "\"\\/:*?|<>#";
|
||||||
switch (*p) {
|
switch (*p) {
|
||||||
// characters that can be used "as is":
|
|
||||||
case '!':
|
|
||||||
case '@':
|
|
||||||
case '$':
|
|
||||||
case '%':
|
|
||||||
case '&':
|
|
||||||
case '(':
|
|
||||||
case ')':
|
|
||||||
case '+':
|
|
||||||
case ',':
|
|
||||||
case '-':
|
|
||||||
case ';':
|
|
||||||
case '=':
|
|
||||||
case '0' ... '9':
|
|
||||||
case 'a' ... 'z':
|
|
||||||
case 'A' ... 'Z':
|
|
||||||
case 'ä': case 'Ä':
|
|
||||||
case 'ö': case 'Ö':
|
|
||||||
case 'ü': case 'Ü':
|
|
||||||
case 'ß':
|
|
||||||
break;
|
|
||||||
// characters that can be mapped to other characters:
|
// characters that can be mapped to other characters:
|
||||||
case ' ': *p = '_'; break;
|
case ' ': *p = '_'; break;
|
||||||
case '~': *p = '/'; break;
|
case '~': *p = '/'; break;
|
||||||
// characters that have to be encoded:
|
// characters that have to be encoded:
|
||||||
default:
|
default:
|
||||||
if (*p != '.' || !*(p + 1) || *(p + 1) == '~') { // Windows can't handle '.' at the end of directory names
|
if (strchr(InvalidChars, *p) || *p == '.' && (!*(p + 1) || *(p + 1) == '~')) { // Windows can't handle '.' at the end of file/directory names
|
||||||
int l = p - s;
|
int l = p - s;
|
||||||
s = (char *)realloc(s, strlen(s) + 10);
|
s = (char *)realloc(s, strlen(s) + 10);
|
||||||
p = s + l;
|
p = s + l;
|
||||||
@ -450,7 +435,7 @@ char *ExchangeChars(char *s, bool ToFileSystem)
|
|||||||
// mapped characters:
|
// mapped characters:
|
||||||
case '_': *p = ' '; break;
|
case '_': *p = ' '; break;
|
||||||
case '/': *p = '~'; break;
|
case '/': *p = '~'; break;
|
||||||
// encodes characters:
|
// encoded characters:
|
||||||
case '#': {
|
case '#': {
|
||||||
if (strlen(p) > 2) {
|
if (strlen(p) > 2) {
|
||||||
char buf[3];
|
char buf[3];
|
||||||
@ -500,7 +485,7 @@ cRecording::cRecording(cTimer *Timer, const cEvent *Event)
|
|||||||
Subtitle = " ";
|
Subtitle = " ";
|
||||||
else if (strlen(Subtitle) > MAX_SUBTITLE_LENGTH) {
|
else if (strlen(Subtitle) > MAX_SUBTITLE_LENGTH) {
|
||||||
// let's make sure the Subtitle doesn't produce too long a file name:
|
// let's make sure the Subtitle doesn't produce too long a file name:
|
||||||
strn0cpy(SubtitleBuffer, Subtitle, MAX_SUBTITLE_LENGTH);
|
Utf8Strn0Cpy(SubtitleBuffer, Subtitle, MAX_SUBTITLE_LENGTH);
|
||||||
Subtitle = SubtitleBuffer;
|
Subtitle = SubtitleBuffer;
|
||||||
}
|
}
|
||||||
char *macroTITLE = strstr(Timer->File(), TIMERMACRO_TITLE);
|
char *macroTITLE = strstr(Timer->File(), TIMERMACRO_TITLE);
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: recording.h 1.56 2006/12/01 15:06:07 kls Exp $
|
* $Id: recording.h 1.57 2007/06/17 12:53:05 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef __RECORDING_H
|
#ifndef __RECORDING_H
|
||||||
@ -42,6 +42,7 @@ class cRecordingInfo {
|
|||||||
friend class cRecording;
|
friend class cRecording;
|
||||||
private:
|
private:
|
||||||
tChannelID channelID;
|
tChannelID channelID;
|
||||||
|
char *channelName;
|
||||||
const cEvent *event;
|
const cEvent *event;
|
||||||
cEvent *ownEvent;
|
cEvent *ownEvent;
|
||||||
char *aux;
|
char *aux;
|
||||||
@ -51,6 +52,7 @@ private:
|
|||||||
public:
|
public:
|
||||||
~cRecordingInfo();
|
~cRecordingInfo();
|
||||||
tChannelID ChannelID(void) const { return channelID; }
|
tChannelID ChannelID(void) const { return channelID; }
|
||||||
|
const char *ChannelName(void) const { return channelName; }
|
||||||
const char *Title(void) const { return event->Title(); }
|
const char *Title(void) const { return event->Title(); }
|
||||||
const char *ShortText(void) const { return event->ShortText(); }
|
const char *ShortText(void) const { return event->ShortText(); }
|
||||||
const char *Description(void) const { return event->Description(); }
|
const char *Description(void) const { return event->Description(); }
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: skinclassic.c 1.16 2007/06/10 12:42:02 kls Exp $
|
* $Id: skinclassic.c 1.17 2007/06/17 13:53:09 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "skinclassic.h"
|
#include "skinclassic.h"
|
||||||
@ -92,13 +92,13 @@ cSkinClassicDisplayChannel::cSkinClassicDisplayChannel(bool WithInfo)
|
|||||||
const cFont *font = cFont::GetFont(fontOsd);
|
const cFont *font = cFont::GetFont(fontOsd);
|
||||||
lineHeight = font->Height();
|
lineHeight = font->Height();
|
||||||
message = false;
|
message = false;
|
||||||
osd = cOsdProvider::NewOsd(Setup.OSDLeft, Setup.OSDTop + (Setup.ChannelInfoPos ? 0 : Setup.OSDHeight - Lines * lineHeight));
|
osd = cOsdProvider::NewOsd(cOsd::OsdLeft(), cOsd::OsdTop() + (Setup.ChannelInfoPos ? 0 : cOsd::OsdHeight() - Lines * lineHeight));
|
||||||
timeWidth = font->Width("00:00") + 4;
|
timeWidth = font->Width("00:00") + 4;
|
||||||
tArea Areas[] = { { 0, 0, Setup.OSDWidth - 1, Lines * lineHeight - 1, 8 } };
|
tArea Areas[] = { { 0, 0, cOsd::OsdWidth() - 1, Lines * lineHeight - 1, 8 } };
|
||||||
if (Setup.AntiAlias && osd->CanHandleAreas(Areas, sizeof(Areas) / sizeof(tArea)) == oeOk)
|
if (Setup.AntiAlias && osd->CanHandleAreas(Areas, sizeof(Areas) / sizeof(tArea)) == oeOk)
|
||||||
osd->SetAreas(Areas, sizeof(Areas) / sizeof(tArea));
|
osd->SetAreas(Areas, sizeof(Areas) / sizeof(tArea));
|
||||||
else {
|
else {
|
||||||
tArea Areas[] = { { 0, 0, Setup.OSDWidth - 1, Lines * lineHeight - 1, 4 } };
|
tArea Areas[] = { { 0, 0, cOsd::OsdWidth() - 1, Lines * lineHeight - 1, 4 } };
|
||||||
osd->SetAreas(Areas, sizeof(Areas) / sizeof(tArea));
|
osd->SetAreas(Areas, sizeof(Areas) / sizeof(tArea));
|
||||||
}
|
}
|
||||||
osd->DrawRectangle(0, 0, osd->Width() - 1, osd->Height() - 1, Theme.Color(clrBackground));
|
osd->DrawRectangle(0, 0, osd->Width() - 1, osd->Height() - 1, Theme.Color(clrBackground));
|
||||||
@ -187,14 +187,14 @@ cSkinClassicDisplayMenu::cSkinClassicDisplayMenu(void)
|
|||||||
const cFont *font = cFont::GetFont(fontOsd);
|
const cFont *font = cFont::GetFont(fontOsd);
|
||||||
lineHeight = font->Height();
|
lineHeight = font->Height();
|
||||||
x0 = 0;
|
x0 = 0;
|
||||||
x1 = Setup.OSDWidth;
|
x1 = cOsd::OsdWidth();
|
||||||
y0 = 0;
|
y0 = 0;
|
||||||
y1 = lineHeight;
|
y1 = lineHeight;
|
||||||
y2 = y1 + lineHeight;
|
y2 = y1 + lineHeight;
|
||||||
y5 = Setup.OSDHeight;
|
y5 = cOsd::OsdHeight();
|
||||||
y4 = y5 - lineHeight;
|
y4 = y5 - lineHeight;
|
||||||
y3 = y4 - lineHeight;
|
y3 = y4 - lineHeight;
|
||||||
osd = cOsdProvider::NewOsd(Setup.OSDLeft, Setup.OSDTop);
|
osd = cOsdProvider::NewOsd(cOsd::OsdLeft(), cOsd::OsdTop());
|
||||||
tArea Areas[] = { { x0, y0, x1 - 1, y5 - 1, 8 } };
|
tArea Areas[] = { { x0, y0, x1 - 1, y5 - 1, 8 } };
|
||||||
if (Setup.AntiAlias && osd->CanHandleAreas(Areas, sizeof(Areas) / sizeof(tArea)) == oeOk)
|
if (Setup.AntiAlias && osd->CanHandleAreas(Areas, sizeof(Areas) / sizeof(tArea)) == oeOk)
|
||||||
osd->SetAreas(Areas, sizeof(Areas) / sizeof(tArea));
|
osd->SetAreas(Areas, sizeof(Areas) / sizeof(tArea));
|
||||||
@ -426,12 +426,12 @@ cSkinClassicDisplayReplay::cSkinClassicDisplayReplay(bool ModeOnly)
|
|||||||
int lineHeight = font->Height();
|
int lineHeight = font->Height();
|
||||||
lastCurrentWidth = 0;
|
lastCurrentWidth = 0;
|
||||||
x0 = 0;
|
x0 = 0;
|
||||||
x1 = Setup.OSDWidth;
|
x1 = cOsd::OsdWidth();
|
||||||
y0 = 0;
|
y0 = 0;
|
||||||
y1 = lineHeight;
|
y1 = lineHeight;
|
||||||
y2 = 2 * lineHeight;
|
y2 = 2 * lineHeight;
|
||||||
y3 = 3 * lineHeight;
|
y3 = 3 * lineHeight;
|
||||||
osd = cOsdProvider::NewOsd(Setup.OSDLeft, Setup.OSDTop + Setup.OSDHeight - y3);
|
osd = cOsdProvider::NewOsd(cOsd::OsdLeft(), cOsd::OsdTop() + cOsd::OsdHeight() - y3);
|
||||||
tArea Areas[] = { { x0, y0, x1 - 1, y3 - 1, 8 } };
|
tArea Areas[] = { { x0, y0, x1 - 1, y3 - 1, 8 } };
|
||||||
if (Setup.AntiAlias && osd->CanHandleAreas(Areas, sizeof(Areas) / sizeof(tArea)) == oeOk)
|
if (Setup.AntiAlias && osd->CanHandleAreas(Areas, sizeof(Areas) / sizeof(tArea)) == oeOk)
|
||||||
osd->SetAreas(Areas, sizeof(Areas) / sizeof(tArea));
|
osd->SetAreas(Areas, sizeof(Areas) / sizeof(tArea));
|
||||||
@ -526,12 +526,12 @@ cSkinClassicDisplayVolume::cSkinClassicDisplayVolume(void)
|
|||||||
{
|
{
|
||||||
const cFont *font = cFont::GetFont(fontOsd);
|
const cFont *font = cFont::GetFont(fontOsd);
|
||||||
int lineHeight = font->Height();
|
int lineHeight = font->Height();
|
||||||
osd = cOsdProvider::NewOsd(Setup.OSDLeft, Setup.OSDTop + Setup.OSDHeight - lineHeight);
|
osd = cOsdProvider::NewOsd(cOsd::OsdLeft(), cOsd::OsdTop() + cOsd::OsdHeight() - lineHeight);
|
||||||
tArea Areas[] = { { 0, 0, Setup.OSDWidth - 1, lineHeight - 1, 8 } };
|
tArea Areas[] = { { 0, 0, cOsd::OsdWidth() - 1, lineHeight - 1, 8 } };
|
||||||
if (Setup.AntiAlias && osd->CanHandleAreas(Areas, sizeof(Areas) / sizeof(tArea)) == oeOk)
|
if (Setup.AntiAlias && osd->CanHandleAreas(Areas, sizeof(Areas) / sizeof(tArea)) == oeOk)
|
||||||
osd->SetAreas(Areas, sizeof(Areas) / sizeof(tArea));
|
osd->SetAreas(Areas, sizeof(Areas) / sizeof(tArea));
|
||||||
else {
|
else {
|
||||||
tArea Areas[] = { { 0, 0, Setup.OSDWidth - 1, lineHeight - 1, 4 } };
|
tArea Areas[] = { { 0, 0, cOsd::OsdWidth() - 1, lineHeight - 1, 4 } };
|
||||||
osd->SetAreas(Areas, sizeof(Areas) / sizeof(tArea));
|
osd->SetAreas(Areas, sizeof(Areas) / sizeof(tArea));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -591,7 +591,7 @@ cSkinClassicDisplayTracks::cSkinClassicDisplayTracks(const char *Title, int NumT
|
|||||||
ItemsWidth = max(ItemsWidth, font->Width(Tracks[i]));
|
ItemsWidth = max(ItemsWidth, font->Width(Tracks[i]));
|
||||||
ItemsWidth += 10;
|
ItemsWidth += 10;
|
||||||
x0 = 0;
|
x0 = 0;
|
||||||
x1 = Setup.OSDWidth;
|
x1 = cOsd::OsdWidth();
|
||||||
int d = x1 - x0;
|
int d = x1 - x0;
|
||||||
if (d > ItemsWidth) {
|
if (d > ItemsWidth) {
|
||||||
d = (d - ItemsWidth) & ~0x07; // must be multiple of 8
|
d = (d - ItemsWidth) & ~0x07; // must be multiple of 8
|
||||||
@ -600,7 +600,7 @@ cSkinClassicDisplayTracks::cSkinClassicDisplayTracks(const char *Title, int NumT
|
|||||||
y0 = 0;
|
y0 = 0;
|
||||||
y1 = lineHeight;
|
y1 = lineHeight;
|
||||||
y2 = y1 + NumTracks * lineHeight;
|
y2 = y1 + NumTracks * lineHeight;
|
||||||
osd = cOsdProvider::NewOsd(Setup.OSDLeft, Setup.OSDTop + Setup.OSDHeight - y2);
|
osd = cOsdProvider::NewOsd(cOsd::OsdLeft(), cOsd::OsdTop() + cOsd::OsdHeight() - y2);
|
||||||
tArea Areas[] = { { x0, y0, x1 - 1, y2 - 1, 8 } };
|
tArea Areas[] = { { x0, y0, x1 - 1, y2 - 1, 8 } };
|
||||||
if (Setup.AntiAlias && osd->CanHandleAreas(Areas, sizeof(Areas) / sizeof(tArea)) == oeOk)
|
if (Setup.AntiAlias && osd->CanHandleAreas(Areas, sizeof(Areas) / sizeof(tArea)) == oeOk)
|
||||||
osd->SetAreas(Areas, sizeof(Areas) / sizeof(tArea));
|
osd->SetAreas(Areas, sizeof(Areas) / sizeof(tArea));
|
||||||
@ -663,12 +663,12 @@ cSkinClassicDisplayMessage::cSkinClassicDisplayMessage(void)
|
|||||||
{
|
{
|
||||||
const cFont *font = cFont::GetFont(fontOsd);
|
const cFont *font = cFont::GetFont(fontOsd);
|
||||||
int lineHeight = font->Height();
|
int lineHeight = font->Height();
|
||||||
osd = cOsdProvider::NewOsd(Setup.OSDLeft, Setup.OSDTop + Setup.OSDHeight - lineHeight);
|
osd = cOsdProvider::NewOsd(cOsd::OsdLeft(), cOsd::OsdTop() + cOsd::OsdHeight() - lineHeight);
|
||||||
tArea Areas[] = { { 0, 0, Setup.OSDWidth - 1, lineHeight - 1, 8 } };
|
tArea Areas[] = { { 0, 0, cOsd::OsdWidth() - 1, lineHeight - 1, 8 } };
|
||||||
if (Setup.AntiAlias && osd->CanHandleAreas(Areas, sizeof(Areas) / sizeof(tArea)) == oeOk)
|
if (Setup.AntiAlias && osd->CanHandleAreas(Areas, sizeof(Areas) / sizeof(tArea)) == oeOk)
|
||||||
osd->SetAreas(Areas, sizeof(Areas) / sizeof(tArea));
|
osd->SetAreas(Areas, sizeof(Areas) / sizeof(tArea));
|
||||||
else {
|
else {
|
||||||
tArea Areas[] = { { 0, 0, Setup.OSDWidth - 1, lineHeight - 1, 2 } };
|
tArea Areas[] = { { 0, 0, cOsd::OsdWidth() - 1, lineHeight - 1, 2 } };
|
||||||
osd->SetAreas(Areas, sizeof(Areas) / sizeof(tArea));
|
osd->SetAreas(Areas, sizeof(Areas) / sizeof(tArea));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -681,7 +681,7 @@ cSkinClassicDisplayMessage::~cSkinClassicDisplayMessage()
|
|||||||
void cSkinClassicDisplayMessage::SetMessage(eMessageType Type, const char *Text)
|
void cSkinClassicDisplayMessage::SetMessage(eMessageType Type, const char *Text)
|
||||||
{
|
{
|
||||||
const cFont *font = cFont::GetFont(fontOsd);
|
const cFont *font = cFont::GetFont(fontOsd);
|
||||||
osd->DrawText(0, 0, Text, Theme.Color(clrMessageStatusFg + 2 * Type), Theme.Color(clrMessageStatusBg + 2 * Type), font, Setup.OSDWidth, 0, taCenter);
|
osd->DrawText(0, 0, Text, Theme.Color(clrMessageStatusFg + 2 * Type), Theme.Color(clrMessageStatusBg + 2 * Type), font, cOsd::OsdWidth(), 0, taCenter);
|
||||||
}
|
}
|
||||||
|
|
||||||
void cSkinClassicDisplayMessage::Flush(void)
|
void cSkinClassicDisplayMessage::Flush(void)
|
||||||
|
34
skinsttng.c
34
skinsttng.c
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: skinsttng.c 1.20 2007/06/10 12:40:43 kls Exp $
|
* $Id: skinsttng.c 1.21 2007/06/17 13:51:56 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// Star Trek: The Next Generation® is a registered trademark of Paramount Pictures
|
// Star Trek: The Next Generation® is a registered trademark of Paramount Pictures
|
||||||
@ -163,7 +163,7 @@ cSkinSTTNGDisplayChannel::cSkinSTTNGDisplayChannel(bool WithInfo)
|
|||||||
x1 = x0 + font->Width("00:00") + 4;
|
x1 = x0 + font->Width("00:00") + 4;
|
||||||
x2 = x1 + Roundness;
|
x2 = x1 + Roundness;
|
||||||
x3 = x2 + Gap;
|
x3 = x2 + Gap;
|
||||||
x7 = Setup.OSDWidth;
|
x7 = cOsd::OsdWidth();
|
||||||
x6 = x7 - lineHeight / 2;
|
x6 = x7 - lineHeight / 2;
|
||||||
x5 = x6 - lineHeight / 2;
|
x5 = x6 - lineHeight / 2;
|
||||||
x4 = x5 - Gap;
|
x4 = x5 - Gap;
|
||||||
@ -177,7 +177,7 @@ cSkinSTTNGDisplayChannel::cSkinSTTNGDisplayChannel(bool WithInfo)
|
|||||||
y7 = y6 + cFont::GetFont(fontSml)->Height();
|
y7 = y6 + cFont::GetFont(fontSml)->Height();
|
||||||
int yt = (y0 + y1) / 2;
|
int yt = (y0 + y1) / 2;
|
||||||
int yb = (y6 + y7) / 2;
|
int yb = (y6 + y7) / 2;
|
||||||
osd = cOsdProvider::NewOsd(Setup.OSDLeft, Setup.OSDTop + (Setup.ChannelInfoPos ? 0 : Setup.OSDHeight - y7));
|
osd = cOsdProvider::NewOsd(cOsd::OsdLeft(), cOsd::OsdTop() + (Setup.ChannelInfoPos ? 0 : cOsd::OsdHeight() - y7));
|
||||||
tArea Areas[] = { { 0, 0, x7 - 1, y7 - 1, 8 } };
|
tArea Areas[] = { { 0, 0, x7 - 1, y7 - 1, 8 } };
|
||||||
if (Setup.AntiAlias && osd->CanHandleAreas(Areas, sizeof(Areas) / sizeof(tArea)) == oeOk)
|
if (Setup.AntiAlias && osd->CanHandleAreas(Areas, sizeof(Areas) / sizeof(tArea)) == oeOk)
|
||||||
osd->SetAreas(Areas, sizeof(Areas) / sizeof(tArea));
|
osd->SetAreas(Areas, sizeof(Areas) / sizeof(tArea));
|
||||||
@ -209,13 +209,13 @@ cSkinSTTNGDisplayChannel::cSkinSTTNGDisplayChannel(bool WithInfo)
|
|||||||
x1 = lineHeight / 2;
|
x1 = lineHeight / 2;
|
||||||
x2 = lineHeight;
|
x2 = lineHeight;
|
||||||
x3 = x2 + Gap;
|
x3 = x2 + Gap;
|
||||||
x7 = Setup.OSDWidth;
|
x7 = cOsd::OsdWidth();
|
||||||
x6 = x7 - lineHeight / 2;
|
x6 = x7 - lineHeight / 2;
|
||||||
x5 = x6 - lineHeight / 2;
|
x5 = x6 - lineHeight / 2;
|
||||||
x4 = x5 - Gap;
|
x4 = x5 - Gap;
|
||||||
y0 = 0;
|
y0 = 0;
|
||||||
y1 = lineHeight;
|
y1 = lineHeight;
|
||||||
osd = cOsdProvider::NewOsd(Setup.OSDLeft, Setup.OSDTop + (Setup.ChannelInfoPos ? 0 : Setup.OSDHeight - y1));
|
osd = cOsdProvider::NewOsd(cOsd::OsdLeft(), cOsd::OsdTop() + (Setup.ChannelInfoPos ? 0 : cOsd::OsdHeight() - y1));
|
||||||
tArea Areas[] = { { x0, y0, x7 - 1, y1 - 1, 8 } };
|
tArea Areas[] = { { x0, y0, x7 - 1, y1 - 1, 8 } };
|
||||||
if (Setup.AntiAlias && osd->CanHandleAreas(Areas, sizeof(Areas) / sizeof(tArea)) == oeOk)
|
if (Setup.AntiAlias && osd->CanHandleAreas(Areas, sizeof(Areas) / sizeof(tArea)) == oeOk)
|
||||||
osd->SetAreas(Areas, sizeof(Areas) / sizeof(tArea));
|
osd->SetAreas(Areas, sizeof(Areas) / sizeof(tArea));
|
||||||
@ -374,7 +374,7 @@ cSkinSTTNGDisplayMenu::cSkinSTTNGDisplayMenu(void)
|
|||||||
x1 = lineHeight / 2;
|
x1 = lineHeight / 2;
|
||||||
x3 = (x1 + Roundness + Gap + 7) & ~0x07; // must be multiple of 8
|
x3 = (x1 + Roundness + Gap + 7) & ~0x07; // must be multiple of 8
|
||||||
x2 = x3 - Gap;
|
x2 = x3 - Gap;
|
||||||
x7 = Setup.OSDWidth;
|
x7 = cOsd::OsdWidth();
|
||||||
x6 = x7 - lineHeight / 2;
|
x6 = x7 - lineHeight / 2;
|
||||||
x4 = (x6 - lineHeight / 2 - Gap) & ~0x07; // must be multiple of 8
|
x4 = (x6 - lineHeight / 2 - Gap) & ~0x07; // must be multiple of 8
|
||||||
x5 = x4 + Gap;
|
x5 = x4 + Gap;
|
||||||
@ -382,13 +382,13 @@ cSkinSTTNGDisplayMenu::cSkinSTTNGDisplayMenu(void)
|
|||||||
y1 = lineHeight;
|
y1 = lineHeight;
|
||||||
y2 = y1 + Roundness;
|
y2 = y1 + Roundness;
|
||||||
y3 = y2 + Gap;
|
y3 = y2 + Gap;
|
||||||
y7 = Setup.OSDHeight;
|
y7 = cOsd::OsdHeight();
|
||||||
y6 = y7 - cFont::GetFont(fontSml)->Height();
|
y6 = y7 - cFont::GetFont(fontSml)->Height();
|
||||||
y5 = y6 - Roundness;
|
y5 = y6 - Roundness;
|
||||||
y4 = y5 - Gap;
|
y4 = y5 - Gap;
|
||||||
int yt = (y0 + y1) / 2;
|
int yt = (y0 + y1) / 2;
|
||||||
int yb = (y6 + y7) / 2;
|
int yb = (y6 + y7) / 2;
|
||||||
osd = cOsdProvider::NewOsd(Setup.OSDLeft, Setup.OSDTop);
|
osd = cOsdProvider::NewOsd(cOsd::OsdLeft(), cOsd::OsdTop());
|
||||||
tArea Areas[] = { { x0, y0, x7 - 1, y7 - 1, 8 } };
|
tArea Areas[] = { { x0, y0, x7 - 1, y7 - 1, 8 } };
|
||||||
if (Setup.AntiAlias && osd->CanHandleAreas(Areas, sizeof(Areas) / sizeof(tArea)) == oeOk)
|
if (Setup.AntiAlias && osd->CanHandleAreas(Areas, sizeof(Areas) / sizeof(tArea)) == oeOk)
|
||||||
osd->SetAreas(Areas, sizeof(Areas) / sizeof(tArea));
|
osd->SetAreas(Areas, sizeof(Areas) / sizeof(tArea));
|
||||||
@ -703,7 +703,7 @@ cSkinSTTNGDisplayReplay::cSkinSTTNGDisplayReplay(bool ModeOnly)
|
|||||||
x1 = max(SymbolWidth, bm.Width());
|
x1 = max(SymbolWidth, bm.Width());
|
||||||
x2 = x1 + Roundness;
|
x2 = x1 + Roundness;
|
||||||
x3 = x2 + Gap;
|
x3 = x2 + Gap;
|
||||||
x7 = Setup.OSDWidth;
|
x7 = cOsd::OsdWidth();
|
||||||
x6 = x7 - lineHeight / 2;
|
x6 = x7 - lineHeight / 2;
|
||||||
x5 = x6 - lineHeight / 2;
|
x5 = x6 - lineHeight / 2;
|
||||||
x4 = x5 - Gap;
|
x4 = x5 - Gap;
|
||||||
@ -717,7 +717,7 @@ cSkinSTTNGDisplayReplay::cSkinSTTNGDisplayReplay(bool ModeOnly)
|
|||||||
y7 = y6 + font->Height();
|
y7 = y6 + font->Height();
|
||||||
int yt = (y0 + y1) / 2;
|
int yt = (y0 + y1) / 2;
|
||||||
int yb = (y6 + y7) / 2;
|
int yb = (y6 + y7) / 2;
|
||||||
osd = cOsdProvider::NewOsd(Setup.OSDLeft, Setup.OSDTop + Setup.OSDHeight - y7);
|
osd = cOsdProvider::NewOsd(cOsd::OsdLeft(), cOsd::OsdTop() + cOsd::OsdHeight() - y7);
|
||||||
tArea Areas[] = { { 0, 0, x7 - 1, y7 - 1, 8 } };
|
tArea Areas[] = { { 0, 0, x7 - 1, y7 - 1, 8 } };
|
||||||
if (Setup.AntiAlias && osd->CanHandleAreas(Areas, sizeof(Areas) / sizeof(tArea)) == oeOk)
|
if (Setup.AntiAlias && osd->CanHandleAreas(Areas, sizeof(Areas) / sizeof(tArea)) == oeOk)
|
||||||
osd->SetAreas(Areas, sizeof(Areas) / sizeof(tArea));
|
osd->SetAreas(Areas, sizeof(Areas) / sizeof(tArea));
|
||||||
@ -845,13 +845,13 @@ cSkinSTTNGDisplayVolume::cSkinSTTNGDisplayVolume(void)
|
|||||||
x1 = lineHeight / 2;
|
x1 = lineHeight / 2;
|
||||||
x2 = lineHeight;
|
x2 = lineHeight;
|
||||||
x3 = x2 + Gap;
|
x3 = x2 + Gap;
|
||||||
x7 = Setup.OSDWidth;
|
x7 = cOsd::OsdWidth();
|
||||||
x6 = x7 - lineHeight / 2;
|
x6 = x7 - lineHeight / 2;
|
||||||
x5 = x6 - lineHeight / 2;
|
x5 = x6 - lineHeight / 2;
|
||||||
x4 = x5 - Gap;
|
x4 = x5 - Gap;
|
||||||
y0 = 0;
|
y0 = 0;
|
||||||
y1 = lineHeight;
|
y1 = lineHeight;
|
||||||
osd = cOsdProvider::NewOsd(Setup.OSDLeft, Setup.OSDTop + Setup.OSDHeight - y1);
|
osd = cOsdProvider::NewOsd(cOsd::OsdLeft(), cOsd::OsdTop() + cOsd::OsdHeight() - y1);
|
||||||
tArea Areas[] = { { x0, y0, x7 - 1, y1 - 1, 8 } };
|
tArea Areas[] = { { x0, y0, x7 - 1, y1 - 1, 8 } };
|
||||||
if (Setup.AntiAlias && osd->CanHandleAreas(Areas, sizeof(Areas) / sizeof(tArea)) == oeOk)
|
if (Setup.AntiAlias && osd->CanHandleAreas(Areas, sizeof(Areas) / sizeof(tArea)) == oeOk)
|
||||||
osd->SetAreas(Areas, sizeof(Areas) / sizeof(tArea));
|
osd->SetAreas(Areas, sizeof(Areas) / sizeof(tArea));
|
||||||
@ -943,7 +943,7 @@ cSkinSTTNGDisplayTracks::cSkinSTTNGDisplayTracks(const char *Title, int NumTrack
|
|||||||
x1 = lineHeight / 2;
|
x1 = lineHeight / 2;
|
||||||
x3 = (x1 + Roundness + Gap + 7) & ~0x07; // must be multiple of 8
|
x3 = (x1 + Roundness + Gap + 7) & ~0x07; // must be multiple of 8
|
||||||
x2 = x3 - Gap;
|
x2 = x3 - Gap;
|
||||||
x7 = Setup.OSDWidth;
|
x7 = cOsd::OsdWidth();
|
||||||
x6 = x7 - lineHeight / 2;
|
x6 = x7 - lineHeight / 2;
|
||||||
x4 = (x6 - lineHeight / 2 - Gap) & ~0x07; // must be multiple of 8
|
x4 = (x6 - lineHeight / 2 - Gap) & ~0x07; // must be multiple of 8
|
||||||
x5 = x4 + Gap;
|
x5 = x4 + Gap;
|
||||||
@ -959,14 +959,14 @@ cSkinSTTNGDisplayTracks::cSkinSTTNGDisplayTracks(const char *Title, int NumTrack
|
|||||||
y1 = lineHeight;
|
y1 = lineHeight;
|
||||||
y2 = y1 + Roundness;
|
y2 = y1 + Roundness;
|
||||||
y3 = y2 + Gap;
|
y3 = y2 + Gap;
|
||||||
// limit to Setup.OSDHeight? - what if height is too big???
|
// limit to cOsd::OsdHeight()? - what if height is too big???
|
||||||
y4 = y3 + NumTracks * lineHeight + 2 * Roundness;
|
y4 = y3 + NumTracks * lineHeight + 2 * Roundness;
|
||||||
y5 = y4 + Gap;
|
y5 = y4 + Gap;
|
||||||
y6 = y5 + Roundness;
|
y6 = y5 + Roundness;
|
||||||
y7 = y6 + cFont::GetFont(fontSml)->Height();
|
y7 = y6 + cFont::GetFont(fontSml)->Height();
|
||||||
int yt = (y0 + y1) / 2;
|
int yt = (y0 + y1) / 2;
|
||||||
int yb = (y6 + y7) / 2;
|
int yb = (y6 + y7) / 2;
|
||||||
osd = cOsdProvider::NewOsd(Setup.OSDLeft, Setup.OSDTop + Setup.OSDHeight - y7);
|
osd = cOsdProvider::NewOsd(cOsd::OsdLeft(), cOsd::OsdTop() + cOsd::OsdHeight() - y7);
|
||||||
tArea Areas[] = { { x0, y0, x7 - 1, y7 - 1, 8 } };
|
tArea Areas[] = { { x0, y0, x7 - 1, y7 - 1, 8 } };
|
||||||
if (Setup.AntiAlias && osd->CanHandleAreas(Areas, sizeof(Areas) / sizeof(tArea)) == oeOk)
|
if (Setup.AntiAlias && osd->CanHandleAreas(Areas, sizeof(Areas) / sizeof(tArea)) == oeOk)
|
||||||
osd->SetAreas(Areas, sizeof(Areas) / sizeof(tArea));
|
osd->SetAreas(Areas, sizeof(Areas) / sizeof(tArea));
|
||||||
@ -1087,13 +1087,13 @@ cSkinSTTNGDisplayMessage::cSkinSTTNGDisplayMessage(void)
|
|||||||
x1 = lineHeight / 2;
|
x1 = lineHeight / 2;
|
||||||
x2 = lineHeight;
|
x2 = lineHeight;
|
||||||
x3 = x2 + Gap;
|
x3 = x2 + Gap;
|
||||||
x7 = Setup.OSDWidth;
|
x7 = cOsd::OsdWidth();
|
||||||
x6 = x7 - lineHeight / 2;
|
x6 = x7 - lineHeight / 2;
|
||||||
x5 = x6 - lineHeight / 2;
|
x5 = x6 - lineHeight / 2;
|
||||||
x4 = x5 - Gap;
|
x4 = x5 - Gap;
|
||||||
y0 = 0;
|
y0 = 0;
|
||||||
y1 = lineHeight;
|
y1 = lineHeight;
|
||||||
osd = cOsdProvider::NewOsd(Setup.OSDLeft, Setup.OSDTop + Setup.OSDHeight - y1);
|
osd = cOsdProvider::NewOsd(cOsd::OsdLeft(), cOsd::OsdTop() + cOsd::OsdHeight() - y1);
|
||||||
tArea Areas[] = { { x0, y0, x7 - 1, y1 - 1, 8 } };
|
tArea Areas[] = { { x0, y0, x7 - 1, y1 - 1, 8 } };
|
||||||
if (Setup.AntiAlias && osd->CanHandleAreas(Areas, sizeof(Areas) / sizeof(tArea)) == oeOk)
|
if (Setup.AntiAlias && osd->CanHandleAreas(Areas, sizeof(Areas) / sizeof(tArea)) == oeOk)
|
||||||
osd->SetAreas(Areas, sizeof(Areas) / sizeof(tArea));
|
osd->SetAreas(Areas, sizeof(Areas) / sizeof(tArea));
|
||||||
|
8
thread.c
8
thread.c
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: thread.c 1.60 2007/02/24 16:13:33 kls Exp $
|
* $Id: thread.c 1.61 2007/06/17 12:43:40 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "thread.h"
|
#include "thread.h"
|
||||||
@ -12,6 +12,7 @@
|
|||||||
#include <linux/unistd.h>
|
#include <linux/unistd.h>
|
||||||
#include <malloc.h>
|
#include <malloc.h>
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
|
#include <stdlib.h>
|
||||||
#include <sys/resource.h>
|
#include <sys/resource.h>
|
||||||
#include <sys/syscall.h>
|
#include <sys/syscall.h>
|
||||||
#include <sys/time.h>
|
#include <sys/time.h>
|
||||||
@ -507,7 +508,7 @@ int SystemExec(const char *Command, bool Detached)
|
|||||||
|
|
||||||
if (pid > 0) { // parent process
|
if (pid > 0) { // parent process
|
||||||
int status = 0;
|
int status = 0;
|
||||||
if (!Detached && waitpid(pid, &status, 0) < 0) {
|
if (waitpid(pid, &status, 0) < 0) {
|
||||||
LOG_ERROR;
|
LOG_ERROR;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@ -515,6 +516,9 @@ int SystemExec(const char *Command, bool Detached)
|
|||||||
}
|
}
|
||||||
else { // child process
|
else { // child process
|
||||||
if (Detached) {
|
if (Detached) {
|
||||||
|
// Fork again and let first child die - grandchild stays alive without parent
|
||||||
|
if (fork() > 0)
|
||||||
|
exit(0);
|
||||||
// Start a new session
|
// Start a new session
|
||||||
pid_t sid = setsid();
|
pid_t sid = setsid();
|
||||||
if (sid < 0)
|
if (sid < 0)
|
||||||
|
8
timers.c
8
timers.c
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: timers.c 1.66 2007/06/03 13:48:57 kls Exp $
|
* $Id: timers.c 1.67 2007/06/16 10:41:21 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "timers.h"
|
#include "timers.h"
|
||||||
@ -78,7 +78,7 @@ cTimer::cTimer(const cEvent *Event)
|
|||||||
*file = 0;
|
*file = 0;
|
||||||
const char *Title = Event->Title();
|
const char *Title = Event->Title();
|
||||||
if (!isempty(Title))
|
if (!isempty(Title))
|
||||||
strn0cpy(file, Event->Title(), sizeof(file));
|
Utf8Strn0Cpy(file, Event->Title(), sizeof(file));
|
||||||
aux = NULL;
|
aux = NULL;
|
||||||
event = NULL; // let SetEvent() be called to get a log message
|
event = NULL; // let SetEvent() be called to get a log message
|
||||||
}
|
}
|
||||||
@ -286,7 +286,7 @@ bool cTimer::Parse(const char *s)
|
|||||||
}
|
}
|
||||||
//TODO add more plausibility checks
|
//TODO add more plausibility checks
|
||||||
result = ParseDay(daybuffer, day, weekdays);
|
result = ParseDay(daybuffer, day, weekdays);
|
||||||
strn0cpy(file, filebuffer, MaxFileName);
|
Utf8Strn0Cpy(file, filebuffer, MaxFileName);
|
||||||
strreplace(file, '|', ':');
|
strreplace(file, '|', ':');
|
||||||
if (isnumber(channelbuffer))
|
if (isnumber(channelbuffer))
|
||||||
channel = Channels.GetByNumber(atoi(channelbuffer));
|
channel = Channels.GetByNumber(atoi(channelbuffer));
|
||||||
@ -358,7 +358,7 @@ time_t cTimer::SetTime(time_t t, int SecondsFromMidnight)
|
|||||||
char *cTimer::SetFile(const char *File)
|
char *cTimer::SetFile(const char *File)
|
||||||
{
|
{
|
||||||
if (!isempty(File))
|
if (!isempty(File))
|
||||||
strn0cpy(file, File, sizeof(file));
|
Utf8Strn0Cpy(file, File, sizeof(file));
|
||||||
return file;
|
return file;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
74
tools.c
74
tools.c
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: tools.c 1.123 2007/06/09 14:21:21 kls Exp $
|
* $Id: tools.c 1.129 2007/06/17 11:02:34 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "tools.h"
|
#include "tools.h"
|
||||||
@ -649,6 +649,37 @@ int Utf8SymChars(const char *s, int Symbols)
|
|||||||
return n;
|
return n;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int Utf8StrLen(const char *s)
|
||||||
|
{
|
||||||
|
if (cCharSetConv::SystemCharacterTable())
|
||||||
|
return strlen(s);
|
||||||
|
int n = 0;
|
||||||
|
while (*s) {
|
||||||
|
s += Utf8CharLen(s);
|
||||||
|
n++;
|
||||||
|
}
|
||||||
|
return n;
|
||||||
|
}
|
||||||
|
|
||||||
|
char *Utf8Strn0Cpy(char *Dest, const char *Src, int n)
|
||||||
|
{
|
||||||
|
if (cCharSetConv::SystemCharacterTable())
|
||||||
|
return strn0cpy(Dest, Src, n);
|
||||||
|
char *d = Dest;
|
||||||
|
while (*Src) {
|
||||||
|
int sl = Utf8CharLen(Src);
|
||||||
|
n -= sl;
|
||||||
|
if (n > 0) {
|
||||||
|
while (sl--)
|
||||||
|
*d++ = *Src++;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
*d = 0;
|
||||||
|
return Dest;
|
||||||
|
}
|
||||||
|
|
||||||
int Utf8ToArray(const char *s, uint *a, int Size)
|
int Utf8ToArray(const char *s, uint *a, int Size)
|
||||||
{
|
{
|
||||||
int n = 0;
|
int n = 0;
|
||||||
@ -720,7 +751,7 @@ void cCharSetConv::SetSystemCharacterTable(const char *CharacterTable)
|
|||||||
{
|
{
|
||||||
free(systemCharacterTable);
|
free(systemCharacterTable);
|
||||||
systemCharacterTable = NULL;
|
systemCharacterTable = NULL;
|
||||||
if (!strcasestr(CharacterTable, "UTF")) {
|
if (!strcasestr(CharacterTable, "UTF-8")) {
|
||||||
// Set up a map for the character values 128...255:
|
// Set up a map for the character values 128...255:
|
||||||
char buf[129];
|
char buf[129];
|
||||||
for (int i = 0; i < 128; i++)
|
for (int i = 0; i < 128; i++)
|
||||||
@ -741,7 +772,7 @@ void cCharSetConv::SetSystemCharacterTable(const char *CharacterTable)
|
|||||||
|
|
||||||
const char *cCharSetConv::Convert(const char *From, char *To, size_t ToLength)
|
const char *cCharSetConv::Convert(const char *From, char *To, size_t ToLength)
|
||||||
{
|
{
|
||||||
if (cd != (iconv_t)-1) {
|
if (cd != (iconv_t)-1 && From && *From) {
|
||||||
char *FromPtr = (char *)From;
|
char *FromPtr = (char *)From;
|
||||||
size_t FromLength = strlen(From);
|
size_t FromLength = strlen(From);
|
||||||
char *ToPtr = To;
|
char *ToPtr = To;
|
||||||
@ -1105,21 +1136,39 @@ struct dirent *cReadDir::Next(void)
|
|||||||
return directory && readdir_r(directory, &u.d, &result) == 0 ? result : NULL;
|
return directory && readdir_r(directory, &u.d, &result) == 0 ? result : NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
// --- cFileNameList ---------------------------------------------------------
|
// --- cStringList -----------------------------------------------------------
|
||||||
|
|
||||||
cFileNameList::cFileNameList(const char *Directory)
|
cStringList::~cStringList()
|
||||||
{
|
{
|
||||||
Load(Directory);
|
Clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
cFileNameList::~cFileNameList()
|
int cStringList::Find(const char *s) const
|
||||||
|
{
|
||||||
|
for (int i = 0; i < Size(); i++) {
|
||||||
|
if (!strcmp(s, At(i)))
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
void cStringList::Clear(void)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < Size(); i++)
|
for (int i = 0; i < Size(); i++)
|
||||||
free(At(i));
|
free(At(i));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// --- cFileNameList ---------------------------------------------------------
|
||||||
|
|
||||||
|
// TODO better GetFileNames(const char *Directory, cStringList *List)?
|
||||||
|
cFileNameList::cFileNameList(const char *Directory)
|
||||||
|
{
|
||||||
|
Load(Directory);
|
||||||
|
}
|
||||||
|
|
||||||
bool cFileNameList::Load(const char *Directory)
|
bool cFileNameList::Load(const char *Directory)
|
||||||
{
|
{
|
||||||
|
Clear();
|
||||||
if (Directory) {
|
if (Directory) {
|
||||||
cReadDir d(Directory);
|
cReadDir d(Directory);
|
||||||
struct dirent *e;
|
struct dirent *e;
|
||||||
@ -1128,7 +1177,7 @@ bool cFileNameList::Load(const char *Directory)
|
|||||||
if (strcmp(e->d_name, ".") && strcmp(e->d_name, ".."))
|
if (strcmp(e->d_name, ".") && strcmp(e->d_name, ".."))
|
||||||
Append(strdup(e->d_name));
|
Append(strdup(e->d_name));
|
||||||
}
|
}
|
||||||
Sort(CompareStrings);
|
Sort();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -1137,15 +1186,6 @@ bool cFileNameList::Load(const char *Directory)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
int cFileNameList::Find(const char *FileName)
|
|
||||||
{
|
|
||||||
for (int i = 0; i < Size(); i++) {
|
|
||||||
if (!strcmp(FileName, At(i)))
|
|
||||||
return i;
|
|
||||||
}
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// --- cFile -----------------------------------------------------------------
|
// --- cFile -----------------------------------------------------------------
|
||||||
|
|
||||||
bool cFile::files[FD_SETSIZE] = { false };
|
bool cFile::files[FD_SETSIZE] = { false };
|
||||||
|
52
tools.h
52
tools.h
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: tools.h 1.98 2007/06/10 08:46:23 kls Exp $
|
* $Id: tools.h 1.102 2007/06/17 11:00:20 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef __TOOLS_H
|
#ifndef __TOOLS_H
|
||||||
@ -92,7 +92,15 @@ int Utf8CharSet(uint c, char *s = NULL);
|
|||||||
///< is given, only the number of bytes is returned and nothing is copied.
|
///< is given, only the number of bytes is returned and nothing is copied.
|
||||||
int Utf8SymChars(const char *s, int Symbols);
|
int Utf8SymChars(const char *s, int Symbols);
|
||||||
///< Returns the number of character bytes at the beginning of the given
|
///< Returns the number of character bytes at the beginning of the given
|
||||||
///< string that form at most the given number of UTF-8 Symbols.
|
///< string that form at most the given number of UTF-8 symbols.
|
||||||
|
int Utf8StrLen(const char *s);
|
||||||
|
///< Returns the number of UTF-8 symbols formed by the given string of
|
||||||
|
///< character bytes.
|
||||||
|
char *Utf8Strn0Cpy(char *Dest, const char *Src, int n);
|
||||||
|
///< Copies at most n character bytes from Src to Dst, making sure that the
|
||||||
|
///< resulting copy ends with a complete UTF-8 symbol. The copy is guaranteed
|
||||||
|
///< to be zero terminated.
|
||||||
|
///< Returns a pointer to Dest.
|
||||||
int Utf8ToArray(const char *s, uint *a, int Size);
|
int Utf8ToArray(const char *s, uint *a, int Size);
|
||||||
///< Converts the given character bytes (including the terminating 0) into an
|
///< Converts the given character bytes (including the terminating 0) into an
|
||||||
///< array of UTF-8 symbols of the given Size. Returns the number of symbols
|
///< array of UTF-8 symbols of the given Size. Returns the number of symbols
|
||||||
@ -394,7 +402,17 @@ private:
|
|||||||
mutable int allocated;
|
mutable int allocated;
|
||||||
mutable int size;
|
mutable int size;
|
||||||
mutable T *data;
|
mutable T *data;
|
||||||
void Realloc(int NewAllocated) const { data = (T *)realloc(data, (allocated = NewAllocated) * sizeof(T)); }
|
cVector(const cVector &Vector) {} // don't copy...
|
||||||
|
cVector &operator=(const cVector &Vector) { return *this; } // ...or assign this!
|
||||||
|
void Realloc(int Index) const
|
||||||
|
{
|
||||||
|
if (++Index > allocated) {
|
||||||
|
data = (T *)realloc(data, Index * sizeof(T));
|
||||||
|
for (int i = allocated; i < Index; i++)
|
||||||
|
data[i] = T(0);
|
||||||
|
allocated = Index;
|
||||||
|
}
|
||||||
|
}
|
||||||
public:
|
public:
|
||||||
cVector(int Allocated = 10)
|
cVector(int Allocated = 10)
|
||||||
{
|
{
|
||||||
@ -406,8 +424,9 @@ public:
|
|||||||
virtual ~cVector() { free(data); }
|
virtual ~cVector() { free(data); }
|
||||||
T& At(int Index) const
|
T& At(int Index) const
|
||||||
{
|
{
|
||||||
|
Realloc(Index);
|
||||||
if (Index >= size)
|
if (Index >= size)
|
||||||
Realloc(size = Index + 1);
|
size = Index + 1;
|
||||||
return data[Index];
|
return data[Index];
|
||||||
}
|
}
|
||||||
const T& operator[](int Index) const
|
const T& operator[](int Index) const
|
||||||
@ -419,12 +438,24 @@ public:
|
|||||||
return At(Index);
|
return At(Index);
|
||||||
}
|
}
|
||||||
int Size(void) const { return size; }
|
int Size(void) const { return size; }
|
||||||
|
virtual void Insert(T Data, int Before = 0)
|
||||||
|
{
|
||||||
|
if (Before < size) {
|
||||||
|
Realloc(size);
|
||||||
|
memmove(&data[Before + 1], &data[Before], (size - Before) * sizeof(T));
|
||||||
|
size++;
|
||||||
|
data[Before] = Data;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
Append(Data);
|
||||||
|
}
|
||||||
virtual void Append(T Data)
|
virtual void Append(T Data)
|
||||||
{
|
{
|
||||||
if (size >= allocated)
|
if (size >= allocated)
|
||||||
Realloc(allocated * 4 / 2); // increase size by 50%
|
Realloc(allocated * 4 / 2); // increase size by 50%
|
||||||
data[size++] = Data;
|
data[size++] = Data;
|
||||||
}
|
}
|
||||||
|
virtual void Clear(void) {}
|
||||||
void Sort(__compar_fn_t Compare)
|
void Sort(__compar_fn_t Compare)
|
||||||
{
|
{
|
||||||
qsort(data, size, sizeof(T), Compare);
|
qsort(data, size, sizeof(T), Compare);
|
||||||
@ -436,12 +467,19 @@ inline int CompareStrings(const void *a, const void *b)
|
|||||||
return strcmp(*(const char **)a, *(const char **)b);
|
return strcmp(*(const char **)a, *(const char **)b);
|
||||||
}
|
}
|
||||||
|
|
||||||
class cFileNameList : public cVector<char *> {
|
class cStringList : public cVector<char *> {
|
||||||
|
public:
|
||||||
|
cStringList(int Allocated = 10): cVector<char *>(Allocated) {}
|
||||||
|
virtual ~cStringList();
|
||||||
|
int Find(const char *s) const;
|
||||||
|
void Sort(void) { cVector<char *>::Sort(CompareStrings); }
|
||||||
|
virtual void Clear(void);
|
||||||
|
};
|
||||||
|
|
||||||
|
class cFileNameList : public cStringList {
|
||||||
public:
|
public:
|
||||||
cFileNameList(const char *Directory = NULL);
|
cFileNameList(const char *Directory = NULL);
|
||||||
virtual ~cFileNameList();
|
|
||||||
bool Load(const char *Directory);
|
bool Load(const char *Directory);
|
||||||
int Find(const char *FileName);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class cHashObject : public cListObject {
|
class cHashObject : public cListObject {
|
||||||
|
33
vdr.c
33
vdr.c
@ -22,11 +22,12 @@
|
|||||||
*
|
*
|
||||||
* The project's page is at http://www.cadsoft.de/vdr
|
* The project's page is at http://www.cadsoft.de/vdr
|
||||||
*
|
*
|
||||||
* $Id: vdr.c 1.291 2007/06/09 12:33:53 kls Exp $
|
* $Id: vdr.c 1.293 2007/06/17 11:23:08 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <getopt.h>
|
#include <getopt.h>
|
||||||
#include <grp.h>
|
#include <grp.h>
|
||||||
|
#include <langinfo.h>
|
||||||
#include <locale.h>
|
#include <locale.h>
|
||||||
#include <pwd.h>
|
#include <pwd.h>
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
@ -493,18 +494,22 @@ int main(int argc, char *argv[])
|
|||||||
|
|
||||||
// Set the system character table:
|
// Set the system character table:
|
||||||
|
|
||||||
char *LangEnv = setlocale(LC_CTYPE, "");
|
char *CodeSet = NULL;
|
||||||
if (!LangEnv)
|
if (setlocale(LC_CTYPE, ""))
|
||||||
LangEnv = getenv("LANG"); // last resort in case locale stuff isn't installed
|
CodeSet = nl_langinfo(CODESET);
|
||||||
if (LangEnv) {
|
else {
|
||||||
char *CodeSet = strchr(LangEnv, '.');
|
char *LangEnv = getenv("LANG"); // last resort in case locale stuff isn't installed
|
||||||
if (CodeSet) {
|
if (LangEnv) {
|
||||||
CodeSet++; // skip the dot
|
CodeSet = strchr(LangEnv, '.');
|
||||||
bool known = SI::SetSystemCharacterTable(CodeSet);
|
if (CodeSet)
|
||||||
isyslog("codeset is '%s' - %s", CodeSet, known ? "known" : "unknown");
|
CodeSet++; // skip the dot
|
||||||
cCharSetConv::SetSystemCharacterTable(CodeSet);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (CodeSet) {
|
||||||
|
bool known = SI::SetSystemCharacterTable(CodeSet);
|
||||||
|
isyslog("codeset is '%s' - %s", CodeSet, known ? "known" : "unknown");
|
||||||
|
cCharSetConv::SetSystemCharacterTable(CodeSet);
|
||||||
|
}
|
||||||
|
|
||||||
// Main program loop variables - need to be here to have them initialized before any EXIT():
|
// Main program loop variables - need to be here to have them initialized before any EXIT():
|
||||||
|
|
||||||
@ -545,6 +550,12 @@ int main(int argc, char *argv[])
|
|||||||
))
|
))
|
||||||
EXIT(2);
|
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:
|
||||||
|
|
||||||
Recordings.Update();
|
Recordings.Update();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user