status2d: adding experimental RGBA support ref. #280

vertigo
bakkeby 2 years ago
parent a24ed7f049
commit 62ca236a91

@ -307,10 +307,8 @@ void
drw_clr_create(
Drw *drw,
Clr *dest,
const char *clrname
#if BAR_ALPHA_PATCH
, unsigned int alpha
#endif // BAR_ALPHA_PATCH
const char *clrname,
unsigned int alpha
) {
if (!drw || !dest || !clrname)
return;
@ -369,7 +367,7 @@ drw_scm_create(
#if BAR_ALPHA_PATCH
drw_clr_create(drw, &ret[i], clrnames[i], alphas[i]);
#else
drw_clr_create(drw, &ret[i], clrnames[i]);
drw_clr_create(drw, &ret[i], clrnames[i], 0xff);
#endif // BAR_ALPHA_PATCH
}
return ret;

@ -61,11 +61,10 @@ unsigned int drw_fontset_getwidth(Drw *drw, const char *text, Bool markup);
void drw_clr_create(
Drw *drw,
Clr *dest,
const char *clrname
#if BAR_ALPHA_PATCH
, unsigned int alpha
#endif // BAR_ALPHA_PATCH
const char *clrname,
unsigned int alpha
);
Clr *drw_scm_create(
Drw *drw,
char *clrnames[],

@ -78,15 +78,19 @@ click_status2d(Bar *bar, Arg *arg, BarArg *a)
#endif // BAR_STATUSCMD_PATCH
int
drawstatusbar(BarArg *a, char* stext)
drawstatusbar(BarArg *barg, char* stext)
{
int i, w, len;
int x = a->x;
int y = a->y;
int i, w, len, s, col, tc;
int rx, ry, rw, rh;
unsigned int rgb, a;
int x = barg->x;
int y = barg->y;
short isCode = 0;
char buf[8];
char *text;
char *p;
Clr oldbg, oldfg;
char c;
Clr oldbg, oldfg, swp;
len = strlen(stext);
if (!(text = (char*) malloc(sizeof(char)*(len + 1))))
die("malloc");
@ -116,82 +120,60 @@ drawstatusbar(BarArg *a, char* stext)
/* process code */
while (text[++i] != '^') {
if (text[i] == 'c') {
char buf[8];
if (i + 7 >= len) {
i += 7;
len = 0;
break;
}
memcpy(buf, (char*)text+i+1, 7);
buf[7] = '\0';
#if BAR_ALPHA_PATCH && BAR_STATUS2D_NO_ALPHA_PATCH
drw_clr_create(drw, &drw->scheme[ColFg], buf, 0xff);
#elif BAR_ALPHA_PATCH
drw_clr_create(drw, &drw->scheme[ColFg], buf, alphas[SchemeNorm][ColFg]);
#else
drw_clr_create(drw, &drw->scheme[ColFg], buf);
#endif // BAR_ALPHA_PATCH
i += 7;
} else if (text[i] == 'b') {
char buf[8];
if (i + 7 >= len) {
i += 7;
len = 0;
break;
s = sscanf(text + i, "%c#%6x%2x", &c, &rgb, &a);
switch (c) {
case 'c':
case 'b':
col = c == 'c' ? ColFg : ColBg;
switch (s) {
case 3:
sprintf(buf, "#%.6x", rgb);
drw_clr_create(drw, &drw->scheme[col], buf, a);
i += 9;
break;
case 2:
sprintf(buf, "#%.6x", rgb);
drw_clr_create(drw, &drw->scheme[col], buf, 0xff);
i += 7;
break;
default:
len = 0;
break;
}
memcpy(buf, (char*)text+i+1, 7);
buf[7] = '\0';
#if BAR_ALPHA_PATCH && BAR_STATUS2D_NO_ALPHA_PATCH
drw_clr_create(drw, &drw->scheme[ColBg], buf, 0xff);
#elif BAR_ALPHA_PATCH
drw_clr_create(drw, &drw->scheme[ColBg], buf, alphas[SchemeNorm][ColBg]);
#else
drw_clr_create(drw, &drw->scheme[ColBg], buf);
#endif // BAR_ALPHA_PATCH
i += 7;
break;
#if BAR_STATUS2D_XRDB_TERMCOLORS_PATCH
} else if (text[i] == 'C') {
int c = atoi(text + ++i) % 16;
#if BAR_ALPHA_PATCH && BAR_STATUS2D_NO_ALPHA_PATCH
drw_clr_create(drw, &drw->scheme[ColFg], termcolor[c], 0xff);
#elif BAR_ALPHA_PATCH
drw_clr_create(drw, &drw->scheme[ColFg], termcolor[c], alphas[SchemeNorm][ColBg]);
#else
drw_clr_create(drw, &drw->scheme[ColFg], termcolor[c]);
#endif // BAR_ALPHA_PATCH
} else if (text[i] == 'B') {
int c = atoi(text + ++i) % 16;
#if BAR_ALPHA_PATCH && BAR_STATUS2D_NO_ALPHA_PATCH
drw_clr_create(drw, &drw->scheme[ColBg], termcolor[c], 0xff);
#elif BAR_ALPHA_PATCH
drw_clr_create(drw, &drw->scheme[ColBg], termcolor[c], alphas[SchemeNorm][ColBg]);
#else
drw_clr_create(drw, &drw->scheme[ColBg], termcolor[c]);
#endif // BAR_ALPHA_PATCH
case 'C':
case 'B':
col = c == 'C' ? ColFg : ColBg;
tc = atoi(text + ++i) % 16;
drw_clr_create(drw, &drw->scheme[col], termcolor[tc], 0xff);
break;
#endif // BAR_STATUS2D_XRDB_TERMCOLORS_PATCH
} else if (text[i] == 'd') {
case 'd':
drw->scheme[ColFg] = scheme[SchemeNorm][ColFg];
drw->scheme[ColBg] = scheme[SchemeNorm][ColBg];
} else if (text[i] == 'w') {
Clr swp;
break;
case 'w':
swp = drw->scheme[ColFg];
drw->scheme[ColFg] = drw->scheme[ColBg];
drw->scheme[ColBg] = swp;
} else if (text[i] == 'v') {
break;
case 'v':
oldfg = drw->scheme[ColFg];
oldbg = drw->scheme[ColBg];
} else if (text[i] == 't') {
break;
case 't':
drw->scheme[ColFg] = oldfg;
drw->scheme[ColBg] = oldbg;
} else if (text[i] == 'r') {
int rx = atoi(text + ++i);
break;
case 'r':
rx = atoi(text + ++i);
while (text[++i] != ',');
int ry = atoi(text + ++i);
ry = atoi(text + ++i);
while (text[++i] != ',');
int rw = atoi(text + ++i);
rw = atoi(text + ++i);
while (text[++i] != ',');
int rh = atoi(text + ++i);
rh = atoi(text + ++i);
if (ry < 0)
ry = 0;
@ -199,8 +181,10 @@ drawstatusbar(BarArg *a, char* stext)
rx = 0;
drw_rect(drw, rx + x, y + ry, rw, rh, 1, 0);
} else if (text[i] == 'f') {
break;
case 'f':
x += atoi(text + ++i);
break;
}
}

@ -133,7 +133,8 @@ loadxrdb()
/* status2d terminal colours */
for (s = 0; s < 16; s++) {
sprintf(resource, "color%d", s);
loadxrdbcolor(xrdb, &termcolor[s], resource);
alphas[0] = 0xFF;
loadxrdbcolor(xrdb, &termcolor[s], &alphas[0], resource);
}
#endif // BAR_STATUS2D_XRDB_TERMCOLORS_PATCH

Loading…
Cancel
Save