@@ -72,15 +72,15 @@ drawinput(void) | |||
dc.y = 0; | |||
dc.w = mw; | |||
dc.h = mh; | |||
drawtext(&dc, NULL, normcol); | |||
drawtext(&dc, NULL, normcol, False); | |||
/* print prompt? */ | |||
if(prompt) { | |||
dc.w = promptw; | |||
drawtext(&dc, prompt, selcol); | |||
drawtext(&dc, prompt, selcol, False); | |||
dc.x += dc.w; | |||
} | |||
dc.w = mw - dc.x; | |||
drawtext(&dc, *text ? text : NULL, normcol); | |||
drawtext(&dc, *text ? text : NULL, normcol, False); | |||
drawcursor(); | |||
XCopyArea(dpy, dc.drawable, win, dc.gc, 0, 0, mw, mh, 0, 0); | |||
XFlush(dpy); | |||
@@ -233,7 +233,7 @@ run(void) { | |||
/* main event loop */ | |||
while(running && !XNextEvent(dpy, &ev)) | |||
switch (ev.type) { | |||
switch(ev.type) { | |||
case KeyPress: | |||
kpress(&ev.xkey); | |||
break; | |||
@@ -161,18 +161,18 @@ drawmenu(void) { | |||
dc.y = 0; | |||
dc.w = mw; | |||
dc.h = mh; | |||
drawtext(&dc, NULL, normcol); | |||
drawtext(&dc, NULL, normcol, False); | |||
/* print prompt? */ | |||
if(prompt) { | |||
dc.w = promptw; | |||
drawtext(&dc, prompt, selcol); | |||
drawtext(&dc, prompt, selcol, False); | |||
dc.x += dc.w; | |||
} | |||
dc.w = mw - dc.x; | |||
/* print command */ | |||
if(cmdw && item && lines == 0) | |||
dc.w = cmdw; | |||
drawtext(&dc, *text ? text : NULL, normcol); | |||
drawtext(&dc, *text ? text : NULL, normcol, False); | |||
if(curr) { | |||
if(lines > 0) | |||
drawmenuv(); | |||
@@ -189,16 +189,16 @@ drawmenuh(void) { | |||
dc.x += cmdw; | |||
dc.w = spaceitem; | |||
drawtext(&dc, curr->left ? "<" : NULL, normcol); | |||
drawtext(&dc, curr->left ? "<" : NULL, normcol, False); | |||
dc.x += dc.w; | |||
for(i = curr; i != next; i = i->right) { | |||
dc.w = MIN(textw(&dc, i->text), mw / 3); | |||
drawtext(&dc, i->text, (sel == i) ? selcol : normcol); | |||
drawtext(&dc, i->text, (sel == i) ? selcol : normcol, False); | |||
dc.x += dc.w; | |||
} | |||
dc.w = spaceitem; | |||
dc.x = mw - dc.w; | |||
drawtext(&dc, next ? ">" : NULL, normcol); | |||
drawtext(&dc, next ? ">" : NULL, normcol, False); | |||
} | |||
void | |||
@@ -209,11 +209,11 @@ drawmenuv(void) { | |||
dc.h = dc.font.height + 2; | |||
dc.y = dc.h; | |||
for(i = curr; i != next; i = i->right) { | |||
drawtext(&dc, i->text, (sel == i) ? selcol : normcol); | |||
drawtext(&dc, i->text, (sel == i) ? selcol : normcol, False); | |||
dc.y += dc.h; | |||
} | |||
dc.h = mh - dc.y; | |||
drawtext(&dc, NULL, normcol); | |||
drawtext(&dc, NULL, normcol, False); | |||
} | |||
Bool | |||
@@ -456,7 +456,7 @@ run(void) { | |||
/* main event loop */ | |||
while(running && !XNextEvent(dpy, &ev)) | |||
switch (ev.type) { | |||
switch(ev.type) { | |||
case KeyPress: | |||
kpress(&ev.xkey); | |||
break; | |||
@@ -3,8 +3,8 @@ | |||
include ../config.mk | |||
SRC = cleanupdraw.c setupdraw.c drawtext.c eprint.c getcolor.c initfont.c \ | |||
textnw.c textw.c | |||
SRC = cleanupdraw.c drawsquare.c drawtext.c eprint.c getcolor.c initfont.c \ | |||
setupdraw.c textnw.c textw.c | |||
OBJ = ${SRC:.c=.o} | |||
all: libdraw.a | |||
@@ -2,7 +2,7 @@ | |||
#include <X11/Xlib.h> | |||
/* enums */ | |||
enum { ColFG, ColBG, ColLast }; | |||
enum { ColBorder, ColFG, ColBG, ColLast }; | |||
/* typedefs */ | |||
typedef struct { | |||
@@ -21,7 +21,8 @@ typedef struct { | |||
/* forward declarations */ | |||
void cleanupdraw(DC *dc); | |||
void drawtext(DC *dc, const char *text, unsigned long col[ColLast]); | |||
void drawsquare(DC *dc, Bool filled, unsigned long col[ColLast], Bool invert); | |||
void drawtext(DC *dc, const char *text, unsigned long col[ColLast], Bool invert); | |||
void eprint(const char *fmt, ...); | |||
unsigned long getcolor(DC *dc, const char *colstr); | |||
void initfont(DC *dc, const char *fontstr); | |||
@@ -0,0 +1,19 @@ | |||
/* See LICENSE file for copyright and license details. */ | |||
#include <X11/Xlib.h> | |||
#include "draw.h" | |||
void | |||
drawsquare(DC *dc, Bool filled, unsigned long col[ColLast], Bool invert) { | |||
int n; | |||
XRectangle r = { dc->x, dc->y, dc->w, dc->h }; | |||
XSetForeground(dc->dpy, dc->gc, col[invert ? ColBG : ColFG]); | |||
n = ((dc->font.ascent + dc->font.descent + 2) / 4) + (filled ? 1 : 0); | |||
r.width = r.height = n; | |||
r.x = dc->x + 1; | |||
r.y = dc->y + 1; | |||
if(filled) | |||
XFillRectangles(dc->dpy, dc->drawable, dc->gc, &r, 1); | |||
else | |||
XDrawRectangles(dc->dpy, dc->drawable, dc->gc, &r, 1); | |||
} |
@@ -6,12 +6,12 @@ | |||
#define MIN(a, b) ((a) < (b) ? (a) : (b)) | |||
void | |||
drawtext(DC *dc, const char *text, unsigned long col[ColLast]) { | |||
drawtext(DC *dc, const char *text, unsigned long col[ColLast], Bool invert) { | |||
char buf[256]; | |||
int i, x, y, h, len, olen; | |||
XRectangle r = { dc->x, dc->y, dc->w, dc->h }; | |||
XSetForeground(dc->dpy, dc->gc, col[ColBG]); | |||
XSetForeground(dc->dpy, dc->gc, col[invert ? ColFG : ColBG]); | |||
XFillRectangles(dc->dpy, dc->drawable, dc->gc, &r, 1); | |||
if(!text) | |||
return; | |||
@@ -26,7 +26,7 @@ drawtext(DC *dc, const char *text, unsigned long col[ColLast]) { | |||
memcpy(buf, text, len); | |||
if(len < olen) | |||
for(i = len; i && i > len - 3; buf[--i] = '.'); | |||
XSetForeground(dc->dpy, dc->gc, col[ColFG]); | |||
XSetForeground(dc->dpy, dc->gc, col[invert ? ColBG : ColFG]); | |||
if(dc->font.set) | |||
XmbDrawString(dc->dpy, dc->drawable, dc->font.set, dc->gc, x, y, buf, len); | |||
else | |||