diff --git a/src/main.c b/src/main.c index 7e84f3b..edb0714 100644 --- a/src/main.c +++ b/src/main.c @@ -152,7 +152,7 @@ void win_float(WINDOW *lwin, float data, int digits, int use_color, int color) { 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; 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) { wattroff(lwin, COLOR_PAIR(3)); wattroff(lwin, COLOR_PAIR(2)); 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); + + if (use_color) { + wattroff(lwin, COLOR_PAIR(0)); + } } 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[1], rpm, 4, use_color, color_high(rpm, lrpm, hrpm)); 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)); t100 = now; }