JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
apply XftDraw to search_win
[spectrwm.git] / spectrwm.c
index 22e0f06..e682774 100644 (file)
@@ -1394,7 +1394,8 @@ bar_print(struct swm_region *r, const char *s)
            DefaultVisual(display, r->s->idx),
            DefaultColormap(display, r->s->idx));
 
-       XftDrawStringUtf8(draw, &bar_font_color, bar_font, x, bar_font->height,
+       XftDrawStringUtf8(draw, &bar_font_color, bar_font, x,
+           (HEIGHT(r->bar) + bar_font->height) / 2 - bar_font->descent,
            (FcChar8 *)s, len);
 
        XftDrawDestroy(draw);
@@ -1866,7 +1867,8 @@ bar_refresh(void)
 void
 bar_setup(struct swm_region *r)
 {
-       char                    *font;
+       char                    *font, *fontpos;
+       int                     count;
        xcb_screen_t            *screen = get_screen(r->s->idx);
        uint32_t                wa[3];
        XRenderColor            color;
@@ -1878,12 +1880,25 @@ bar_setup(struct swm_region *r)
                err(1, "bar_setup: calloc: failed to allocate memory.");
 
        if (bar_font == NULL) {
-               while ((font = strsep(&bar_fonts, " ,")) != NULL) {
+               while ((font = strsep(&bar_fonts, ",")) != NULL) {
                        if (*font == '\0')
                                continue;
 
                        DNPRINTF(SWM_D_INIT, "bar_setup: try font %s\n", font);
-                       bar_font = XftFontOpenName(display, r->s->idx, font);
+
+                       count = 0;
+                       fontpos = font;
+                       while ((fontpos = index(fontpos, '-'))) {
+                               count++;
+                               fontpos++;
+                       }
+
+                       if (count == 14)
+                               bar_font = XftFontOpenXlfd(display, r->s->idx,
+                                               font);
+                       else
+                               bar_font = XftFontOpenName(display, r->s->idx,
+                                               font);
                        if (!bar_font) {
                                warnx("unable to load font %s", font);
                                continue;
@@ -1898,7 +1913,7 @@ bar_setup(struct swm_region *r)
        if (bar_font == NULL)
                errx(1, "unable to open a font");
 
-       bar_height = bar_font->height + 4 * bar_border_width;
+       bar_height = bar_font->height + 2 * bar_border_width;
 
        if (bar_height < 1)
                bar_height = 1;
@@ -3875,6 +3890,7 @@ search_win(struct swm_region *r, union arg *args)
        char                    s[8];
        FILE                    *lfile;
        size_t                  len;
+       XftDraw                 *draw;
        XGlyphInfo              info;
 
        DNPRINTF(SWM_D_MISC, "search_win\n");
@@ -3928,7 +3944,15 @@ search_win(struct swm_region *r, union arg *args)
                    XCB_GC_BACKGROUND | XCB_GC_GRAPHICS_EXPOSURES, gcv);
                map_window_raised(w);
 
-               xcb_image_text_8(conn, len, w, sw->gc, 2, bar_font->height, s);
+               draw = XftDrawCreate(display, w,
+                   DefaultVisual(display, r->s->idx),
+                   DefaultColormap(display, r->s->idx));
+
+               XftDrawStringUtf8(draw, &bar_font_color, bar_font, 2,
+                   (HEIGHT(r->bar) + bar_font->height) / 2 - bar_font->descent,
+                   (FcChar8 *)s, len);
+
+               XftDrawDestroy(draw);
 
                DNPRINTF(SWM_D_MISC, "search_win: mapped window: 0x%x\n", w);