123 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			123 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| static Clr **statusscheme;
 | |
| 
 | |
| int
 | |
| width_pwrl_status(Bar *bar, BarArg *a)
 | |
| {
 | |
| 	#if BAR_STATUSCMD_PATCH
 | |
| 	return widthpowerlinestatus(rawstext);
 | |
| 	#else
 | |
| 	return widthpowerlinestatus(stext);
 | |
| 	#endif // BAR_STATUSCMD_PATCH
 | |
| }
 | |
| 
 | |
| #if BAR_EXTRASTATUS_PATCH
 | |
| int
 | |
| width_pwrl_status_es(Bar *bar, BarArg *a)
 | |
| {
 | |
| 	#if BAR_STATUSCMD_PATCH
 | |
| 	return widthpowerlinestatus(rawestext);
 | |
| 	#else
 | |
| 	return widthpowerlinestatus(estext);
 | |
| 	#endif // BAR_STATUSCMD_PATCH
 | |
| }
 | |
| #endif // BAR_EXTRASTATUS_PATCH
 | |
| 
 | |
| int
 | |
| draw_pwrl_status(Bar *bar, BarArg *a)
 | |
| {
 | |
| 	#if BAR_STATUSCMD_PATCH
 | |
| 	return drawpowerlinestatus(a->x + a->w, rawstext, a);
 | |
| 	#else
 | |
| 	return drawpowerlinestatus(a->x + a->w, stext, a);
 | |
| 	#endif // BAR_STATUSCMD_PATCH
 | |
| }
 | |
| 
 | |
| #if BAR_EXTRASTATUS_PATCH
 | |
| int
 | |
| draw_pwrl_status_es(Bar *bar, BarArg *a)
 | |
| {
 | |
| 	#if BAR_STATUSCMD_PATCH
 | |
| 	return drawpowerlinestatus(a->x + a->w, rawestext, a);
 | |
| 	#else
 | |
| 	return drawpowerlinestatus(a->x + a->w, estext, a);
 | |
| 	#endif // BAR_STATUSCMD_PATCH
 | |
| }
 | |
| #endif // BAR_EXTRASTATUS_PATCH
 | |
| 
 | |
| int
 | |
| click_pwrl_status(Bar *bar, Arg *arg, BarArg *a)
 | |
| {
 | |
| 	return ClkStatusText;
 | |
| }
 | |
| 
 | |
| int
 | |
| widthpowerlinestatus(char *stext)
 | |
| {
 | |
| 	char status[512];
 | |
| 	int w = 0, i, n = strlen(stext);
 | |
| 	int plw = drw->fonts->h / 2 + 1;
 | |
| 	char *bs, bp = '|';
 | |
| 	strcpy(status, stext);
 | |
| 
 | |
| 	for (i = n, bs = &status[n-1]; i >= 0; i--, bs--) {
 | |
| 		if (*bs == '<' || *bs == '/' || *bs == '\\' || *bs == '>' || *bs == '|') { /* block start */
 | |
| 			if (bp != '|')
 | |
| 				w += plw;
 | |
| 			w += TEXTW(bs+2);
 | |
| 			bp = *bs;
 | |
| 			*bs = 0;
 | |
| 		}
 | |
| 	}
 | |
| 	if (bp != '|')
 | |
| 		w += plw * 2;
 | |
| 
 | |
| 	return w;
 | |
| }
 | |
| 
 | |
| int
 | |
| drawpowerlinestatus(int xpos, char *stext, BarArg *barg)
 | |
| {
 | |
| 	char status[512];
 | |
| 	int i, n = strlen(stext), cn = 0;
 | |
| 	int x = xpos, w = 0;
 | |
| 	int plw = drw->fonts->h / 2 + 1;
 | |
| 	char *bs, bp = '|';
 | |
| 	Clr *prevscheme = statusscheme[0], *nxtscheme;
 | |
| 	strcpy(status, stext);
 | |
| 
 | |
| 	for (i = n, bs = &status[n-1]; i >= 0; i--, bs--) {
 | |
| 		if (*bs == '<' || *bs == '/' || *bs == '\\' || *bs == '>' || *bs == '|') { /* block start */
 | |
| 			cn = ((int) *(bs+1)) - 1;
 | |
| 
 | |
| 			if (cn < LENGTH(statuscolors)) {
 | |
| 				drw_settrans(drw, prevscheme, (nxtscheme = statusscheme[cn]));
 | |
| 			} else {
 | |
| 				drw_settrans(drw, prevscheme, (nxtscheme = statusscheme[0]));
 | |
| 			}
 | |
| 
 | |
| 			if (bp != '|') {
 | |
| 				drw_arrow(drw, x - plw, barg->y, plw, barg->h, bp == '\\' || bp == '>' ? 1 : 0, bp == '<' ? 0 : 1);
 | |
| 				x -= plw;
 | |
| 			}
 | |
| 
 | |
| 			drw_setscheme(drw, nxtscheme);
 | |
| 			w = TEXTW(bs+2);
 | |
| 			drw_text(drw, x - w, barg->y, w, barg->h, lrpad / 2, bs+2, 0, False);
 | |
| 			x -= w;
 | |
| 
 | |
| 			bp = *bs;
 | |
| 			*bs = 0;
 | |
| 			prevscheme = nxtscheme;
 | |
| 		}
 | |
| 	}
 | |
| 	if (bp != '|') {
 | |
| 		drw_settrans(drw, prevscheme, scheme[SchemeNorm]);
 | |
| 		drw_arrow(drw, x - plw, barg->y, plw, barg->h, bp == '\\' || bp == '>' ? 1 : 0, bp == '<' ? 0 : 1);
 | |
| 		drw_rect(drw, x - 2 * plw, barg->y, plw, barg->h, 1, 1);
 | |
| 		x -= plw * 2;
 | |
| 	}
 | |
| 
 | |
| 	return xpos - x;
 | |
| }
 | |
| 
 |