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>
This commit is contained in:
Andrew Borodin 2011-02-18 13:18:44 +03:00
parent f5ff35a5f3
commit f809e6cf7a
4 changed files with 27 additions and 1 deletions

View File

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

View File

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

View File

@ -110,6 +110,7 @@ extern int tty_lowlevel_getch (void);
extern int tty_reset_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_getyx (int *py, int *px);

View File

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