summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
f59937a)
When a text_screen is given a long line, it'll wrap to the next,
overstepping the left margin.
We already have folded text for flowed text screens, so just trim long
lines at the correct column.
This exposes an off-by-one with the automatic wrapping in
text_screen_set_text(), where we may overrun the last char, so fix that
too.
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
void text_screen_draw(struct text_screen *screen)
{
void text_screen_draw(struct text_screen *screen)
{
max_y = getmaxy(screen->scr.sub_ncw);
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++)
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);
}
wrefresh(screen->scr.sub_ncw);
}
static void text_screen_scroll(struct text_screen *screen, int key)
{
int win_lines = getmaxy(screen->scr.sub_ncw);
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)
int delta;
if (key == KEY_UP)
wscrl(screen->scr.sub_ncw, delta);
if (delta > 0) {
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);
- 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);
}
wrefresh(screen->scr.sub_ncw);
void text_screen_set_text(struct text_screen *screen, const char *text)
{
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,