aboutsummaryrefslogtreecommitdiffstats
path: root/draw.c
diff options
context:
space:
mode:
authorgotmor <gotmor@f2baff5b-bf2c-0410-a398-912abdc3d8b2>2007-06-14 14:07:23 +0000
committergotmor <gotmor@f2baff5b-bf2c-0410-a398-912abdc3d8b2>2007-06-14 14:07:23 +0000
commit81eed5c092eb40fd6e1256b2b1d160b2ba5bb426 (patch)
tree4db719b3ffe092f3657c2336b19ae6aec30152bb /draw.c
parent71117fe03644e76fdb7cfe2ae82727d502f8e1a5 (diff)
downloaddzen-81eed5c092eb40fd6e1256b2b1d160b2ba5bb426.tar.gz
dzen-81eed5c092eb40fd6e1256b2b1d160b2ba5bb426.zip
dynamic foreground and background color
menu mode fixed git-svn-id: http://dzen.googlecode.com/svn/trunk@98 f2baff5b-bf2c-0410-a398-912abdc3d8b2
Diffstat (limited to 'draw.c')
-rw-r--r--draw.c90
1 files changed, 56 insertions, 34 deletions
diff --git a/draw.c b/draw.c
index 178c9b2..fa9c854 100644
--- a/draw.c
+++ b/draw.c
@@ -31,32 +31,38 @@ drawtext(const char *text, int reverse, int line, int align) {
XRectangle r = { dzen.x, dzen.y, dzen.w, dzen.h};
- if(line != -1) {
- if(reverse) {
- if(dzen.slave_win.tbuf[line].text) {
- XSetForeground(dzen.dpy, dzen.rgc, dzen.norm[ColBG]);
- XSetBackground(dzen.dpy, dzen.rgc, dzen.slave_win.tbuf[line].fg);
- } else {
- XSetForeground(dzen.dpy, dzen.rgc, dzen.norm[ColBG]);
- XSetBackground(dzen.dpy, dzen.rgc, dzen.norm[ColFG]);
- }
+ if(line == -1) { /* title window */
+ XGetGCValues(dzen.dpy, dzen.gc, GCForeground|GCBackground, &gcv);
+ XSetForeground(dzen.dpy, dzen.gc, gcv.background);
+ XFillRectangles(dzen.dpy, dzen.title_win.drawable, dzen.gc, &r, 1);
+ XSetForeground(dzen.dpy, dzen.gc, gcv.foreground);
+ }
+ else { /* slave window */
+ mgc = reverse ? dzen.rgc : dzen.gc;
+
+ if(!dzen.slave_win.tbuf[line].text) {
+ reverse ?
+ XSetForeground(dzen.dpy, mgc, dzen.norm[ColFG]):
+ XSetForeground(dzen.dpy, mgc, dzen.norm[ColBG]);
} else {
- if(dzen.slave_win.tbuf[line].text) {
- XSetForeground(dzen.dpy, dzen.gc, dzen.slave_win.tbuf[line].fg);
- XSetBackground(dzen.dpy, dzen.gc, dzen.norm[ColBG]);
- } else {
- XSetForeground(dzen.dpy, dzen.gc, dzen.norm[ColFG]);
- XSetBackground(dzen.dpy, dzen.gc, dzen.norm[ColBG]);
- }
+ reverse ?
+ XSetForeground(dzen.dpy, mgc, dzen.slave_win.tbuf[line+dzen.slave_win.first_line_vis].fg):
+ XSetForeground(dzen.dpy, mgc, dzen.slave_win.tbuf[line+dzen.slave_win.first_line_vis].bg);
}
- }
- mgc = reverse ? dzen.gc : dzen.rgc;
- if(line == -1) /* title window */
- XFillRectangles(dzen.dpy, dzen.title_win.drawable, mgc, &r, 1);
- else /* slave window */
XFillRectangles(dzen.dpy, dzen.slave_win.drawable[line], mgc, &r, 1);
-
+
+ if(!dzen.slave_win.tbuf[line].text) {
+ reverse ?
+ XSetForeground(dzen.dpy, mgc, dzen.norm[ColBG]):
+ XSetForeground(dzen.dpy, mgc, dzen.norm[ColFG]);
+ } else {
+ reverse ?
+ XSetForeground(dzen.dpy, mgc, dzen.slave_win.tbuf[line+dzen.slave_win.first_line_vis].bg):
+ XSetForeground(dzen.dpy, mgc, dzen.slave_win.tbuf[line+dzen.slave_win.first_line_vis].fg);
+ }
+
+ }
if(!text)
return;
@@ -101,7 +107,7 @@ drawtext(const char *text, int reverse, int line, int align) {
if(dzen.font.set) {
if(line == -1)
XmbDrawString(dzen.dpy, dzen.title_win.drawable, dzen.font.set,
- mgc, x, y, buf, len);
+ dzen.gc, x, y, buf, len);
else
XmbDrawString(dzen.dpy, dzen.slave_win.drawable[line], dzen.font.set,
mgc, x, y, buf, len);
@@ -115,7 +121,7 @@ drawtext(const char *text, int reverse, int line, int align) {
mgc, x, y, buf, len);
else
XDrawString(dzen.dpy, dzen.title_win.drawable,
- mgc, x, y, buf, len);
+ dzen.gc, x, y, buf, len);
}
}
@@ -173,15 +179,26 @@ textw(const char *text) {
}
char *
-setlinecolor(char * text, unsigned long * col) {
- char fgcolor[8];
- unsigned long newfg;
+setlinecolor(char * text, unsigned long * colfg, unsigned long * colbg) {
+ char fgcolor[8], bgcolor[8];
+ unsigned long newfg, newbg;
if(text[0] == '^' && text[1] == '#') {
strncpy(fgcolor, text+1, 7);
fgcolor[7] = '\0';
newfg = getcolor(fgcolor);
- *col = newfg;
+ *colfg = newfg;
+
+ if(text[8] == '^' && text[9] == '#') {
+ strncpy(bgcolor, text+9, 7);
+ bgcolor[7] = '\0';
+ newbg = getcolor(bgcolor);
+ *colbg = newbg;
+
+ return text+16;
+ } else
+ *colbg = dzen.norm[ColBG];
+
return text+8;
}
@@ -191,17 +208,20 @@ setlinecolor(char * text, unsigned long * col) {
void
drawheader(char * text) {
char *ctext;
- unsigned long col;
+ unsigned long colfg, colbg;
dzen.x = 0;
dzen.y = 0;
dzen.w = dzen.title_win.width;
dzen.h = dzen.line_height;
if(text) {
- if( (ctext = setlinecolor(text, &col)) ) {
- XSetForeground(dzen.dpy, dzen.gc, col);
+ if( (ctext = setlinecolor(text, &colfg, &colbg)) ) {
+ XSetForeground(dzen.dpy, dzen.gc, colfg);
+ XSetBackground(dzen.dpy, dzen.gc, colbg);
+ printf("FG: %lu, BG: %lu\n", colfg, colbg);
drawtext(ctext, 0, -1, dzen.title_win.alignment);
XSetForeground(dzen.dpy, dzen.gc, dzen.norm[ColFG]);
+ XSetBackground(dzen.dpy, dzen.gc, dzen.norm[ColBG]);
}
else
drawtext(text, 0, -1, dzen.title_win.alignment);
@@ -214,16 +234,18 @@ drawheader(char * text) {
void
drawbody(char * text) {
char *ctext;
- unsigned long col;
+ unsigned long colfg, colbg;
if(dzen.slave_win.tcnt == dzen.slave_win.tsize)
free_buffer();
if(dzen.slave_win.tcnt < dzen.slave_win.tsize) {
- if( (ctext = setlinecolor(text, &col)) ) {
- dzen.slave_win.tbuf[dzen.slave_win.tcnt].fg = col;
+ if( (ctext = setlinecolor(text, &colfg, &colbg)) ) {
+ dzen.slave_win.tbuf[dzen.slave_win.tcnt].fg = colfg;
+ dzen.slave_win.tbuf[dzen.slave_win.tcnt].bg = colbg;
dzen.slave_win.tbuf[dzen.slave_win.tcnt].text = estrdup(ctext);
} else {
dzen.slave_win.tbuf[dzen.slave_win.tcnt].fg = dzen.norm[ColFG];
+ dzen.slave_win.tbuf[dzen.slave_win.tcnt].bg = dzen.norm[ColBG];
dzen.slave_win.tbuf[dzen.slave_win.tcnt].text = estrdup(text);
}
dzen.slave_win.tcnt++;