121 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			121 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;
 | 
						|
} |