tadded draw.h - dmenu - Dmenu fork with xft fonts.
 (HTM) git clone git://r-36.net/dmenu
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 595e7976601fc77acf12015d3f5f6843e2cdd706
 (DIR) parent bba30e26863c75e66678f9d028d394883d86150a
 (HTM) Author: Connor Lane Smith <cls@lubutu.com>
       Date:   Wed, 23 Jun 2010 13:29:15 +0100
       
       added draw.h
       Diffstat:
         Makefile                            |       6 +++---
         dinput.c                            |      23 ++++-------------------
         dmenu.c                             |      22 ++++------------------
         draw.c                              |      57 ++++++++++++++-----------------
         draw.h                              |      45 +++++++++++++++++++++++++++++++
       
       5 files changed, 81 insertions(+), 72 deletions(-)
       ---
 (DIR) diff --git a/Makefile b/Makefile
       t@@ -6,7 +6,7 @@ include config.mk
        SRC = dinput.c dmenu.c draw.c
        OBJ = ${SRC:.c=.o}
        
       -all: options dinput dmenu
       +all: options draw.o dinput dmenu
        
        options:
                @echo dmenu build options:
       t@@ -18,7 +18,7 @@ options:
                @echo CC $<
                @${CC} -c ${CFLAGS} $<
        
       -${OBJ}: config.h config.mk draw.c
       +${OBJ}: config.h config.mk draw.h
        
        config.h:
                @echo creating $@ from config.def.h
       t@@ -26,7 +26,7 @@ config.h:
        
        .o:
                @echo CC -o $@
       -        @${CC} -o $@ $< ${LDFLAGS}
       +        @${CC} -o $@ $< draw.o ${LDFLAGS}
        
        clean:
                @echo cleaning
 (DIR) diff --git a/dinput.c b/dinput.c
       t@@ -25,32 +25,27 @@
        static void cleanup(void);
        static void drawcursor(void);
        static void drawinput(void);
       -static void eprint(const char *errstr, ...);
        static Bool grabkeyboard(void);
        static void kpress(XKeyEvent * e);
        static void run(void);
        static void setup(Bool topbar);
        
        #include "config.h"
       +#include "draw.h"
        
        /* variables */
        static char *prompt = NULL;
        static char text[4096];
        static int promptw = 0;
        static int ret = 0;
       -static int screen;
       -static unsigned int mw, mh;
        static unsigned int cursor = 0;
        static unsigned int numlockmask = 0;
        static Bool running = True;
       -static Display *dpy;
       -static Window parent, win;
       -
       -#include "draw.c"
       +static Window win;
        
        void
        cleanup(void) {
       -        dccleanup();
       +        drawcleanup();
                XDestroyWindow(dpy, win);
                XUngrabKeyboard(dpy, CurrentTime);
        }
       t@@ -86,16 +81,6 @@ drawinput(void)
                XFlush(dpy);
        }
        
       -void
       -eprint(const char *errstr, ...) {
       -        va_list ap;
       -
       -        va_start(ap, errstr);
       -        vfprintf(stderr, errstr, ap);
       -        va_end(ap);
       -        exit(EXIT_FAILURE);
       -}
       -
        Bool
        grabkeyboard(void) {
                unsigned int len;
       t@@ -318,7 +303,7 @@ setup(Bool topbar) {
                                DefaultVisual(dpy, screen),
                                CWOverrideRedirect | CWBackPixmap | CWEventMask, &wa);
        
       -        dcsetup();
       +        drawsetup();
                if(prompt)
                        promptw = MIN(textw(prompt), mw / 5);
                cursor = strlen(text);
 (DIR) diff --git a/dmenu.c b/dmenu.c
       t@@ -46,6 +46,7 @@ static void run(void);
        static void setup(Bool topbar);
        
        #include "config.h"
       +#include "draw.h"
        
        /* variables */
        static char *maxname = NULL;
       t@@ -54,25 +55,20 @@ static char text[4096];
        static int cmdw = 0;
        static int promptw = 0;
        static int ret = 0;
       -static int screen;
       -static unsigned int mw, mh;
        static unsigned int numlockmask = 0;
        static Bool running = True;
       -static Display *dpy;
        static Item *allitems = NULL;  /* first of all items */
        static Item *item = NULL;      /* first of pattern matching items */
        static Item *sel = NULL;
        static Item *next = NULL;
        static Item *prev = NULL;
        static Item *curr = NULL;
       -static Window parent, win;
       +static Window win;
        static int (*fstrncmp)(const char *, const char *, size_t) = strncmp;
        static char *(*fstrstr)(const char *, const char *) = strstr;
        static unsigned int lines = 0;
        static void (*calcoffsets)(void) = calcoffsetsh;
        
       -#include "draw.c"
       -
        void
        appenditem(Item *i, Item **list, Item **last) {
                if(!(*last))
       t@@ -136,7 +132,7 @@ cistrstr(const char *s, const char *sub) {
        
        void
        cleanup(void) {
       -        dccleanup();
       +        drawcleanup();
                XDestroyWindow(dpy, win);
                XUngrabKeyboard(dpy, CurrentTime);
        }
       t@@ -202,16 +198,6 @@ drawmenuv(void) {
                drawtext(NULL, dc.norm);
        }
        
       -void
       -eprint(const char *errstr, ...) {
       -        va_list ap;
       -
       -        va_start(ap, errstr);
       -        vfprintf(stderr, errstr, ap);
       -        va_end(ap);
       -        exit(EXIT_FAILURE);
       -}
       -
        Bool
        grabkeyboard(void) {
                unsigned int len;
       t@@ -529,7 +515,7 @@ setup(Bool topbar) {
                                DefaultVisual(dpy, screen),
                                CWOverrideRedirect | CWBackPixmap | CWEventMask, &wa);
        
       -        dcsetup();
       +        drawsetup();
                if(maxname)
                        cmdw = MIN(textw(maxname), mw / 3);
                if(prompt)
 (DIR) diff --git a/draw.c b/draw.c
       t@@ -1,37 +1,20 @@
        /* See LICENSE file for copyright and license details. */
       -
       -/* enums */
       -enum { ColFG, ColBG, ColLast };
       -
       -/* typedefs */
       -typedef struct {
       -        int x, y, w, h;
       -        unsigned long norm[ColLast];
       -        unsigned long sel[ColLast];
       -        Drawable drawable;
       -        GC gc;
       -        struct {
       -                XFontStruct *xfont;
       -                XFontSet set;
       -                int ascent;
       -                int descent;
       -                int height;
       -        } font;
       -} DC; /* draw context */
       -
       -/* forward declarations */
       -static void dccleanup(void);
       -static void dcsetup(void);
       -static void drawtext(const char *text, unsigned long col[ColLast]);
       -static unsigned long getcolor(const char *colstr);
       -static void initfont(const char *fontstr);
       -static int textnw(const char *text, unsigned int len);
       -static int textw(const char *text);
       -
       -static DC dc;
       +#include <ctype.h>
       +#include <locale.h>
       +#include <stdarg.h>
       +#include <stdio.h>
       +#include <stdlib.h>
       +#include <string.h>
       +#include <strings.h>
       +#include <X11/Xlib.h>
       +#include "draw.h"
       +
       +/* macros */
       +#define MIN(a, b)               ((a) < (b) ? (a) : (b))
       +#define MAX(a, b)               ((a) > (b) ? (a) : (b))
        
        void
       -dccleanup(void) {
       +drawcleanup(void) {
                if(dc.font.set)
                        XFreeFontSet(dpy, dc.font.set);
                else
       t@@ -41,7 +24,7 @@ dccleanup(void) {
        }
        
        void
       -dcsetup(void) {
       +drawsetup(void) {
                /* style */
                dc.norm[ColBG] = getcolor(normbgcolor);
                dc.norm[ColFG] = getcolor(normfgcolor);
       t@@ -84,6 +67,16 @@ drawtext(const char *text, unsigned long col[ColLast]) {
                        XDrawString(dpy, dc.drawable, dc.gc, x, y, buf, len);
        }
        
       +void
       +eprint(const char *errstr, ...) {
       +        va_list ap;
       +
       +        va_start(ap, errstr);
       +        vfprintf(stderr, errstr, ap);
       +        va_end(ap);
       +        exit(EXIT_FAILURE);
       +}
       +
        unsigned long
        getcolor(const char *colstr) {
                Colormap cmap = DefaultColormap(dpy, screen);
 (DIR) diff --git a/draw.h b/draw.h
       t@@ -0,0 +1,45 @@
       +/* See LICENSE file for copyright and license details. */
       +
       +/* enums */
       +enum { ColFG, ColBG, ColLast };
       +
       +/* typedefs */
       +typedef struct {
       +        int x, y, w, h;
       +        unsigned long norm[ColLast];
       +        unsigned long sel[ColLast];
       +        Drawable drawable;
       +        GC gc;
       +        struct {
       +                XFontStruct *xfont;
       +                XFontSet set;
       +                int ascent;
       +                int descent;
       +                int height;
       +        } font;
       +} DC; /* draw context */
       +
       +/* forward declarations */
       +void drawcleanup(void);
       +void drawsetup(void);
       +void drawtext(const char *text, unsigned long col[ColLast]);
       +void eprint(const char *errstr, ...);
       +unsigned long getcolor(const char *colstr);
       +void initfont(const char *fontstr);
       +int textnw(const char *text, unsigned int len);
       +int textw(const char *text);
       +
       +/* variables */
       +Display *dpy;
       +DC dc;
       +int screen;
       +unsigned int mw, mh;
       +unsigned int spaceitem;
       +Window parent;
       +
       +/* style */
       +const char *font;
       +const char *normbgcolor;
       +const char *normfgcolor;
       +const char *selbgcolor;
       +const char *selfgcolor;