JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
apply XftDraw to search_win
[spectrwm.git] / spectrwm.c
index 1ef4c8d..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,40 +1867,53 @@ 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;
 
-       if (bar_font) {
-               XftColorFree(display, DefaultVisual(display, r->s->idx),
-                   DefaultColormap(display, r->s->idx), &bar_font_color);
-               XftFontClose(display, bar_font);
-               bar_font = NULL;
-       }
+       if (r->bar != NULL)
+               return;
 
        if ((r->bar = calloc(1, sizeof(struct swm_bar))) == NULL)
                err(1, "bar_setup: calloc: failed to allocate memory.");
 
-       while ((font = strsep(&bar_fonts, " ,")) != NULL) {
-               if (*font == '\0')
-                       continue;
+       if (bar_font == 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);
-               if (!bar_font) {
-                       warnx("unable to load font %s", font);
-                       continue;
-               } else {
-                       DNPRINTF(SWM_D_INIT, "successfully opened font %s\n",
-                           font);
-                       break;
+                       DNPRINTF(SWM_D_INIT, "bar_setup: try font %s\n", 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;
+                       } else {
+                               DNPRINTF(SWM_D_INIT, "successfully opened "
+                                   "font %s\n", font);
+                               break;
+                       }
                }
        }
+
        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;
@@ -1919,8 +1933,7 @@ bar_setup(struct swm_region *r)
        wa[0] = r->s->c[SWM_S_COLOR_BAR].pixel;
        wa[1] = r->s->c[SWM_S_COLOR_BAR_BORDER].pixel;
        wa[2] = XCB_EVENT_MASK_EXPOSURE;
-       DNPRINTF(SWM_D_BAR, "bar_setup: create_window: (x,y) w x h: (%d,%d) "
-           "%d x %d\n", X(r->bar), Y(r->bar), WIDTH(r->bar), HEIGHT(r->bar));
+
        xcb_create_window(conn, XCB_COPY_FROM_PARENT, r->bar->id, r->s->root,
            X(r->bar), Y(r->bar), WIDTH(r->bar), HEIGHT(r->bar),
            bar_border_width, XCB_WINDOW_CLASS_INPUT_OUTPUT,
@@ -3877,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");
@@ -3930,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);