From ff455b0004080a260a63f12ca8bf7c148eab6ee7 Mon Sep 17 00:00:00 2001 From: ryenus Date: Sat, 3 Oct 2020 00:12:31 +0800 Subject: limit max screen title length to window width Applies screen title truncating to all InfoScreen classes. --- InfoScreen.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) (limited to 'InfoScreen.c') diff --git a/InfoScreen.c b/InfoScreen.c index 35c16473..52117d0b 100644 --- a/InfoScreen.c +++ b/InfoScreen.c @@ -42,14 +42,21 @@ InfoScreen* InfoScreen_done(InfoScreen* this) { void InfoScreen_drawTitled(InfoScreen* this, const char* fmt, ...) { va_list ap; va_start(ap, fmt); + + char* title = xMalloc(COLS + 1); + int len = vsnprintf(title, COLS + 1, fmt, ap); + if (len > COLS) { + memset(&title[COLS - 3], '.', 3); + } + attrset(CRT_colors[METER_TEXT]); mvhline(0, 0, ' ', COLS); - (void) wmove(stdscr, 0, 0); - vw_printw(stdscr, fmt, ap); + mvwprintw(stdscr, 0, 0, title); attrset(CRT_colors[DEFAULT_COLOR]); this->display->needsRedraw = true; Panel_draw(this->display, true); IncSet_drawBar(this->inc); + free(title); va_end(ap); } -- cgit v1.2.3