aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--draw.c12
-rw-r--r--dzen.h2
-rw-r--r--main.c44
3 files changed, 29 insertions, 29 deletions
diff --git a/draw.c b/draw.c
index ed6ade3..c98ae77 100644
--- a/draw.c
+++ b/draw.c
@@ -19,7 +19,7 @@ textnw(const char *text, unsigned int len) {
}
-void
+void
drawtext(const char *text, int reverse, int line, int align) {
int x, y, w, h;
static char buf[1024];
@@ -30,10 +30,12 @@ drawtext(const char *text, int reverse, int line, int align) {
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, mgc, &r, 1);
+ XFillRectangles(dzen.dpy, dzen.slave_win.drawable[line], mgc, &r, 1);
+
if(!text)
return;
@@ -77,10 +79,10 @@ drawtext(const char *text, int reverse, int line, int align) {
mgc = reverse ? dzen.rgc : dzen.gc;
if(dzen.font.set) {
if(line == -1)
- XmbDrawString(dzen.dpy, dzen.title_win.drawable, dzen.font.set,
+ XmbDrawString(dzen.dpy, dzen.title_win.drawable, dzen.font.set,
mgc, x, y, buf, len);
else
- XmbDrawString(dzen.dpy, dzen.slave_win.drawable, dzen.font.set,
+ XmbDrawString(dzen.dpy, dzen.slave_win.drawable[line], dzen.font.set,
mgc, x, y, buf, len);
}
else {
@@ -88,7 +90,7 @@ drawtext(const char *text, int reverse, int line, int align) {
XChangeGC(dzen.dpy, mgc, GCForeground | GCFont, &gcv);
if(line != -1)
- XDrawString(dzen.dpy, dzen.slave_win.drawable,
+ XDrawString(dzen.dpy, dzen.slave_win.drawable[line],
mgc, x, y, buf, len);
else
XDrawString(dzen.dpy, dzen.title_win.drawable,
diff --git a/dzen.h b/dzen.h
index dfaac23..34a68da 100644
--- a/dzen.h
+++ b/dzen.h
@@ -51,7 +51,7 @@ struct SW {
Window win;
Window *line;
- Drawable drawable;
+ Drawable *drawable;
char *tbuf[BUF_SIZE];
int tcnt;
diff --git a/main.c b/main.c
index 827cc0e..75780e3 100644
--- a/main.c
+++ b/main.c
@@ -36,9 +36,10 @@ clean_up(void) {
XFreePixmap(dzen.dpy, dzen.title_win.drawable);
if(dzen.slave_win.max_lines) {
- XFreePixmap(dzen.dpy, dzen.slave_win.drawable);
- for(i=0; i < dzen.slave_win.max_lines; i++)
+ for(i=0; i < dzen.slave_win.max_lines; i++) {
+ XFreePixmap(dzen.dpy, dzen.slave_win.drawable[i]);
XDestroyWindow(dzen.dpy, dzen.slave_win.line[i]);
+ }
free(dzen.slave_win.line);
XDestroyWindow(dzen.dpy, dzen.slave_win.win);
}
@@ -150,15 +151,15 @@ read_stdin(void *ptr) {
static void
x_highlight_line(int line) {
- drawtext(dzen.slave_win.tbuf[line + dzen.slave_win.first_line_vis], 1, line+1, dzen.slave_win.alignment);
- XCopyArea(dzen.dpy, dzen.slave_win.drawable, dzen.slave_win.line[line], dzen.rgc,
+ drawtext(dzen.slave_win.tbuf[line + dzen.slave_win.first_line_vis], 1, line, dzen.slave_win.alignment);
+ XCopyArea(dzen.dpy, dzen.slave_win.drawable[line], dzen.slave_win.line[line], dzen.rgc,
0, 0, dzen.slave_win.width, dzen.line_height, 0, 0);
}
static void
x_unhighlight_line(int line) {
- drawtext(dzen.slave_win.tbuf[line + dzen.slave_win.first_line_vis], 0, line+1, dzen.slave_win.alignment);
- XCopyArea(dzen.dpy, dzen.slave_win.drawable, dzen.slave_win.line[line], dzen.gc,
+ drawtext(dzen.slave_win.tbuf[line + dzen.slave_win.first_line_vis], 0, line, dzen.slave_win.alignment);
+ XCopyArea(dzen.dpy, dzen.slave_win.drawable[line], dzen.slave_win.line[line], dzen.gc,
0, 0, dzen.slave_win.width, dzen.line_height, 0, 0);
}
@@ -182,17 +183,14 @@ x_draw_body(void) {
}
for(i=0; i < dzen.slave_win.max_lines; i++) {
- if(i < dzen.slave_win.last_line_vis) {
+ if(i < dzen.slave_win.last_line_vis)
drawtext(dzen.slave_win.tbuf[i + dzen.slave_win.first_line_vis], 0, i, dzen.slave_win.alignment);
- XCopyArea(dzen.dpy, dzen.slave_win.drawable, dzen.slave_win.line[i], dzen.gc,
- 0, 0, dzen.slave_win.width, dzen.line_height, 0, 0);
- }
- else if(i < dzen.slave_win.max_lines) {
+ else if(i < dzen.slave_win.max_lines)
drawtext("", 0, i, dzen.slave_win.alignment);
- XCopyArea(dzen.dpy, dzen.slave_win.drawable, dzen.slave_win.line[i], dzen.gc,
- 0, 0, dzen.slave_win.width, dzen.line_height, 0, 0);
- }
}
+ for(i=0; i < dzen.slave_win.max_lines; i++)
+ XCopyArea(dzen.dpy, dzen.slave_win.drawable[i], dzen.slave_win.line[i], dzen.gc,
+ 0, 0, dzen.slave_win.width, dzen.line_height, 0, 0);
}
static void
@@ -305,6 +303,8 @@ x_create_windows(void) {
if(dzen.slave_win.max_lines) {
dzen.slave_win.first_line_vis = 0;
dzen.slave_win.last_line_vis = 0;
+ dzen.slave_win.line = emalloc(sizeof(Window) * dzen.slave_win.max_lines);
+ dzen.slave_win.drawable = emalloc(sizeof(Drawable) * dzen.slave_win.max_lines);
/* horizontal menu mode */
if(dzen.slave_win.ishmenu) {
@@ -322,11 +322,11 @@ x_create_windows(void) {
DefaultVisual(dzen.dpy, dzen.screen),
CWOverrideRedirect | CWBackPixmap | CWEventMask, &wa);
- dzen.slave_win.drawable = XCreatePixmap(dzen.dpy, root, ew+r,
- dzen.line_height, DefaultDepth(dzen.dpy, dzen.screen));
+ for(i=0; i < dzen.slave_win.max_lines; i++)
+ dzen.slave_win.drawable[i] = XCreatePixmap(dzen.dpy, root, ew+r,
+ dzen.line_height, DefaultDepth(dzen.dpy, dzen.screen));
/* windows holding the lines */
- dzen.slave_win.line = emalloc(sizeof(Window) * dzen.slave_win.max_lines);
for(i=0; i < dzen.slave_win.max_lines; i++)
dzen.slave_win.line[i] = XCreateWindow(dzen.dpy, dzen.slave_win.win,
i*ew, 0, (i == dzen.slave_win.max_lines-1) ? ew+r : ew, dzen.line_height, 0,
@@ -355,19 +355,17 @@ x_create_windows(void) {
DefaultVisual(dzen.dpy, dzen.screen),
CWOverrideRedirect | CWBackPixmap | CWEventMask, &wa);
- dzen.slave_win.drawable = XCreatePixmap(dzen.dpy, root, dzen.slave_win.width,
- dzen.line_height, DefaultDepth(dzen.dpy, dzen.screen));
+ for(i=0; i < dzen.slave_win.max_lines; i++)
+ dzen.slave_win.drawable[i] = XCreatePixmap(dzen.dpy, root, dzen.slave_win.width,
+ dzen.line_height, DefaultDepth(dzen.dpy, dzen.screen));
/* windows holding the lines */
- dzen.slave_win.line = emalloc(sizeof(Window) * dzen.slave_win.max_lines);
- for(i=0; i < dzen.slave_win.max_lines; i++) {
+ for(i=0; i < dzen.slave_win.max_lines; i++)
dzen.slave_win.line[i] = XCreateWindow(dzen.dpy, dzen.slave_win.win,
0, i*dzen.line_height, dzen.slave_win.width, dzen.line_height, 0,
DefaultDepth(dzen.dpy, dzen.screen), CopyFromParent,
DefaultVisual(dzen.dpy, dzen.screen),
CWOverrideRedirect | CWBackPixmap | CWEventMask, &wa);
- }
-
}
}
/* normal GC */