dwm

Kris's build of dwm
git clone git clone https://git.krisyotam.com/krisyotam/dwm.git
Log | Files | Refs | README | LICENSE

bar_fancybar.c (2273B)


      1 int
      2 width_fancybar(Bar *bar, BarArg *a)
      3 {
      4 	return a->w;
      5 }
      6 
      7 int
      8 draw_fancybar(Bar *bar, BarArg *a)
      9 {
     10 	int tabw, mw, ew = 0, n = 0, tx, tw;
     11 	#if BAR_WINICON_PATCH
     12 	int ipad;
     13 	#endif // BAR_WINICON_PATCH
     14 	unsigned int i;
     15 	Client *c;
     16 	Monitor *m = bar->mon;
     17 
     18 	#if BAR_TITLE_LEFT_PAD_PATCH && BAR_TITLE_RIGHT_PAD_PATCH
     19 	int x = a->x + lrpad / 2, w = a->w - lrpad;
     20 	#elif BAR_TITLE_LEFT_PAD_PATCH
     21 	int x = a->x + lrpad / 2, w = a->w - lrpad / 2;
     22 	#elif BAR_TITLE_RIGHT_PAD_PATCH
     23 	int x = a->x, w = a->w - lrpad / 2;
     24 	#else
     25 	int x = a->x, w = a->w;
     26 	#endif // BAR_TITLE_LEFT_PAD_PATCH | BAR_TITLE_RIGHT_PAD_PATCH
     27 
     28 	for (c = m->clients; c; c = c->next) {
     29 		if (ISVISIBLE(c))
     30 			n++;
     31 	}
     32 
     33 	if (n > 0) {
     34 		tabw = TEXTW(m->sel->name);
     35 		#if BAR_WINICON_PATCH
     36 		if (m->sel->icon)
     37 			tabw += m->sel->icw + ICONSPACING;
     38 		#endif // BAR_WINICON_PATCH
     39 		mw = (tabw >= w || n == 1) ? 0 : (w - tabw) / (n - 1);
     40 
     41 		i = 0;
     42 
     43 		for (c = m->clients; c; c = c->next) {
     44 			if (!ISVISIBLE(c) || c == m->sel)
     45 				continue;
     46 			tabw = TEXTW(c->name);
     47 			#if BAR_WINICON_PATCH
     48 			if (c->icon)
     49 				tabw += c->icw + ICONSPACING;
     50 			#endif // BAR_WINICON_PATCH
     51 			if (tabw < mw)
     52 				ew += (mw - tabw);
     53 			else
     54 				i++;
     55 		}
     56 
     57 		if (i > 0)
     58 			mw += ew / i;
     59 
     60 		for (c = m->clients; c; c = c->next) {
     61 			if (!ISVISIBLE(c))
     62 				continue;
     63 			tabw = MIN(m->sel == c ? w : mw, TEXTW(c->name));
     64 			#if BAR_WINICON_PATCH
     65 			ipad = c->icon ? c->icw + ICONSPACING : 0;
     66 			tabw += ipad;
     67 			#endif // BAR_WINICON_PATCH
     68 			tx = x;
     69 			tw = tabw;
     70 			drw_setscheme(drw, scheme[m->sel == c ? SchemeTitleSel : SchemeTitleNorm]);
     71 
     72 			XSetForeground(drw->dpy, drw->gc, drw->scheme[ColBg].pixel);
     73 			XFillRectangle(drw->dpy, drw->drawable, drw->gc, tx, a->y, tw, a->h);
     74 
     75 			if (tabw <= 0) /* trap special handling of 0 in drw_text */
     76 				continue;
     77 
     78 			tx += lrpad / 2;
     79 			tw -= lrpad;
     80 
     81 			#if BAR_WINICON_PATCH
     82 			if (ipad) {
     83 				drw_pic(drw, tx, a->y + (a->h - c->ich) / 2, c->icw, c->ich, c->icon);
     84 				tx += ipad;
     85 				tw -= ipad;
     86 			}
     87 			#endif // BAR_WINICON_PATCH
     88 
     89 			drw_text(drw, tx, a->y, tw, a->h, 0, c->name, 0, False);
     90 			drawstateindicator(c->mon, c, 1, x, a->y, tabw, a->h, 0, 0, c->isfixed);
     91 			x += tabw;
     92 			w -= tabw;
     93 		}
     94 	}
     95 	return n;
     96 }
     97 
     98 int
     99 click_fancybar(Bar *bar, Arg *arg, BarArg *a)
    100 {
    101 	return ClkWinTitle;
    102 }
    103