about summary refs log tree commit diff
diff options
context:
space:
mode:
authorokan <okan>2013-05-20 20:21:04 +0000
committerokan <okan>2013-05-20 20:21:04 +0000
commit270df196ac17363536c44fe342b4e71e1c8450e3 (patch)
tree73f285a3f099b8b96d5d7e8b8e9b297c01613842
parente14123210a7773a0fda562eb367d71482c872e60 (diff)
downloadcwm-270df196ac17363536c44fe342b4e71e1c8450e3.tar.gz
cwm-270df196ac17363536c44fe342b4e71e1c8450e3.tar.xz
cwm-270df196ac17363536c44fe342b4e71e1c8450e3.zip
- configure menuwin with the screen, then create the xft drawable using
  the menu window since that's the only place on which we draw
- elminate the need to change the drawable on every font draw
-rw-r--r--calmwm.h3
-rw-r--r--conf.c15
-rw-r--r--menu.c15
-rw-r--r--mousefunc.c2
-rw-r--r--screen.c1
-rw-r--r--xutil.c4
6 files changed, 16 insertions, 24 deletions
diff --git a/calmwm.h b/calmwm.h
index b45e9df..5671ece 100644
--- a/calmwm.h
+++ b/calmwm.h
@@ -426,7 +426,6 @@ struct menu  		*menu_filter(struct screen_ctx *, struct menu_q *,
 			     char *, char *, int,
 			     void (*)(struct menu_q *, struct menu_q *, char *),
 			     void (*)(struct menu *, int));
-void			 menu_init(struct screen_ctx *);
 void			 menuq_clear(struct menu_q *);
 
 int			 parse_config(const char *, struct conf *);
@@ -463,7 +462,7 @@ void			 xu_ptr_ungrab(void);
 void			 xu_sendmsg(Window, Atom, long);
 void			 xu_set_wm_state(Window win, int);
 void			 xu_xft_draw(struct screen_ctx *, const char *,
-			     Drawable, int, int, int);
+			     int, int, int);
 int			 xu_xft_width(XftFont *, const char *, int);
 void 			 xu_xorcolor(XftColor, XftColor, XftColor *);
 
diff --git a/conf.c b/conf.c
index b4d5d9d..984e4cc 100644
--- a/conf.c
+++ b/conf.c
@@ -103,11 +103,6 @@ conf_screen(struct screen_ctx *sc)
 
 	sc->gap = Conf.gap;
 
-	sc->xftdraw = XftDrawCreate(X_Dpy, sc->rootwin,
-	    sc->visual, sc->colormap);
-	if (sc->xftdraw == NULL)
-		errx(1, "XftDrawCreate");
-
 	sc->xftfont = XftFontOpenName(X_Dpy, sc->which, Conf.font);
 	if (sc->xftfont == NULL)
 		errx(1, "XftFontOpenName");
@@ -134,6 +129,16 @@ conf_screen(struct screen_ctx *sc)
 	if (!XftColorAllocValue(X_Dpy, sc->visual, sc->colormap,
 	    &xc.color, &sc->xftcolor[CWM_COLOR_MENU_FONT_SEL]))
 		warnx("XftColorAllocValue: '%s'", Conf.color[i]);
+
+	sc->menuwin = XCreateSimpleWindow(X_Dpy, sc->rootwin, 0, 0, 1, 1,
+	    Conf.bwidth,
+	    sc->xftcolor[CWM_COLOR_MENU_FG].pixel,
+	    sc->xftcolor[CWM_COLOR_MENU_BG].pixel);
+
+	sc->xftdraw = XftDrawCreate(X_Dpy, sc->menuwin,
+	    sc->visual, sc->colormap);
+	if (sc->xftdraw == NULL)
+		errx(1, "XftDrawCreate");
 }
 
 static struct {
diff --git a/menu.c b/menu.c
index e743ad2..5313efb 100644
--- a/menu.c
+++ b/menu.c
@@ -76,15 +76,6 @@ static int		 menu_calc_entry(struct menu_ctx *, int, int);
 static struct menu 	*menu_complete_path(struct menu_ctx *);
 static int		 menu_keycode(XKeyEvent *, enum ctltype *, char *);
 
-void
-menu_init(struct screen_ctx *sc)
-{
-	sc->menuwin = XCreateSimpleWindow(X_Dpy, sc->rootwin, 0, 0, 1, 1,
-	    Conf.bwidth,
-	    sc->xftcolor[CWM_COLOR_MENU_FG].pixel,
-	    sc->xftcolor[CWM_COLOR_MENU_BG].pixel);
-}
-
 struct menu *
 menu_filter(struct screen_ctx *sc, struct menu_q *menuq, char *prompt,
     char *initial, int flags,
@@ -417,7 +408,7 @@ menu_draw(struct menu_ctx *mc, struct menu_q *menuq, struct menu_q *resultq)
 	    mc->width, mc->height);
 
 	if (mc->hasprompt) {
-		xu_xft_draw(sc, mc->dispstr, sc->menuwin, CWM_COLOR_MENU_FONT,
+		xu_xft_draw(sc, mc->dispstr, CWM_COLOR_MENU_FONT,
 		    0, sc->xftfont->ascent);
 		n = 1;
 	} else
@@ -432,7 +423,7 @@ menu_draw(struct menu_ctx *mc, struct menu_q *menuq, struct menu_q *resultq)
 		if (mc->y + y > xine.h)
 			break;
 
-		xu_xft_draw(sc, text, sc->menuwin, CWM_COLOR_MENU_FONT, 0, y);
+		xu_xft_draw(sc, text, CWM_COLOR_MENU_FONT, 0, y);
 		n++;
 	}
 	if (mc->hasprompt && n > 1 && (mc->searchstr[0] != '\0')) {
@@ -465,7 +456,7 @@ menu_draw_entry(struct menu_ctx *mc, struct menu_q *resultq,
 	    (sc->xftfont->height + 1) * entry, mc->width,
 	    (sc->xftfont->height + 1) + sc->xftfont->descent);
 	color = active ? CWM_COLOR_MENU_FONT_SEL : CWM_COLOR_MENU_FONT;
-	xu_xft_draw(sc, text, sc->menuwin, color,
+	xu_xft_draw(sc, text, color,
 	    0, (sc->xftfont->height + 1) * entry + sc->xftfont->ascent + 1);
 }
 
diff --git a/mousefunc.c b/mousefunc.c
index 64670b5..a41a3ad 100644
--- a/mousefunc.c
+++ b/mousefunc.c
@@ -63,7 +63,7 @@ mousefunc_sweep_draw(struct client_ctx *cc)
 	XMapWindow(X_Dpy, sc->menuwin);
 	XClearWindow(X_Dpy, sc->menuwin);
 
-	xu_xft_draw(sc, asize, sc->menuwin, CWM_COLOR_MENU_FONT,
+	xu_xft_draw(sc, asize, CWM_COLOR_MENU_FONT,
 	    0, sc->xftfont->ascent + 1);
 }
 
diff --git a/screen.c b/screen.c
index 8435859..f8abae2 100644
--- a/screen.c
+++ b/screen.c
@@ -56,7 +56,6 @@ screen_init(int which)
 	TAILQ_INIT(&sc->mruq);
 
 	group_init(sc);
-	menu_init(sc);
 
 	rootattr.cursor = Cursor_normal;
 	rootattr.event_mask = SubstructureRedirectMask|SubstructureNotifyMask|
diff --git a/xutil.c b/xutil.c
index 3e2b36c..d5055f2 100644
--- a/xutil.c
+++ b/xutil.c
@@ -442,10 +442,8 @@ xu_xft_width(XftFont *xftfont, const char *text, int len)
 }
 
 void
-xu_xft_draw(struct screen_ctx *sc, const char *text,
-    Drawable d, int color, int x, int y)
+xu_xft_draw(struct screen_ctx *sc, const char *text, int color, int x, int y)
 {
-	XftDrawChange(sc->xftdraw, d);
 	XftDrawStringUtf8(sc->xftdraw, &sc->xftcolor[color], sc->xftfont,
 	    x, y, (const FcChar8*)text, strlen(text));
 }