master
Connor Lane Smith 14 years ago
parent 26236a4900
commit d066975e78
  1. 7
      dmenu.c
  2. 24
      draw.c
  3. 9
      draw.h

@ -66,7 +66,6 @@ main(int argc, char *argv[]) {
Bool fast = False; Bool fast = False;
int i; int i;
progname = "dmenu";
for(i = 1; i < argc; i++) for(i = 1; i < argc; i++)
/* single flags */ /* single flags */
if(!strcmp(argv[i], "-v")) { if(!strcmp(argv[i], "-v")) {
@ -383,10 +382,9 @@ keypress(XKeyEvent *ev) {
void void
match(void) { match(void) {
size_t len; size_t len = strlen(text);
Item *item, *lexact, *lprefix, *lsubstr, *exactend, *prefixend, *substrend; Item *item, *lexact, *lprefix, *lsubstr, *exactend, *prefixend, *substrend;
len = strlen(text);
matches = lexact = lprefix = lsubstr = matchend = exactend = prefixend = substrend = NULL; matches = lexact = lprefix = lsubstr = matchend = exactend = prefixend = substrend = NULL;
for(item = items; item && item->text; item++) for(item = items; item && item->text; item++)
if(!fstrncmp(text, item->text, len + 1)) if(!fstrncmp(text, item->text, len + 1))
@ -424,9 +422,8 @@ match(void) {
size_t size_t
nextrune(int incr) { nextrune(int incr) {
size_t n, len; size_t n, len = strlen(text);
len = strlen(text);
for(n = cursor + incr; n >= 0 && n < len && (text[n] & 0xc0) == 0x80; n += incr); for(n = cursor + incr; n >= 0 && n < len && (text[n] & 0xc0) == 0x80; n += incr);
return n; return n;
} }

@ -29,10 +29,9 @@ drawrect(DC *dc, int x, int y, unsigned int w, unsigned int h, Bool fill, unsign
void void
drawtext(DC *dc, const char *text, unsigned long col[ColLast]) { drawtext(DC *dc, const char *text, unsigned long col[ColLast]) {
char buf[256]; char buf[256];
size_t n, mn; size_t mn, n = strlen(text);
/* shorten text if necessary */ /* shorten text if necessary */
n = strlen(text);
for(mn = MIN(n, sizeof buf); textnw(dc, text, mn) > dc->w - dc->font.height/2; mn--) for(mn = MIN(n, sizeof buf); textnw(dc, text, mn) > dc->w - dc->font.height/2; mn--)
if(mn == 0) if(mn == 0)
return; return;
@ -46,10 +45,8 @@ drawtext(DC *dc, const char *text, unsigned long col[ColLast]) {
void void
drawtextn(DC *dc, const char *text, size_t n, unsigned long col[ColLast]) { drawtextn(DC *dc, const char *text, size_t n, unsigned long col[ColLast]) {
int x, y; int x = dc->x + dc->font.height/2;
int y = dc->y + dc->font.ascent+1;
x = dc->x + dc->font.height/2;
y = dc->y + dc->font.ascent+1;
XSetForeground(dc->dpy, dc->gc, FG(dc, col)); XSetForeground(dc->dpy, dc->gc, FG(dc, col));
if(dc->font.set) if(dc->font.set)
@ -64,7 +61,6 @@ void
eprintf(const char *fmt, ...) { eprintf(const char *fmt, ...) {
va_list ap; va_list ap;
fprintf(stderr, "%s: ", progname);
va_start(ap, fmt); va_start(ap, fmt);
vfprintf(stderr, fmt, ap); vfprintf(stderr, fmt, ap);
va_end(ap); va_end(ap);
@ -104,7 +100,7 @@ initdc(void) {
DC *dc; DC *dc;
if(!setlocale(LC_CTYPE, "") || !XSupportsLocale()) if(!setlocale(LC_CTYPE, "") || !XSupportsLocale())
weprintf("no locale support\n"); fprintf(stderr, "no locale support\n");
if(!(dc = calloc(1, sizeof *dc))) if(!(dc = calloc(1, sizeof *dc)))
eprintf("cannot malloc %u bytes:", sizeof *dc); eprintf("cannot malloc %u bytes:", sizeof *dc);
if(!(dc->dpy = XOpenDisplay(NULL))) if(!(dc->dpy = XOpenDisplay(NULL)))
@ -119,7 +115,7 @@ void
initfont(DC *dc, const char *fontstr) { initfont(DC *dc, const char *fontstr) {
if(!loadfont(dc, fontstr ? fontstr : DEFFONT)) { if(!loadfont(dc, fontstr ? fontstr : DEFFONT)) {
if(fontstr != NULL) if(fontstr != NULL)
weprintf("cannot load font '%s'\n", fontstr); fprintf(stderr, "cannot load font '%s'\n", fontstr);
if(fontstr == NULL || !loadfont(dc, DEFFONT)) if(fontstr == NULL || !loadfont(dc, DEFFONT))
eprintf("cannot load font '%s'\n", DEFFONT); eprintf("cannot load font '%s'\n", DEFFONT);
} }
@ -184,13 +180,3 @@ int
textw(DC *dc, const char *text) { textw(DC *dc, const char *text) {
return textnw(dc, text, strlen(text)) + dc->font.height; return textnw(dc, text, strlen(text)) + dc->font.height;
} }
void
weprintf(const char *fmt, ...) {
va_list ap;
fprintf(stderr, "%s: ", progname);
va_start(ap, fmt);
vfprintf(stderr, fmt, ap);
va_end(ap);
}

@ -20,18 +20,15 @@ typedef struct {
} font; } font;
} DC; /* draw context */ } DC; /* draw context */
unsigned long getcolor(DC *dc, const char *colstr);
void drawrect(DC *dc, int x, int y, unsigned int w, unsigned int h, Bool fill, unsigned long color); void drawrect(DC *dc, int x, int y, unsigned int w, unsigned int h, Bool fill, unsigned long color);
void drawtext(DC *dc, const char *text, unsigned long col[ColLast]); void drawtext(DC *dc, const char *text, unsigned long col[ColLast]);
void drawtextn(DC *dc, const char *text, size_t n, unsigned long col[ColLast]); void drawtextn(DC *dc, const char *text, size_t n, unsigned long col[ColLast]);
void initfont(DC *dc, const char *fontstr); void eprintf(const char *fmt, ...);
void freedc(DC *dc); void freedc(DC *dc);
unsigned long getcolor(DC *dc, const char *colstr);
DC *initdc(void); DC *initdc(void);
void initfont(DC *dc, const char *fontstr);
void mapdc(DC *dc, Window win, unsigned int w, unsigned int h); void mapdc(DC *dc, Window win, unsigned int w, unsigned int h);
void resizedc(DC *dc, unsigned int w, unsigned int h); void resizedc(DC *dc, unsigned int w, unsigned int h);
int textnw(DC *dc, const char *text, size_t len); int textnw(DC *dc, const char *text, size_t len);
int textw(DC *dc, const char *text); int textw(DC *dc, const char *text);
void eprintf(const char *fmt, ...);
void weprintf(const char *fmt, ...);
const char *progname;

Loading…
Cancel
Save