X-Git-Url: https://jasonwoof.com/gitweb/?a=blobdiff_plain;f=spectrwm.c;h=e68277446beb4869586a6765909e518b1cc9d3eb;hb=ec833b84b1acee0dc58a9960d4a3012411ace726;hp=c98b1a3bee4bc4b3631dbf9d7fe5a2b77161620d;hpb=85986408ee0904af5ff63189e5a0de1df3f3cc26;p=spectrwm.git diff --git a/spectrwm.c b/spectrwm.c index c98b1a3..e682774 100644 --- a/spectrwm.c +++ b/spectrwm.c @@ -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,21 +1867,38 @@ 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 (r->bar != NULL) + return; + if ((r->bar = calloc(1, sizeof(struct swm_bar))) == NULL) 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; @@ -1895,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; @@ -1915,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, @@ -3873,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"); @@ -3926,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);