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