use bitmap for bar

This commit is contained in:
smayzy 2026-03-30 13:53:08 +02:00
parent dda471aa34
commit 4227e38ad6

View File

@ -152,7 +152,7 @@ void win_float(WINDOW *lwin, float data, int digits, int use_color, int color) {
wrefresh(lwin); wrefresh(lwin);
} }
void win_bar(WINDOW *lwin, int data, int data_max, int use_color) { void win_bar(WINDOW *lwin, int data, int data_max, int use_color, int digits) {
int lwiny, lwinx; int lwiny, lwinx;
getmaxyx(lwin, lwiny, lwinx); getmaxyx(lwin, lwiny, lwinx);
@ -178,17 +178,54 @@ void win_bar(WINDOW *lwin, int data, int data_max, int use_color) {
} }
} }
char buf[16];
snprintf(buf, sizeof(buf), "%d W", data);
mvwprintw(lwin, lwiny / 2 - 1, 3, "%s", buf);
if (use_color) { if (use_color) {
wattroff(lwin, COLOR_PAIR(3)); wattroff(lwin, COLOR_PAIR(3));
wattroff(lwin, COLOR_PAIR(2)); wattroff(lwin, COLOR_PAIR(2));
wattroff(lwin, COLOR_PAIR(1)); wattroff(lwin, COLOR_PAIR(1));
} }
if (use_color) {
wattroff(lwin, COLOR_PAIR(0));
}
char buf[16];
int len;
snprintf(buf , sizeof(buf), "%d", data);
len = strlen(buf);
int bh = 5; // bitmap height
int bw = 3; // bitmap width
int size = smaller_of((lwiny - 2) / bh, (lwinx - 2 - (digits - 1)) / (bw * digits));
int total_width = digits * (bw * size) + (digits - 1);
int startx = (lwinx - total_width) / 3;
int starty = (lwiny - bh * size) / 2;
int offset = (bw * size + 1) * (digits - len);
for (int d = 0; d < len; d++) {
int digit = buf[d] - '0';
int dx = startx + d * (bw * size + 1) + offset;
for (int y = 0; y < bh; y++) {
for (int x = 0; x < bw; x++) {
if (digit_bitmaps[digit][y][x]) {
for (int yy = 0; yy < size; yy++)
for (int xx = 0; xx < size; xx++)
mvwaddch(lwin,
starty + y * size + yy,
dx + x * size + xx,
ACS_CKBOARD);
}
}
}
}
wrefresh(lwin); wrefresh(lwin);
if (use_color) {
wattroff(lwin, COLOR_PAIR(0));
}
} }
void bar_mark(WINDOW *lwin) { void bar_mark(WINDOW *lwin) {
@ -330,7 +367,7 @@ int main(int argc, char **argv) {
win_int(win[0], speed, 3, use_color, color_high(speed, lspeed, hspeed)); win_int(win[0], speed, 3, use_color, color_high(speed, lspeed, hspeed));
win_int(win[1], rpm, 4, use_color, color_high(rpm, lrpm, hrpm)); win_int(win[1], rpm, 4, use_color, color_high(rpm, lrpm, hrpm));
win_float(win[3], tq, 3, use_color, color_high(tq, ltq, htq)); win_float(win[3], tq, 3, use_color, color_high(tq, ltq, htq));
win_bar(win[4], power, hpower, use_color); win_bar(win[4], power, hpower, use_color, 4);
win_float(win[5], eff, 5, use_color, color_high(eff, leff, heff)); win_float(win[5], eff, 5, use_color, color_high(eff, leff, heff));
t100 = now; t100 = now;
} }