dwm

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

bar_awesomebar.c (2787B)


      1 int
      2 width_awesomebar(Bar *bar, BarArg *a)
      3 {
      4 	return a->w;
      5 }
      6 
      7 int
      8 draw_awesomebar(Bar *bar, BarArg *a)
      9 {
     10 	int n = 0, scm, remainder = 0, tabw, tpad, tx, tw;
     11 	unsigned int i;
     12 	#if BAR_CENTEREDWINDOWNAME_PATCH
     13 	int cpad;
     14 	#endif // BAR_CENTEREDWINDOWNAME_PATCH
     15 	#if BAR_WINICON_PATCH
     16 	int ipad;
     17 	#endif // BAR_WINICON_PATCH
     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 	Client *c;
     29 	for (c = bar->mon->clients; c; c = c->next)
     30 		if (ISVISIBLE(c))
     31 			n++;
     32 
     33 	if (n > 0) {
     34 		remainder = w % n;
     35 		tabw = w / n;
     36 		for (i = 0, c = bar->mon->clients; c; c = c->next, i++) {
     37 			if (!ISVISIBLE(c))
     38 				continue;
     39 			if (bar->mon->sel == c && HIDDEN(c))
     40 				scm = SchemeHidSel;
     41 			else if (HIDDEN(c))
     42 				scm = SchemeHidNorm;
     43 			else if (bar->mon->sel == c)
     44 				scm = SchemeTitleSel;
     45 			else
     46 				scm = SchemeTitleNorm;
     47 
     48 			tpad = lrpad / 2;
     49 			#if BAR_CENTEREDWINDOWNAME_PATCH
     50 			cpad = 0;
     51 			#endif // BAR_CENTEREDWINDOWNAME_PATCH
     52 			#if BAR_WINICON_PATCH
     53 			ipad = c->icon ? c->icw + ICONSPACING : 0;
     54 			#endif // BAR_WINICON_PATCH
     55 
     56 			tx = x;
     57 			tw = tabw;
     58 
     59 			#if BAR_WINICON_PATCH && BAR_CENTEREDWINDOWNAME_PATCH
     60 			if (TEXTW(c->name) + ipad < tabw)
     61 				cpad = (tabw - TEXTW(c->name) - ipad) / 2;
     62 			#elif BAR_CENTEREDWINDOWNAME_PATCH
     63 			if (TEXTW(c->name) < tabw)
     64 				cpad = (tabw - TEXTW(c->name)) / 2;
     65 			#endif // BAR_CENTEREDWINDOWNAME_PATCH
     66 
     67 			drw_setscheme(drw, scheme[scm]);
     68 
     69 			XSetForeground(drw->dpy, drw->gc, drw->scheme[ColBg].pixel);
     70 			XFillRectangle(drw->dpy, drw->drawable, drw->gc, tx, a->y, tw, a->h);
     71 
     72 			#if BAR_CENTEREDWINDOWNAME_PATCH
     73 			/* Apply center padding, if any */
     74 			tx += cpad;
     75 			tw -= cpad;
     76 			#endif // BAR_CENTEREDWINDOWNAME_PATCH
     77 
     78 			tx += tpad;
     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 
     91 			drawstateindicator(c->mon, c, 1, x, a->y, tabw + (i < remainder ? 1 : 0), a->h, 0, 0, c->isfixed);
     92 			x += tabw + (i < remainder ? 1 : 0);
     93 		}
     94 	}
     95 	return n;
     96 }
     97 
     98 int
     99 click_awesomebar(Bar *bar, Arg *arg, BarArg *a)
    100 {
    101 	int x = 0, n = 0;
    102 	Client *c;
    103 
    104 	for (c = bar->mon->clients; c; c = c->next)
    105 		if (ISVISIBLE(c))
    106 			n++;
    107 
    108 	c = bar->mon->clients;
    109 
    110 	do {
    111 		if (!c || !ISVISIBLE(c))
    112 			continue;
    113 		else
    114 			x += (1.0 / (double)n) * a->w;
    115 	} while (c && a->x > x && (c = c->next));
    116 
    117 	if (c) {
    118 		arg->v = c;
    119 		return ClkWinTitle;
    120 	}
    121 	return -1;
    122 }
    123