Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- diff -u dwm_original/config.def.h dwm_xft/config.def.h
- --- dwm_original/config.def.h 2012-01-09 19:07:41.065029408 +0400
- +++ dwm_xft/config.def.h 2012-01-09 19:02:02.313506614 +0400
- @@ -1,7 +1,7 @@
- /* See LICENSE file for copyright and license details. */
- /* appearance */
- -static const char font[] = "-*-terminus-medium-r-*-*-16-*-*-*-*-*-*-*";
- +static const char font[] = "Sans 8";
- static const char normbordercolor[] = "#444444";
- static const char normbgcolor[] = "#222222";
- static const char normfgcolor[] = "#bbbbbb";
- diff -u dwm_original/config.mk dwm_xft/config.mk
- --- dwm_original/config.mk 2012-01-09 19:07:41.065029408 +0400
- +++ dwm_xft/config.mk 2012-01-09 19:03:39.721464085 +0400
- @@ -15,8 +15,8 @@
- XINERAMAFLAGS = -DXINERAMA
- # includes and libs
- -INCS = -I${X11INC}
- -LIBS = -L${X11LIB} -lX11 ${XINERAMALIBS}
- +INCS = -I${X11INC} `pkg-config --cflags xft pango pangoxft`
- +LIBS = -L${X11LIB} -lX11 ${XINERAMALIBS} `pkg-config --libs xft pango pangoxft`
- # flags
- CPPFLAGS = -D_BSD_SOURCE -D_POSIX_C_SOURCE=2 -DVERSION=\"${VERSION}\" ${XINERAMAFLAGS}
- diff -u dwm_original/dwm.c dwm_xft/dwm.c
- --- dwm_original/dwm.c 2012-01-09 19:07:41.065029408 +0400
- +++ dwm_xft/dwm.c 2012-01-09 19:07:17.705012468 +0400
- @@ -36,6 +36,10 @@
- #include <X11/Xlib.h>
- #include <X11/Xproto.h>
- #include <X11/Xutil.h>
- +#include <X11/Xft/Xft.h>
- +#include <pango/pango.h>
- +#include <pango/pangoxft.h>
- +#include <pango/pango-font.h>
- #ifdef XINERAMA
- #include <X11/extensions/Xinerama.h>
- #endif /* XINERAMA */
- @@ -47,8 +51,12 @@
- * MAX(0, MIN((y)+(h),(m)->wy+(m)->wh) - MAX((y),(m)->wy)))
- #define ISVISIBLE(C) ((C->tags & C->mon->tagset[C->mon->seltags]))
- #define LENGTH(X) (sizeof X / sizeof X[0])
- -#define MAX(A, B) ((A) > (B) ? (A) : (B))
- +#ifndef MAX
- +#define MAX(A, B) ((A) > (B) ? (A) : (B))
- +#endif
- +#ifndef MIN
- #define MIN(A, B) ((A) < (B) ? (A) : (B))
- +#endif
- #define MOUSEMASK (BUTTONMASK|PointerMotionMask)
- #define WIDTH(X) ((X)->w + 2 * (X)->bw)
- #define HEIGHT(X) ((X)->h + 2 * (X)->bw)
- @@ -103,12 +111,19 @@
- unsigned long sel[ColLast];
- Drawable drawable;
- GC gc;
- +
- + XftColor xftnorm[ColLast];
- + XftColor xftsel[ColLast];
- + XftDraw *xftdrawable;
- +
- + PangoContext *pgc;
- + PangoLayout *plo;
- + PangoFontDescription *pfd;
- +
- struct {
- int ascent;
- int descent;
- int height;
- - XFontSet set;
- - XFontStruct *xfont;
- } font;
- } DC; /* draw context */
- @@ -186,7 +201,7 @@
- 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 unsigned long 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 +500,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);
- @@ -581,6 +592,7 @@
- if(dc.drawable != 0)
- XFreePixmap(dpy, dc.drawable);
- dc.drawable = XCreatePixmap(dpy, root, sw, bh, DefaultDepth(dpy, screen));
- + XftDrawChange(dc.xftdrawable, dc.drawable);
- updatebars();
- for(m = mons; m; m = m->next)
- XMoveResizeWindow(dpy, m->barwin, m->wx, m->by, m->ww, bh);
- @@ -796,7 +808,7 @@
- return;
- olen = strlen(text);
- h = dc.font.ascent + dc.font.descent;
- - y = dc.y + (dc.h / 2) - (h / 2) + dc.font.ascent;
- + y = dc.y;
- x = dc.x + (h / 2);
- /* shorten text if necessary */
- for(len = MIN(olen, sizeof buf); len && textnw(text, len) > dc.w - h; len--);
- @@ -805,11 +817,8 @@
- 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);
- + pango_layout_set_text(dc.plo, text, len);
- + pango_xft_render_layout(dc.xftdrawable, (col==dc.norm?dc.xftnorm:dc.xftsel)+(invert?ColBG:ColFG), dc.plo, x * PANGO_SCALE, y * PANGO_SCALE);
- }
- void
- @@ -927,13 +936,13 @@
- }
- unsigned long
- -getcolor(const char *colstr) {
- +getcolor(const char *colstr, XftColor *color) {
- Colormap cmap = DefaultColormap(dpy, screen);
- - XColor color;
- + Visual *vis = DefaultVisual(dpy, screen);
- - if(!XAllocNamedColor(dpy, cmap, colstr, &color, &color))
- + if(!XftColorAllocName(dpy,vis,cmap,colstr, color))
- die("error, cannot allocate color '%s'\n", colstr);
- - return color.pixel;
- + return color->pixel;
- }
- Bool
- @@ -1034,35 +1043,19 @@
- void
- initfont(const char *fontstr) {
- - char *def, **missing;
- - int n;
- + PangoFontMetrics *metrics;
- - 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;
- - }
- + dc.pgc = pango_xft_get_context(dpy, screen);
- + dc.pfd = pango_font_description_from_string(fontstr);
- +
- + metrics = pango_context_get_metrics(dc.pgc, dc.pfd, pango_language_from_string(setlocale(LC_CTYPE, "")));
- + dc.font.ascent = pango_font_metrics_get_ascent(metrics) / PANGO_SCALE;
- + dc.font.descent = pango_font_metrics_get_descent(metrics) / PANGO_SCALE;
- +
- + pango_font_metrics_unref(metrics);
- +
- + dc.plo = pango_layout_new(dc.pgc);
- + pango_layout_set_font_description(dc.plo, dc.pfd);
- dc.font.height = dc.font.ascent + dc.font.descent;
- }
- @@ -1611,19 +1604,24 @@
- cursor[CurNormal] = XCreateFontCursor(dpy, XC_left_ptr);
- cursor[CurResize] = XCreateFontCursor(dpy, XC_sizing);
- cursor[CurMove] = XCreateFontCursor(dpy, XC_fleur);
- +
- /* init appearance */
- - dc.norm[ColBorder] = getcolor(normbordercolor);
- - dc.norm[ColBG] = getcolor(normbgcolor);
- - dc.norm[ColFG] = getcolor(normfgcolor);
- - dc.sel[ColBorder] = getcolor(selbordercolor);
- - dc.sel[ColBG] = getcolor(selbgcolor);
- - dc.sel[ColFG] = getcolor(selfgcolor);
- + dc.norm[ColBorder] = getcolor(normbordercolor, dc.xftnorm+ColBorder);
- + dc.norm[ColBG] = getcolor(normbgcolor, dc.xftnorm+ColBG);
- + dc.norm[ColFG] = getcolor(normfgcolor, dc.xftnorm+ColFG);
- + dc.sel[ColBorder] = getcolor(selbordercolor, dc.xftsel+ColBorder);
- + dc.sel[ColBG] = getcolor(selbgcolor, dc.xftsel+ColBG);
- + dc.sel[ColFG] = getcolor(selfgcolor, dc.xftsel+ColFG);
- +
- 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 */
- +
- + dc.xftdrawable = XftDrawCreate(dpy, dc.drawable, DefaultVisual(dpy,screen), DefaultColormap(dpy,screen));
- + if(!dc.xftdrawable)
- + printf("error, cannot create drawable\n");
- +
- + /* init bar */
- updatebars();
- updatestatus();
- /* EWMH support per view */
- @@ -1692,13 +1690,10 @@
- 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);
- + PangoRectangle r;
- + pango_layout_set_text(dc.plo, text, len);
- + pango_layout_get_extents(dc.plo, &r, 0);
- + return r.width / PANGO_SCALE;
- }
- void
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement