diff options
Diffstat (limited to 'dwm-6.0-xft.diff')
-rw-r--r-- | dwm-6.0-xft.diff | 229 |
1 files changed, 229 insertions, 0 deletions
diff --git a/dwm-6.0-xft.diff b/dwm-6.0-xft.diff new file mode 100644 index 0000000..cae66bd --- /dev/null +++ b/dwm-6.0-xft.diff @@ -0,0 +1,229 @@ +--- ../dwm-o/dwm-6.0/dwm.c 2011-12-19 10:02:46.000000000 -0500 ++++ dwm.c 2012-05-16 22:33:00.043394484 -0400 +@@ -39,6 +39,7 @@ + #ifdef XINERAMA + #include <X11/extensions/Xinerama.h> + #endif /* XINERAMA */ ++#include <X11/Xft/Xft.h> + + /* macros */ + #define BUTTONMASK (ButtonPressMask|ButtonReleaseMask) +@@ -99,16 +100,15 @@ + + typedef struct { + int x, y, w, h; +- unsigned long norm[ColLast]; +- unsigned long sel[ColLast]; ++ XftColor norm[ColLast]; ++ XftColor sel[ColLast]; + Drawable drawable; + GC gc; + struct { + int ascent; + int descent; + int height; +- XFontSet set; +- XFontStruct *xfont; ++ XftFont *xfont; + } font; + } DC; /* draw context */ + +@@ -178,15 +178,15 @@ + static Monitor *dirtomon(int dir); + static void drawbar(Monitor *m); + static void drawbars(void); +-static void drawsquare(Bool filled, Bool empty, Bool invert, unsigned long col[ColLast]); +-static void drawtext(const char *text, unsigned long col[ColLast], Bool invert); ++static void drawsquare(Bool filled, Bool empty, Bool invert, XftColor col[ColLast]); ++static void drawtext(const char *text, XftColor col[ColLast], Bool invert); + static void enternotify(XEvent *e); + static void expose(XEvent *e); + static void focus(Client *c); + static void focusin(XEvent *e); + static void focusmon(const Arg *arg); + static void focusstack(const Arg *arg); +-static unsigned long getcolor(const char *colstr); ++static XftColor getcolor(const char *colstr); + static Bool getrootptr(int *x, int *y); + static long getstate(Window w); + static Bool gettextprop(Window w, Atom atom, char *text, unsigned int size); +@@ -485,10 +485,6 @@ + for(m = mons; m; m = m->next) + while(m->stack) + unmanage(m->stack, False); +- if(dc.font.set) +- XFreeFontSet(dpy, dc.font.set); +- else +- XFreeFont(dpy, dc.font.xfont); + XUngrabKey(dpy, AnyKey, AnyModifier, root); + XFreePixmap(dpy, dc.drawable); + XFreeGC(dpy, dc.gc); +@@ -719,7 +715,7 @@ + drawbar(Monitor *m) { + int x; + unsigned int i, occ = 0, urg = 0; +- unsigned long *col; ++ XftColor *col; + Client *c; + + for(c = m->clients; c; c = c->next) { +@@ -774,10 +770,10 @@ + } + + void +-drawsquare(Bool filled, Bool empty, Bool invert, unsigned long col[ColLast]) { ++drawsquare(Bool filled, Bool empty, Bool invert, XftColor col[ColLast]) { + int x; + +- XSetForeground(dpy, dc.gc, col[invert ? ColBG : ColFG]); ++ XSetForeground(dpy, dc.gc, col[invert ? ColBG : ColFG].pixel); + x = (dc.font.ascent + dc.font.descent + 2) / 4; + if(filled) + XFillRectangle(dpy, dc.drawable, dc.gc, dc.x+1, dc.y+1, x+1, x+1); +@@ -786,11 +782,12 @@ + } + + void +-drawtext(const char *text, unsigned long col[ColLast], Bool invert) { ++drawtext(const char *text, XftColor col[ColLast], Bool invert) { + char buf[256]; + int i, x, y, h, len, olen; ++ XftDraw *d; + +- XSetForeground(dpy, dc.gc, col[invert ? ColFG : ColBG]); ++ XSetForeground(dpy, dc.gc, col[invert ? ColFG : ColBG].pixel); + XFillRectangle(dpy, dc.drawable, dc.gc, dc.x, dc.y, dc.w, dc.h); + if(!text) + return; +@@ -805,11 +802,11 @@ + memcpy(buf, text, len); + if(len < olen) + for(i = len; i && i > len - 3; buf[--i] = '.'); +- XSetForeground(dpy, dc.gc, col[invert ? ColBG : ColFG]); +- if(dc.font.set) +- XmbDrawString(dpy, dc.drawable, dc.font.set, dc.gc, x, y, buf, len); +- else +- XDrawString(dpy, dc.drawable, dc.gc, x, y, buf, len); ++ ++ d = XftDrawCreate(dpy, dc.drawable, DefaultVisual(dpy, screen), DefaultColormap(dpy,screen)); ++ ++ XftDrawStringUtf8(d, &col[invert ? ColBG : ColFG], dc.font.xfont, x, y, (XftChar8 *) buf, len); ++ XftDrawDestroy(d); + } + + void +@@ -855,7 +852,7 @@ + detachstack(c); + attachstack(c); + grabbuttons(c, True); +- XSetWindowBorder(dpy, c->win, dc.sel[ColBorder]); ++ XSetWindowBorder(dpy, c->win, dc.sel[ColBorder].pixel); + setfocus(c); + } + else +@@ -926,14 +923,14 @@ + return atom; + } + +-unsigned long ++XftColor + getcolor(const char *colstr) { +- Colormap cmap = DefaultColormap(dpy, screen); +- XColor color; ++ XftColor color; + +- if(!XAllocNamedColor(dpy, cmap, colstr, &color, &color)) ++ if(!XftColorAllocName(dpy, DefaultVisual(dpy, screen), DefaultColormap(dpy, screen), colstr, &color)) + die("error, cannot allocate color '%s'\n", colstr); +- return color.pixel; ++ ++ return color; + } + + Bool +@@ -1034,35 +1031,13 @@ + + void + initfont(const char *fontstr) { +- char *def, **missing; +- int n; + +- dc.font.set = XCreateFontSet(dpy, fontstr, &missing, &n, &def); +- if(missing) { +- while(n--) +- fprintf(stderr, "dwm: missing fontset: %s\n", missing[n]); +- XFreeStringList(missing); +- } +- if(dc.font.set) { +- XFontStruct **xfonts; +- char **font_names; +- +- dc.font.ascent = dc.font.descent = 0; +- XExtentsOfFontSet(dc.font.set); +- n = XFontsOfFontSet(dc.font.set, &xfonts, &font_names); +- while(n--) { +- dc.font.ascent = MAX(dc.font.ascent, (*xfonts)->ascent); +- dc.font.descent = MAX(dc.font.descent,(*xfonts)->descent); +- xfonts++; +- } +- } +- else { +- if(!(dc.font.xfont = XLoadQueryFont(dpy, fontstr)) +- && !(dc.font.xfont = XLoadQueryFont(dpy, "fixed"))) +- die("error, cannot load font: '%s'\n", fontstr); +- dc.font.ascent = dc.font.xfont->ascent; +- dc.font.descent = dc.font.xfont->descent; +- } ++ if(!(dc.font.xfont = XftFontOpenName(dpy,screen,fontstr)) ++ && !(dc.font.xfont = XftFontOpenName(dpy,screen,"fixed"))) ++ die("error, cannot load font: '%s'\n", fontstr); ++ ++ dc.font.ascent = dc.font.xfont->ascent; ++ dc.font.descent = dc.font.xfont->descent; + dc.font.height = dc.font.ascent + dc.font.descent; + } + +@@ -1144,7 +1119,7 @@ + + wc.border_width = c->bw; + XConfigureWindow(dpy, w, CWBorderWidth, &wc); +- XSetWindowBorder(dpy, w, dc.norm[ColBorder]); ++ XSetWindowBorder(dpy, w, dc.norm[ColBorder].pixel); + configure(c); /* propagates border_width, if size doesn't change */ + updatewindowtype(c); + updatesizehints(c); +@@ -1621,8 +1596,6 @@ + dc.drawable = XCreatePixmap(dpy, root, DisplayWidth(dpy, screen), bh, DefaultDepth(dpy, screen)); + dc.gc = XCreateGC(dpy, root, 0, NULL); + XSetLineAttributes(dpy, dc.gc, 1, LineSolid, CapButt, JoinMiter); +- if(!dc.font.set) +- XSetFont(dpy, dc.gc, dc.font.xfont->fid); + /* init bars */ + updatebars(); + updatestatus(); +@@ -1692,13 +1665,9 @@ + + int + textnw(const char *text, unsigned int len) { +- XRectangle r; +- +- if(dc.font.set) { +- XmbTextExtents(dc.font.set, text, len, NULL, &r); +- return r.width; +- } +- return XTextWidth(dc.font.xfont, text, len); ++ XGlyphInfo ext; ++ XftTextExtentsUtf8(dpy, dc.font.xfont, (XftChar8 *) text, len, &ext); ++ return ext.xOff; + } + + void +@@ -1776,7 +1745,7 @@ + if(!c) + return; + grabbuttons(c, False); +- XSetWindowBorder(dpy, c->win, dc.norm[ColBorder]); ++ XSetWindowBorder(dpy, c->win, dc.norm[ColBorder].pixel); + if(setfocus) + XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime); + } |