From f77177e2f3ae27c48151a297dd0a4b36101038a2 Mon Sep 17 00:00:00 2001 From: verdant Date: Tue, 21 Jul 2026 19:01:48 +0800 Subject: Add display handing functions Add these functions for initializing and drawing status bar, progress bar and status information --- display.c | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 display.c (limited to 'display.c') diff --git a/display.c b/display.c new file mode 100644 index 0000000..43865a9 --- /dev/null +++ b/display.c @@ -0,0 +1,53 @@ +#include "display.h" + +#include + +#include "err.h" +#include "log.h" +#include "mem.h" +#include "utils.h" +#include "version.h" +#include "wm.h" + +void color_pair_init() { + init_pair(COLOR_PAIR_STATUS_BAR, COLOR_BLACK, COLOR_WHITE); + init_pair(COLOR_PAIR_PROGRESS, COLOR_YELLOW, COLOR_BLUE); + init_pair(COLOR_PAIR_TEXT_INFO, COLOR_WHITE, COLOR_BLUE); + init_pair(COLOR_PAIR_FM_DIR, COLOR_CYAN, COLOR_BLUE); + init_pair(COLOR_PAIR_BORDER, COLOR_WHITE, COLOR_BLUE); +} + +terminal *ncurses_init() { + initscr(); + raw(); + curs_set(0); + if (!has_colors()) { + log_write(LOG_WARN, "Terminal does not support colors"); + } + + start_color(); + color_pair_init(); + terminal *t = wm_init(); + return t; +} + +void draw_stat_bar(terminal *t, const char *sys_version) { + window *stat_bar = + wm_create_new_w(t, "stat_bar", 1, t->maxx, t->maxy - 1, 0); + if (!stat_bar || !stat_bar->win) return; + wattron(stat_bar->win, COLOR_PAIR(COLOR_PAIR_STATUS_BAR)); + mvwprintw(stat_bar->win, 0, 0, "%*s", t->maxx, ""); + mvwprintw(stat_bar->win, 0, 0, "SF v%s | %s", PROGRAM_VERSION, sys_version); + wattroff(stat_bar->win, COLOR_PAIR(COLOR_PAIR_STATUS_BAR)); + + wrefresh(stat_bar->win); +} + +void wprintw_colorful(WINDOW *w, int attr, const char *format, ...) { + va_list ap; + va_start(ap, format); + wattron(w, COLOR_PAIR(attr)); + vw_printw(w, format, ap); + wattroff(w, COLOR_PAIR(attr)); + va_end(ap); +} -- cgit v1.2.3