dwm/patch/bar_statuscolors.c

102 lines
1.7 KiB
C

int
width_statuscolors(Bar *bar, BarArg *a)
{
#if BAR_STATUSCMD_PATCH
return textw_wosc(rawstext);
#else
return textw_wosc(stext);
#endif // BAR_STATUSCMD_PATCH
}
#if BAR_EXTRASTATUS_PATCH
int
width_statuscolors_es(Bar *bar, BarArg *a)
{
#if BAR_STATUSCMD_PATCH
return textw_wosc(rawestext);
#else
return textw_wosc(estext);
#endif // BAR_STATUSCMD_PATCH
}
#endif // BAR_EXTRASTATUS_PATCH
int
draw_statuscolors(Bar *bar, BarArg *a)
{
#if BAR_STATUSCMD_PATCH
return draw_wosc(bar, a, rawstext);
#else
return draw_wosc(bar, a, stext);
#endif // BAR_STATUSCMD_PATCH
}
#if BAR_EXTRASTATUS_PATCH
int
draw_statuscolors_es(Bar *bar, BarArg *a)
{
#if BAR_STATUSCMD_PATCH
return draw_wosc(bar, a, rawestext);
#else
return draw_wosc(bar, a, estext);
#endif // BAR_STATUSCMD_PATCH
}
#endif // BAR_EXTRASTATUS_PATCH
#if !BAR_STATUSCMD_PATCH
int
click_statuscolors(Bar *bar, Arg *arg, BarArg *a)
{
return ClkStatusText;
}
#endif // BAR_STATUSCMD_PATCH
int
textw_wosc(char *s)
{
char *ts = s;
char *tp = s;
int sw = 0;
char ctmp;
while (1) {
if ((unsigned int)*ts > LENGTH(colors)) {
ts++;
continue;
}
ctmp = *ts;
*ts = '\0';
sw += drw_fontset_getwidth(drw, tp, True);
*ts = ctmp;
if (ctmp == '\0')
break;
tp = ++ts;
}
return sw;
}
int
draw_wosc(Bar *bar, BarArg *a, char *s)
{
char *ts = s;
char *tp = s;
int tx = 0;
char ctmp;
while (1) {
if ((unsigned int)*ts > LENGTH(colors)) {
ts++;
continue;
}
ctmp = *ts;
*ts = '\0';
drw_text(drw, a->x + tx, a->y, a->w - tx, a->h, 0, tp, 0, True);
tx += TEXTW(tp) - lrpad;
if (ctmp == '\0')
break;
drw_setscheme(drw, scheme[(unsigned int)(ctmp-1)]);
*ts = ctmp;
tp = ++ts;
}
return 1;
}