X-Git-Url: http://git.ozlabs.org/?p=petitboot;a=blobdiff_plain;f=ui%2Fncurses%2Fnc-textscreen.c;h=a460188180ab10621d2dca5176ee6f6b139cecce;hp=4ae0db42dfb989c824a5ddb1e2a036bdb6bcd35d;hb=ba14fc8ec91b54be57fdf2ca373e3d140ae2b6d6;hpb=494988c501287e03da3becba5c03cbce7c3d9d20 diff --git a/ui/ncurses/nc-textscreen.c b/ui/ncurses/nc-textscreen.c index 4ae0db4..a460188 100644 --- a/ui/ncurses/nc-textscreen.c +++ b/ui/ncurses/nc-textscreen.c @@ -41,14 +41,15 @@ struct text_screen *text_screen_from_scr(struct nc_scr *scr) void text_screen_draw(struct text_screen *screen) { - int max_y, i; + int max_y, max_x, i; max_y = getmaxy(screen->scr.sub_ncw); + max_x = getmaxx(screen->scr.sub_ncw) - 1; max_y = min(max_y, screen->scroll_y + screen->n_lines); for (i = screen->scroll_y; i < max_y; i++) - mvwaddstr(screen->scr.sub_ncw, i, 1, screen->lines[i]); + mvwaddnstr(screen->scr.sub_ncw, i, 1, screen->lines[i], max_x); wrefresh(screen->scr.sub_ncw); } @@ -56,6 +57,7 @@ void text_screen_draw(struct text_screen *screen) static void text_screen_scroll(struct text_screen *screen, int key) { int win_lines = getmaxy(screen->scr.sub_ncw); + int win_cols = getmaxx(screen->scr.sub_ncw) - 1; int delta; if (key == KEY_UP) @@ -74,11 +76,12 @@ static void text_screen_scroll(struct text_screen *screen, int key) wscrl(screen->scr.sub_ncw, delta); if (delta > 0) { - mvwaddstr(screen->scr.sub_ncw, win_lines - 1, 1, - screen->lines[screen->scroll_y+win_lines-1]); + mvwaddnstr(screen->scr.sub_ncw, win_lines - 1, 1, + screen->lines[screen->scroll_y+win_lines-1], + win_cols); } else if (delta < 0) { - mvwaddstr(screen->scr.sub_ncw, 0, 1, - screen->lines[screen->scroll_y]); + mvwaddnstr(screen->scr.sub_ncw, 0, 1, + screen->lines[screen->scroll_y], win_cols); } wrefresh(screen->scr.sub_ncw); @@ -135,7 +138,7 @@ static int text_screen_fold_cb(void *arg, const char *buf, int len) void text_screen_set_text(struct text_screen *screen, const char *text) { - fold_text(text, getmaxx(screen->scr.sub_ncw), text_screen_fold_cb, + fold_text(text, getmaxx(screen->scr.sub_ncw) - 1, text_screen_fold_cb, screen); } @@ -174,7 +177,7 @@ struct nc_scr *text_screen_scr(struct text_screen *screen) } void text_screen_set_help(struct text_screen *screen, const char *title, - const char *text) + const struct help_text *text) { screen->help_title = title; screen->help_text = text; @@ -183,6 +186,13 @@ void text_screen_set_help(struct text_screen *screen, const char *title, static int text_screen_post(struct nc_scr *scr) { + struct text_screen *screen = text_screen_from_scr(scr); + + if (screen->need_update) { + text_screen_draw(screen); + screen->need_update = false; + } + nc_scr_frame_draw(scr); redrawwin(scr->main_ncw); wrefresh(scr->main_ncw); @@ -202,6 +212,7 @@ void text_screen_init(struct text_screen *screen, struct cui *cui, screen->cui = cui; screen->on_exit = on_exit; + screen->need_update = false; screen->scr.frame.ltitle = talloc_strdup(screen, title); screen->scr.frame.rtitle = NULL;