Implement colors

This commit is contained in:
Ray Chason
2026-08-10 09:28:03 +03:00
committed by Pasi Kallinen
parent 725bb3d05f
commit 5dd1673678
+42 -26
View File
@@ -201,6 +201,7 @@ static const char *const fancy_status_hilite_colors[] = {
struct tty_status_field { struct tty_status_field {
char *text; char *text;
int color; int color;
unsigned attrs;
int chg; int chg;
int percent; int percent;
}; };
@@ -741,7 +742,8 @@ X11_status_update_tty(
fldp->text = dupstr(str); fldp->text = dupstr(str);
fldp->chg = chg; fldp->chg = chg;
fldp->percent = percent; fldp->percent = percent;
fldp->color = color; fldp->color = color & 0xFF;
fldp->attrs = color >> 8;
} }
break; break;
} }
@@ -1162,33 +1164,33 @@ tty_status_redraw(Widget w)
const char *pre; const char *pre;
const char *post; const char *post;
} formats[MAXBLSTATS] = { } formats[MAXBLSTATS] = {
/*@@@*/[BL_TITLE] = { NULL, NULL }, [BL_TITLE] = { NULL, NULL },
/*@@@*/[BL_STR] = { "St:", NULL }, [BL_STR] = { "St:", NULL },
/*@@@*/[BL_DX] = { "Dx:", NULL }, [BL_DX] = { "Dx:", NULL },
/*@@@*/[BL_CO] = { "Co:", NULL }, [BL_CO] = { "Co:", NULL },
/*@@@*/[BL_IN] = { "In:", NULL }, [BL_IN] = { "In:", NULL },
/*@@@*/[BL_WI] = { "Wi:", NULL }, [BL_WI] = { "Wi:", NULL },
/*@@@*/[BL_CH] = { "Ch:", NULL }, [BL_CH] = { "Ch:", NULL },
/*@@@*/[BL_ALIGN] = { NULL, NULL }, [BL_ALIGN] = { NULL, NULL },
/*@@@*/[BL_SCORE] = { "S:", NULL }, [BL_SCORE] = { "S:", NULL },
/*@@@*/[BL_CAP] = { NULL, NULL }, [BL_CAP] = { NULL, NULL },
/*@@@*/[BL_GOLD] = { NULL, NULL }, [BL_GOLD] = { NULL, NULL },
/*@@@*/[BL_ENE] = { "Pw:", NULL }, [BL_ENE] = { "Pw:", NULL },
/*@@@*/[BL_ENEMAX] = { "(", ")" }, [BL_ENEMAX] = { "(", ")" },
/*@@@*/[BL_XP] = { "Xp:", NULL }, [BL_XP] = { "Xp:", NULL },
/*@@@*/[BL_AC] = { "AC:", NULL }, [BL_AC] = { "AC:", NULL },
/*@@@*/[BL_HD] = { "HD:", NULL }, [BL_HD] = { "HD:", NULL },
/*@@@*/[BL_TIME] = { "T:", NULL }, [BL_TIME] = { "T:", NULL },
/*@@@*/[BL_HUNGER] = { NULL, NULL }, [BL_HUNGER] = { NULL, NULL },
/*@@@*/[BL_HP] = { "HP:", NULL }, [BL_HP] = { "HP:", NULL },
/*@@@*/[BL_HPMAX] = { "(", ")" }, [BL_HPMAX] = { "(", ")" },
/*@@@*/[BL_LEVELDESC] = { NULL, NULL }, [BL_LEVELDESC] = { NULL, NULL },
/*@@@*/[BL_EXP] = { "/", NULL }, [BL_EXP] = { "/", NULL },
/*@@@*/[BL_CONDITION] = { NULL, NULL }, [BL_CONDITION] = { NULL, NULL },
[BL_WEAPON] = { NULL, NULL }, /* not in 2-line */ [BL_WEAPON] = { NULL, NULL }, /* not in 2-line */
[BL_ARMOR] = { NULL, NULL }, /* not in 2-line */ [BL_ARMOR] = { NULL, NULL }, /* not in 2-line */
[BL_TERRAIN] = { NULL, NULL }, /* not in 2-line */ [BL_TERRAIN] = { NULL, NULL }, /* not in 2-line */
/*@@@*/[BL_VERS] = { NULL, NULL }, [BL_VERS] = { NULL, NULL },
}; };
Arg args[5]; Arg args[5];
int num_args; int num_args;
@@ -1233,7 +1235,7 @@ tty_status_redraw(Widget w)
x += tty_render_text(w, x, y, formats[fld].pre, NO_COLOR, 0, FALSE); x += tty_render_text(w, x, y, formats[fld].pre, NO_COLOR, 0, FALSE);
} }
x += tty_render_text(w, x, y, fldp->text, fldp->color, x += tty_render_text(w, x, y, fldp->text, fldp->color,
fldp->chg ? HL_INVERSE : 0, fld == BL_GOLD); fldp->attrs, fld == BL_GOLD);
if (formats[fld].post != NULL) { if (formats[fld].post != NULL) {
x += tty_render_text(w, x, y, formats[fld].post, NO_COLOR, 0, FALSE); x += tty_render_text(w, x, y, formats[fld].post, NO_COLOR, 0, FALSE);
} }
@@ -1267,6 +1269,20 @@ tty_render_text(Widget w, int x, int y, const char *text, int color, int attr,
XtSetArg(args[num_args], XtNfont, &font); num_args++; XtSetArg(args[num_args], XtNfont, &font); num_args++;
XtGetValues(w, args, num_args); XtGetValues(w, args, num_args);
/* Implement color if requested */
if (color != NO_COLOR) {
XrmValue source;
XrmValue dest;
Pixel pixel;
const char *cname = fancy_status_hilite_colors[color];
source.addr = (XPointer) cname;
source.size = (unsigned int) strlen(cname) + 1;
dest.size = (unsigned int) sizeof (Pixel);
dest.addr = (XPointer) &pixel;
if (XtConvertAndStore(w, XtRString, &source, XtRPixel, &dest))
fgpixel = pixel;
}
/* Get a graphics context */ /* Get a graphics context */
if (attr & HL_INVERSE) { if (attr & HL_INVERSE) {
values.foreground = bgpixel; values.foreground = bgpixel;