--- scrotwm-orig-debian/scrotwm.c 2009-09-13 10:23:13.000000000 +0200 +++ scrotwm-debian/linux/scrotwm.c 2009-09-13 17:42:18.000000000 +0200 @@ -82,6 +82,7 @@ #include #include #include +#include #if RANDR_MAJOR < 1 # error XRandR versions less than 1.0 are not supported @@ -186,13 +187,11 @@ GC bar_gc; XGCValues bar_gcv; int bar_fidx = 0; -XFontStruct *bar_fs; -char *bar_fonts[] = { - "-*-terminus-medium-*-*-*-*-*-*-*-*-*-*-*", - "-*-times-medium-r-*-*-*-*-*-*-*-*-*-*", - NULL -}; - +/* Things for XFT */ +XftFont *bar_fs; +XftDraw *xftdraw; +char *default_font="terminus-10"; +char *bar_font_color="#cccccc"; /* terminal + args */ char *spawn_term[] = { "xterm", NULL }; char *spawn_screenshot[] = { "screenshot.sh", NULL, NULL }; @@ -607,9 +606,10 @@ else if (!varmatch(var, "bar_color", &i)) setscreencolor(val, i, SWM_S_COLOR_BAR); else if (!varmatch(var, "bar_font_color", &i)) - setscreencolor(val, i, SWM_S_COLOR_BAR_FONT); + //setscreencolor(val, i, SWM_S_COLOR_BAR_FONT); + asprintf(&bar_font_color, "#%s", val); else if (!strncmp(var, "bar_font", strlen("bar_font"))) - asprintf(&bar_fonts[0], "%s", val); + asprintf(&default_font, "%s", val); else if (!strncmp(var, "bar_action", strlen("bar_action"))) asprintf(&bar_argv[0], "%s", val); else if (!strncmp(var, "bar_delay", strlen("bar_delay"))) @@ -724,10 +724,26 @@ void bar_print(struct swm_region *r, char *s) { + int scr, len; + XGlyphInfo ext; + XftColor col; + XftDraw *xftdraw; + /* how many chars in it? */ + scr = DefaultScreen(display); + len = strlen(s); + /* TODO: here we should check if the whole text + * fits inside the bar */ + XftColorAllocName(display, DefaultVisual(display, scr), + DefaultColormap(display, scr), + bar_font_color, + &col); + /* now draw text */ XClearWindow(display, r->bar_window); - XSetForeground(display, bar_gc, r->s->c[SWM_S_COLOR_BAR_FONT].color); - XDrawString(display, r->bar_window, bar_gc, 4, bar_fs->ascent, s, - strlen(s)); + xftdraw = XftDrawCreate(display, r->bar_window, + DefaultVisual(display, scr), + DefaultColormap(display, scr)); + XftTextExtents8 (display, bar_fs, s, strlen(s), &ext); + XftDrawString8 (xftdraw, &col, bar_fs, 4, bar_fs->ascent, s, strlen(s)); } void @@ -878,25 +894,15 @@ void bar_setup(struct swm_region *r) { - int i; - - for (i = 0; bar_fonts[i] != NULL; i++) { - bar_fs = XLoadQueryFont(display, bar_fonts[i]); - if (bar_fs) { - bar_fidx = i; - break; - } - } - if (bar_fonts[i] == NULL) - errx(1, "couldn't load font"); + int scr = DefaultScreen (display); + bar_fs = XftFontOpenName(display, 0, default_font); bar_height = bar_fs->ascent + bar_fs->descent + 3; r->bar_window = XCreateSimpleWindow(display, r->s->root, X(r), Y(r), WIDTH(r) - 2, bar_height - 2, 1, r->s->c[SWM_S_COLOR_BAR_BORDER].color, r->s->c[SWM_S_COLOR_BAR].color); - bar_gc = XCreateGC(display, r->bar_window, 0, &bar_gcv); - XSetFont(display, bar_gc, bar_fs->fid); + bar_gc = XCreateGC(display, r->bar_window, GCGraphicsExposures, &bar_gcv); XSelectInput(display, r->bar_window, VisibilityChangeMask); if (bar_enabled) XMapRaised(display, r->bar_window); @@ -904,6 +910,9 @@ if (signal(SIGALRM, bar_signal) == SIG_ERR) err(1, "could not install bar_signal"); + xftdraw = XftDrawCreate (display, + r->bar_window, DefaultVisual(display, scr), + DefaultColormap(display, scr)); bar_refresh(); } @@ -1140,7 +1149,6 @@ { DNPRINTF(SWM_D_MISC, "spawnmenu\n"); - spawn_menu[SWM_MENU_FN] = bar_fonts[bar_fidx]; spawn_menu[SWM_MENU_NB] = r->s->c[SWM_S_COLOR_BAR].name; spawn_menu[SWM_MENU_NF] = r->s->c[SWM_S_COLOR_BAR_FONT].name; spawn_menu[SWM_MENU_SB] = r->s->c[SWM_S_COLOR_BAR_BORDER].name; @@ -3511,6 +3519,7 @@ if (cfile) conf_load(cfile); + printf("Loaded conf file: %s\n", cfile); /* setup all bars */ for (i = 0; i < ScreenCount(display); i++) TAILQ_FOREACH(r, &screens[i].rl, entry)