1
1

Ticket #2453: aggressive screen repaint

... to avoid artefacts after printing of non-printable symbols.

(tty_touch_lines): new function to mark modified lines of screen.
(do_refresh): mark lines as modified before redraw of non-fullscreen dialog
and clear entire screen before redraw of fullscreen dialog.

Signed-off-by: Andrew Borodin <aborodin@vmail.ru>
Этот коммит содержится в:
Andrew Borodin 2011-02-18 13:18:44 +03:00
родитель f5ff35a5f3
Коммит f809e6cf7a
4 изменённых файлов: 27 добавлений и 1 удалений

Просмотреть файл

@ -280,6 +280,14 @@ tty_touch_screen (void)
/* --------------------------------------------------------------------------------------------- */ /* --------------------------------------------------------------------------------------------- */
void
tty_touch_lines (int start, int num)
{
touchline (stdscr, start, num);
}
/* --------------------------------------------------------------------------------------------- */
void void
tty_gotoyx (int y, int x) tty_gotoyx (int y, int x)
{ {

Просмотреть файл

@ -453,6 +453,14 @@ tty_touch_screen (void)
/* --------------------------------------------------------------------------------------------- */ /* --------------------------------------------------------------------------------------------- */
void
tty_touch_lines (int start, int num)
{
SLsmg_touch_lines (start, num);
}
/* --------------------------------------------------------------------------------------------- */
void void
tty_gotoyx (int y, int x) tty_gotoyx (int y, int x)
{ {

Просмотреть файл

@ -110,6 +110,7 @@ extern int tty_lowlevel_getch (void);
extern int tty_reset_screen (void); extern int tty_reset_screen (void);
extern void tty_touch_screen (void); extern void tty_touch_screen (void);
extern void tty_touch_lines (int start, int num);
extern void tty_gotoyx (int y, int x); extern void tty_gotoyx (int y, int x);
extern void tty_getyx (int *py, int *px); extern void tty_getyx (int *py, int *px);

Просмотреть файл

@ -871,7 +871,12 @@ do_refresh (void)
if (fast_refresh) if (fast_refresh)
{ {
if ((d != NULL) && (d->data != NULL)) if ((d != NULL) && (d->data != NULL))
dlg_redraw ((Dlg_head *) d->data); {
Dlg_head *dlg = (Dlg_head *) d->data;
tty_touch_lines (dlg->y, dlg->lines);
dlg_redraw (dlg);
}
} }
else else
{ {
@ -879,6 +884,10 @@ do_refresh (void)
for (; d != NULL; d = g_list_next (d)) for (; d != NULL; d = g_list_next (d))
if ((d->data != NULL) && ((Dlg_head *) d->data)->fullscreen) if ((d->data != NULL) && ((Dlg_head *) d->data)->fullscreen)
break; break;
/* Clear entire screen to avoid artefacts after printing of non-printable symbols. */
clr_scr ();
/* back to top dialog */ /* back to top dialog */
for (; d != NULL; d = g_list_previous (d)) for (; d != NULL; d = g_list_previous (d))
if (d->data != NULL) if (d->data != NULL)