textended libdraw - 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 18dcf738967a45208e880b72ce273afdd93ee6c7
 (DIR) parent 9f3b0c6ea843340b87a045ea0afd2d1b33425eee
 (HTM) Author: Connor Lane Smith <cls@lubutu.com>
       Date:   Mon, 28 Jun 2010 06:09:34 +0100
       
       extended libdraw
       Diffstat:
         dinput.c                            |       8 ++++----
         dmenu.c                             |      18 +++++++++---------
         draw/Makefile                       |       4 ++--
         draw/draw.h                         |       5 +++--
         draw/drawsquare.c                   |      19 +++++++++++++++++++
         draw/drawtext.c                     |       6 +++---
       
       6 files changed, 40 insertions(+), 20 deletions(-)
       ---
 (DIR) diff --git a/dinput.c b/dinput.c
       t@@ -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);
       t@@ -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;
 (DIR) diff --git a/dmenu.c b/dmenu.c
       t@@ -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();
       t@@ -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
       t@@ -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
       t@@ -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;
 (DIR) diff --git a/draw/Makefile b/draw/Makefile
       t@@ -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
 (DIR) diff --git a/draw/draw.h b/draw/draw.h
       t@@ -2,7 +2,7 @@
        #include <X11/Xlib.h>
        
        /* enums */
       -enum { ColFG, ColBG, ColLast };
       +enum { ColBorder, ColFG, ColBG, ColLast };
        
        /* typedefs */
        typedef struct {
       t@@ -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);
 (DIR) diff --git a/draw/drawsquare.c b/draw/drawsquare.c
       t@@ -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);
       +}
 (DIR) diff --git a/draw/drawtext.c b/draw/drawtext.c
       t@@ -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;
       t@@ -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