Permalink
Browse files

Remove leaky pango patch

  • Loading branch information...
1 parent 5816648 commit 44cac5f9c1f2aa81772eed7008c165f9edc4670a @falconindy committed Mar 9, 2010
Showing with 0 additions and 232 deletions.
  1. +0 −232 pango-on-pertag.patch
View
@@ -1,232 +0,0 @@
-diff --git a/config.h b/config.h
-index 329f080..14949e6 100644
---- a/config.h
-+++ b/config.h
-@@ -2,7 +2,7 @@
-
- /* appearance */
- //static const char font[] = "-*-terminus-medium-r-normal-*-14-*-*-*-*-*-*-*";
--static const char font[] = "-*-bitstream vera sans mono-medium-r-normal-*-10-*-*-*-*-*-*-*";
-+static const char font[] = "Terminus 8";
- static const char normbordercolor[] = "#333333";
- static const char normbgcolor[] = "#051121";
- static const char normfgcolor[] = "#FFFFFF";
-diff --git a/dwm.c b/dwm.c
-index 1bbf3b6..e0e2b25 100644
---- a/dwm.c
-+++ b/dwm.c
-@@ -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 */
-@@ -46,8 +50,12 @@
- #define INRECT(X,Y,RX,RY,RW,RH) ((X) >= (RX) && (X) < (RX) + (RW) && (Y) >= (RY) && (Y) < (RY) + (RH))
- #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)
-@@ -99,12 +107,19 @@ typedef struct {
- 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 */
-
-@@ -160,7 +175,7 @@ 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 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);
-@@ -482,10 +497,6 @@ cleanup(void) {
- 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);
-@@ -555,6 +566,7 @@ configurenotify(XEvent *e) {
- 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);
-@@ -772,7 +784,7 @@ drawtext(const char *text, unsigned long col[ColLast], Bool invert) {
- 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--);
-@@ -781,11 +793,8 @@ drawtext(const char *text, unsigned long col[ColLast], Bool invert) {
- 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
-@@ -885,13 +894,13 @@ focusstack(const Arg *arg) {
- }
-
- 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
-@@ -988,38 +997,20 @@ grabkeys(void) {
-
- void
- initfont(const char *fontstr) {
-- char *def, **missing;
-- int i, n;
-+ PangoFontMetrics *metrics;
-
-- missing = NULL;
-- 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) {
-- XFontSetExtents *font_extents;
-- XFontStruct **xfonts;
-- char **font_names;
--
-- dc.font.ascent = dc.font.descent = 0;
-- font_extents = XExtentsOfFontSet(dc.font.set);
-- n = XFontsOfFontSet(dc.font.set, &xfonts, &font_names);
-- for(i = 0, dc.font.ascent = 0, dc.font.descent = 0; i < n; i++) {
-- 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.font.height = dc.font.ascent + dc.font.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;
- }
-
- Bool
-@@ -1505,17 +1496,20 @@ setup(void) {
- 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);
-+ dc.xftdrawable = XftDrawCreate(dpy, dc.drawable, DefaultVisual(dpy,screen), DefaultColormap(dpy,screen));
-+ if(!dc.xftdrawable)
-+ printf("error, cannot create drawable\n");
- /* init tags */
- for(m = mons; m; m = m->next)
- m->curtag = m->prevtag = 1;
-@@ -1606,13 +1600,10 @@ tagmon(const Arg *arg) {
-
- 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

0 comments on commit 44cac5f

Please sign in to comment.