From d4bff4c520220614172d1133ac5b6d1b63661b5b Mon Sep 17 00:00:00 2001 From: marschap Date: Wed, 25 Apr 2007 21:13:45 +0000 Subject: [PATCH] new option Offset for xosd driver --- ChangeLog | 4 ++ LCDd.conf | 5 ++- docs/lcdproc-user/drivers/xosd.docbook | 58 ++++++++++++++++++++++++++ server/drivers/xosdlib_drv.c | 36 +++++++++++++--- server/drivers/xosdlib_drv.h | 1 + 5 files changed, 97 insertions(+), 7 deletions(-) diff --git a/ChangeLog b/ChangeLog index 112adee..fae7c6c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -6,6 +6,10 @@ Key: * Something changed / fixed v.0.5dev (ongoing development) + * lcdexec: notification when called program finishes + * xosd driver: offset from top-left corner + +v.0.5.2 (unreleased) * fix switching on/off the Load screen in lcdproc client using the menu * refactor adv_bignum: support height > 4, loadable chars with offset * ged rid of global variables buffer & tmp in lcdproc client diff --git a/LCDd.conf b/LCDd.conf index 85befed..0eea2ff 100644 --- a/LCDd.conf +++ b/LCDd.conf @@ -950,7 +950,10 @@ Speed=19200 # set display size [default: 20x4] Size=20x4 -# font to use, in XLFD format, as given by "xfontsel" +# Offset in pixels from the top-left corner of the monitor [default: 0x0] +Offset=200x200 + +# X font to use, in XLFD format, as given by "xfontsel" Font=-*-terminus-*-r-*-*-*-320-*-*-*-*-* # EOF diff --git a/docs/lcdproc-user/drivers/xosd.docbook b/docs/lcdproc-user/drivers/xosd.docbook index 8daf5be..93fc27a 100644 --- a/docs/lcdproc-user/drivers/xosd.docbook +++ b/docs/lcdproc-user/drivers/xosd.docbook @@ -34,6 +34,24 @@ on-screen display (OSD) used by most modern televisions and video-players. + + + Offset= + + X-OFFSET + x + Y-OFFSET + + + + Offset (in pixels) of the top-left corner of LCDproc's + xosd window from the top-left corner of the monitor. + If not given, it defaults to 0x0. + + + +Offset=200x200 + Font= @@ -52,6 +70,46 @@ on-screen display (OSD) used by most modern televisions and video-players. + + diff --git a/server/drivers/xosdlib_drv.c b/server/drivers/xosdlib_drv.c index 5929d9a..17716fc 100644 --- a/server/drivers/xosdlib_drv.c +++ b/server/drivers/xosdlib_drv.c @@ -57,7 +57,9 @@ MODULE_EXPORT char *symbol_prefix = "xosdlib_drv_"; MODULE_EXPORT int xosdlib_drv_init (Driver *drvthis) { - char size[LCD_MAX_WIDTH+1] = DEFAULT_SIZE; + const char *size; + const char *offset; + int x, y; int tmp; PrivateData *p; @@ -84,9 +86,7 @@ xosdlib_drv_init (Driver *drvthis) int w; int h; - strncpy(size, drvthis->config_get_string(drvthis->name, "Size", - 0, DEFAULT_SIZE), sizeof(size)); - size[sizeof(size) - 1] = '\0'; + size = drvthis->config_get_string(drvthis->name, "Size", 0, DEFAULT_SIZE); debug(RPT_INFO, "%s: Size (in config) is '%s'", __FUNCTION__, size); if ((sscanf(size, "%dx%d", &w, &h) != 2) || (w <= 0) || (w > LCD_MAX_WIDTH) || @@ -110,6 +110,20 @@ xosdlib_drv_init (Driver *drvthis) } report(RPT_INFO, "%s: using size %dx%d", drvthis->name, p->width, p->height); + /* Which x/y offsets */ + offset = drvthis->config_get_string(drvthis->name, "Offset", 0, DEFAULT_OFFSET); + debug(RPT_INFO, "%s: Offset (in config) is '%s'", __FUNCTION__, offset); + if (sscanf(offset, "%dx%d", &x, &y) != 2) { + report(RPT_WARNING, "%s: cannot read Offset: %s. using default %s", + drvthis->name, offset, DEFAULT_OFFSET); + sscanf(DEFAULT_OFFSET, "%dx%d", &x, &y); + } + p->xoffs= x; + p->yoffs = y; + + report(RPT_INFO, "%s: using offset %dx%d", drvthis->name, p->xoffs, p->yoffs); + + /* Which backlight brightness */ tmp = drvthis->config_get_int(drvthis->name, "Brightness", 0, DEFAULT_BRIGHTNESS); debug(RPT_INFO, "%s: Brightness (in config) is '%d'", __FUNCTION__, tmp); @@ -144,10 +158,20 @@ xosdlib_drv_init (Driver *drvthis) } /* set font */ - if (xosd_set_font(p->osd, p->font) == -1) { + if (xosd_set_font(p->osd, p->font) != 0) { report(RPT_ERR, "%s: xosd_set_font() failed", drvthis->name); return -1; - } + } + + /* set x/y offsets */ + if (xosd_set_horizontal_offset(p->osd, p->xoffs) != 0) { + report(RPT_ERR, "%s: xosd_set_horizontal_offset() failed", drvthis->name); + return -1; + } + if (xosd_set_vertical_offset(p->osd, p->yoffs) != 0) { + report(RPT_ERR, "%s: xosd_set_vertical_offset() failed", drvthis->name); + return -1; + } /* make sure the frame buffer is there... */ p->framebuf = (unsigned char *) malloc(p->width * p->height); diff --git a/server/drivers/xosdlib_drv.h b/server/drivers/xosdlib_drv.h index 530cdfd..2a55a51 100644 --- a/server/drivers/xosdlib_drv.h +++ b/server/drivers/xosdlib_drv.h @@ -5,6 +5,7 @@ #define DEFAULT_FONT "fixed" #define DEFAULT_SIZE "20x4" +#define DEFAULT_OFFSET "0x0" #define DEFAULT_CONTRAST 500 #define DEFAULT_BRIGHTNESS 1000 #define DEFAULT_OFFBRIGHTNESS 500