curses driver: new option DrawBorder (Bruno Schwander)

This commit is contained in:
marschap
2007-10-09 07:28:21 +00:00
parent f30af62574
commit f93e6dec47
5 changed files with 89 additions and 64 deletions
+1
View File
@@ -31,6 +31,7 @@ v.0.5dev (ongoing development)
* a bit more Doxygen-ation and documentation * a bit more Doxygen-ation and documentation
* hd44780 driver: make ConnectionType 4bit more fool-proof (M. Dolze) * hd44780 driver: make ConnectionType 4bit more fool-proof (M. Dolze)
* picolcd driver: overhaul USB init for more portability (M. Dolze) * picolcd driver: overhaul USB init for more portability (M. Dolze)
+ curses driver: new option DrawBorder (Bruno Schwander)
v.0.5.2 v.0.5.2
* fix switching on/off the Load screen in lcdproc client using the menu * fix switching on/off the Load screen in lcdproc client using the menu
+2
View File
@@ -252,6 +252,8 @@ TopLeftY=7
# use ASC symbols for icons & bars [default: no; legal, yes, no] # use ASC symbols for icons & bars [default: no; legal, yes, no]
UseACS=no UseACS=no
# draw Border [default: yes; legal: yes, no]
DrawBorder=yes
## Cwlinux driver ## ## Cwlinux driver ##
+15
View File
@@ -117,6 +117,21 @@ curses chipset.
instead of simple ASCII characters. instead of simple ASCII characters.
</para></listitem> </para></listitem>
</varlistentry> </varlistentry>
<varlistentry>
<term>
<command>DrawBorder=</command>
<arg choice ="plain">
<group choice="req">
<arg choice="plain"><literal><emphasis>yes</emphasis></literal></arg>
<arg choice="plain"><literal>no</literal></arg>
</group>
</arg>
</term>
<listitem><para>
Tell whether to draw a border around the screen.
</para></listitem>
</varlistentry>
</variablelist> </variablelist>
</sect3> </sect3>
+56 -51
View File
@@ -22,21 +22,21 @@
/* /*
Different implementations of (n)curses available on: Different implementations of (n)curses available on:
OpenBSD: - OpenBSD:
http://www.openbsd.org/cgi-bin/cvsweb/src/lib/libcurses/ http://www.openbsd.org/cgi-bin/cvsweb/src/lib/libcurses/
ncurses ncurses
NetBSD: - NetBSD:
http://cvsweb.netbsd.org/bsdweb.cgi/basesrc/lib/libcurses/ http://cvsweb.netbsd.org/bsdweb.cgi/basesrc/lib/libcurses/
curses : does not define ACS_S3, ACS_S7, wcolor_set() or redrawwin(). curses : does not define ACS_S3, ACS_S7, wcolor_set() or redrawwin().
it is possible to make a: it is possible to make a:
#define ACS_S3 (_acs_char['p']) #define ACS_S3 (_acs_char['p'])
#define ACS_S7 (_acs_char['r']) #define ACS_S7 (_acs_char['r'])
FreeBSD: - FreeBSD:
http://www.freebsd.org/cgi/cvsweb.cgi/src/ http://www.freebsd.org/cgi/cvsweb.cgi/src/
ncurses ncurses
RedHat, Debian, (most distros) Linux: - RedHat, Debian, (most distros) Linux:
ncurses ncurses
SunOS (5.5.1): - SunOS (5.5.1):
curses : does not define ACS_S3, ACS_S7 or wcolor_set(). curses : does not define ACS_S3, ACS_S7 or wcolor_set().
it is possible to make a: it is possible to make a:
#define ACS_S3 (acs_map['p']) #define ACS_S3 (acs_map['p'])
@@ -97,18 +97,10 @@ SunOS (5.5.1):
# endif # endif
#endif #endif
// Character used for title bars...
#define PAD '#'
// #define PAD ACS_BLOCK
/* A few different nice pairs of colors to use... */ /* A few different nice pairs of colors to use... */
#define DEFAULT_FOREGROUND_COLOR COLOR_CYAN #define DEFAULT_FOREGROUND_COLOR COLOR_CYAN
#define DEFAULT_BACKGROUND_COLOR COLOR_BLUE #define DEFAULT_BACKGROUND_COLOR COLOR_BLUE
/* What position (X,Y) to start the left top corner at... */
#define TOP_LEFT_X 7
#define TOP_LEFT_Y 7
typedef struct driver_private_data { typedef struct driver_private_data {
WINDOW *win; WINDOW *win;
@@ -126,6 +118,8 @@ typedef struct driver_private_data {
int yoffs; int yoffs;
int useACS; int useACS;
int drawBorder;
} PrivateData; } PrivateData;
@@ -135,54 +129,37 @@ MODULE_EXPORT int stay_in_foreground = 1;
MODULE_EXPORT int supports_multiple = 0; MODULE_EXPORT int supports_multiple = 0;
MODULE_EXPORT char *symbol_prefix = "curses_"; MODULE_EXPORT char *symbol_prefix = "curses_";
// local helper functions
void curses_restore_screen (Driver *drvthis); static chtype get_color_by_name (char *colorname, chtype default_color);
static void curses_restore_screen (Driver *drvthis);
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
////////////////////// For Curses Terminal Output //////////////////////// ////////////////////// For Curses Terminal Output ////////////////////////
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
chtype get_color (char *colorstr) { static chtype
if (strcasecmp(colorstr, "red") == 0) get_color_by_name (char *colorname, chtype default_color) {
if (strcasecmp(colorname, "red") == 0)
return COLOR_RED; return COLOR_RED;
else if (strcasecmp(colorstr, "black") == 0) else if (strcasecmp(colorname, "black") == 0)
return COLOR_BLACK; return COLOR_BLACK;
else if (strcasecmp(colorstr, "green") == 0) else if (strcasecmp(colorname, "green") == 0)
return COLOR_GREEN; return COLOR_GREEN;
else if (strcasecmp(colorstr, "yellow") == 0) else if (strcasecmp(colorname, "yellow") == 0)
return COLOR_YELLOW; return COLOR_YELLOW;
else if (strcasecmp(colorstr, "blue") == 0) else if (strcasecmp(colorname, "blue") == 0)
return COLOR_BLUE; return COLOR_BLUE;
else if (strcasecmp(colorstr, "magenta") == 0) else if (strcasecmp(colorname, "magenta") == 0)
return COLOR_MAGENTA; return COLOR_MAGENTA;
else if (strcasecmp(colorstr, "cyan") == 0) else if (strcasecmp(colorname, "cyan") == 0)
return COLOR_CYAN; return COLOR_CYAN;
else if (strcasecmp(colorstr, "white") == 0) else if (strcasecmp(colorname, "white") == 0)
return COLOR_WHITE; return COLOR_WHITE;
else
return -1; return default_color;
} }
chtype
set_foreground_color (char * buf) {
chtype color;
if ((color = get_color(buf)) < 0)
color = DEFAULT_FOREGROUND_COLOR;
return color;
}
chtype
set_background_color (char * buf) {
chtype color;
if ((color = get_color(buf)) < 0)
color = DEFAULT_BACKGROUND_COLOR;
return color;
}
MODULE_EXPORT int MODULE_EXPORT int
curses_init (Driver *drvthis) curses_init (Driver *drvthis)
@@ -214,7 +191,7 @@ curses_init (Driver *drvthis)
p->yoffs = CONF_DEF_TOP_LEFT_Y; p->yoffs = CONF_DEF_TOP_LEFT_Y;
p->cellwidth = LCD_DEFAULT_CELLWIDTH; p->cellwidth = LCD_DEFAULT_CELLWIDTH;
p->cellheight = LCD_DEFAULT_CELLHEIGHT; p->cellheight = LCD_DEFAULT_CELLHEIGHT;
p->drawBorder = CONF_DEF_DRAWBORDER;
/* Get settings from config file */ /* Get settings from config file */
@@ -223,25 +200,29 @@ curses_init (Driver *drvthis)
/* foreground color */ /* foreground color */
strncpy(buf, drvthis->config_get_string(drvthis->name, "Foreground", 0, CONF_DEF_FOREGR), sizeof(buf)); strncpy(buf, drvthis->config_get_string(drvthis->name, "Foreground", 0, CONF_DEF_FOREGR), sizeof(buf));
buf[sizeof(buf)-1] = '\0'; buf[sizeof(buf)-1] = '\0';
fore_color = set_foreground_color(buf); fore_color = get_color_by_name(buf, DEFAULT_FOREGROUND_COLOR);
debug(RPT_DEBUG, "%s: using foreground color %s", drvthis->name, buf); debug(RPT_DEBUG, "%s: using foreground color %s", drvthis->name, buf);
/* background color */ /* background color */
strncpy(buf, drvthis->config_get_string(drvthis->name, "Background", 0, CONF_DEF_BACKGR), sizeof(buf)); strncpy(buf, drvthis->config_get_string(drvthis->name, "Background", 0, CONF_DEF_BACKGR), sizeof(buf));
buf[sizeof(buf)-1] = '\0'; buf[sizeof(buf)-1] = '\0';
back_color = set_background_color(buf); back_color = get_color_by_name(buf, DEFAULT_BACKGROUND_COLOR);
debug(RPT_DEBUG, "%s: using background color %s", drvthis->name, buf); debug(RPT_DEBUG, "%s: using background color %s", drvthis->name, buf);
/* backlight color */ /* backlight color */
strncpy(buf, drvthis->config_get_string(drvthis->name, "Backlight", 0, CONF_DEF_BACKLIGHT), sizeof(buf)); strncpy(buf, drvthis->config_get_string(drvthis->name, "Backlight", 0, CONF_DEF_BACKLIGHT), sizeof(buf));
buf[sizeof(buf)-1] = '\0'; buf[sizeof(buf)-1] = '\0';
backlight_color = set_background_color(buf); backlight_color = get_color_by_name(buf, DEFAULT_BACKGROUND_COLOR);
debug(RPT_DEBUG, "%s: using backlight color %s", drvthis->name, buf); debug(RPT_DEBUG, "%s: using backlight color %s", drvthis->name, buf);
/* use ACS characters? */ /* use ACS characters? */
p->useACS = drvthis->config_get_bool(drvthis->name, "UseACS", 0, 0); p->useACS = drvthis->config_get_bool(drvthis->name, "UseACS", 0, CONF_DEF_USEACS);
debug(RPT_DEBUG, "%s: using ACS %s", drvthis->name, (p->useACS) ? "ON" : "OFF"); debug(RPT_DEBUG, "%s: using ACS %s", drvthis->name, (p->useACS) ? "ON" : "OFF");
/* draw border ? */
p->drawBorder = drvthis->config_get_bool(drvthis->name, "DrawBorder", 0, CONF_DEF_DRAWBORDER);
debug(RPT_DEBUG, "%s: drawing Border %s", drvthis->name, (p->drawBorder) ? "ON" : "OFF");
/* Get size settings */ /* Get size settings */
if ((drvthis->request_display_width() > 0) if ((drvthis->request_display_width() > 0)
&& (drvthis->request_display_height() > 0)) { && (drvthis->request_display_height() > 0)) {
@@ -291,10 +272,18 @@ curses_init (Driver *drvthis)
intrflush(stdscr, FALSE); intrflush(stdscr, FALSE);
keypad(stdscr, TRUE); keypad(stdscr, TRUE);
if (p->drawBorder) {
p->win = newwin(p->height + 2, /* +2 for the border */ p->win = newwin(p->height + 2, /* +2 for the border */
p->width + 2, /* +2 for the border */ p->width + 2, /* +2 for the border */
p->yoffs, p->yoffs,
p->xoffs); p->xoffs);
}
else{
p->win = newwin(p->height,
p->width,
p->yoffs,
p->xoffs);
}
//nodelay(p->win, TRUE); //nodelay(p->win, TRUE);
//intrflush(p->win, FALSE); //intrflush(p->win, FALSE);
@@ -396,7 +385,10 @@ curses_clear (Driver *drvthis)
PrivateData *p = drvthis->private_data; PrivateData *p = drvthis->private_data;
wbkgdset(p->win, COLOR_PAIR(p->current_color_pair) | ' '); wbkgdset(p->win, COLOR_PAIR(p->current_color_pair) | ' ');
if (p->drawBorder)
curses_wborder(drvthis); curses_wborder(drvthis);
werase(p->win); werase(p->win);
} }
@@ -437,6 +429,11 @@ curses_string (Driver *drvthis, int x, int y, const char string[])
if ((x <= 0) || (y <= 0) || (x > p->width) || (y > p->height)) if ((x <= 0) || (y <= 0) || (x > p->width) || (y > p->height))
return; return;
if (!p->drawBorder) {
x--;
y--;
}
mvwaddstr(p->win, y, x, string); mvwaddstr(p->win, y, x, string);
} }
@@ -452,6 +449,11 @@ curses_chr (Driver *drvthis, int x, int y, char c)
if ((x <= 0) || (y <= 0) || (x > p->width) || (y > p->height)) if ((x <= 0) || (y <= 0) || (x > p->width) || (y > p->height))
return; return;
if (!p->drawBorder) {
x--;
y--;
}
mvwaddch(p->win, y, x, c); mvwaddch(p->win, y, x, c);
} }
@@ -601,7 +603,9 @@ curses_flush (Driver *drvthis)
ungetch(c); ungetch(c);
} }
if (p->drawBorder)
curses_wborder(drvthis); curses_wborder(drvthis);
wrefresh(p->win); wrefresh(p->win);
} }
@@ -642,7 +646,7 @@ curses_get_key (Driver *drvthis)
} }
} }
void static void
curses_restore_screen (Driver *drvthis) curses_restore_screen (Driver *drvthis)
{ {
PrivateData *p = drvthis->private_data; PrivateData *p = drvthis->private_data;
@@ -655,3 +659,4 @@ curses_restore_screen (Driver *drvthis)
wrefresh(p->win); wrefresh(p->win);
} }
/* EOF */
+3 -1
View File
@@ -22,12 +22,14 @@ MODULE_EXPORT void curses_backlight (Driver *drvthis, int on);
MODULE_EXPORT const char *curses_get_key (Driver *drvthis); MODULE_EXPORT const char *curses_get_key (Driver *drvthis);
/*Default settings for config file parsing*/ /* Default settings for config file parsing */
#define CONF_DEF_FOREGR "blue" #define CONF_DEF_FOREGR "blue"
#define CONF_DEF_BACKGR "cyan" #define CONF_DEF_BACKGR "cyan"
#define CONF_DEF_BACKLIGHT "red" #define CONF_DEF_BACKLIGHT "red"
#define CONF_DEF_SIZE "20x4" #define CONF_DEF_SIZE "20x4"
#define CONF_DEF_TOP_LEFT_X 7 #define CONF_DEF_TOP_LEFT_X 7
#define CONF_DEF_TOP_LEFT_Y 7 #define CONF_DEF_TOP_LEFT_Y 7
#define CONF_DEF_USEACS 0
#define CONF_DEF_DRAWBORDER 1
#endif #endif