Corretto scrolling orizzontale background

git-svn-id: svn://10.65.10.50/trunk@2439 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
villa 1996-01-12 11:29:51 +00:00
parent 1b0596fb89
commit 04c9d7c1ae

View File

@ -677,7 +677,7 @@ void TViswin::paint_screen ()
// j = riga totale, row = riga a video // j = riga totale, row = riga a video
// @mfunc Permette di stampare il background // @mfunc Permette di stampare il background
void TViswin::paint_background ( void TViswin::paint_background(
long j, // @parm Numero della riga di cui stampare il background long j, // @parm Numero della riga di cui stampare il background
int row) // @parm Numero della riga a video sulla quale viene stampato il background int row) // @parm Numero della riga a video sulla quale viene stampato il background
{ {
@ -707,6 +707,10 @@ void TViswin::paint_background (
PNT b, e; PNT b, e;
int cnt = 0; int cnt = 0;
char ch; char ch;
bool isbeg = FALSE;
bool isend = FALSE;
while ((ch = rwd[cnt++]) != '\0') while ((ch = rwd[cnt++]) != '\0')
{ {
switch (ch) switch (ch)
@ -757,22 +761,26 @@ void TViswin::paint_background (
b.v = e.v = taby(2*row+1) / 2; b.v = e.v = taby(2*row+1) / 2;
b.h = tabx(x1); b.h = tabx(x1);
e.h = tabx(x2 + 1); e.h = tabx(x2 + 1);
xvt_dwin_draw_set_pos (win (), b); xvt_dwin_draw_set_pos(win(), b);
xvt_dwin_draw_line (win (), e); xvt_dwin_draw_line(win(), e);
break; break;
case 'r': // orizzontale scorciata agli estremi case 'r': // orizzontale scorciata agli estremi
x1 = (byte) rwd[cnt++]; x1 = (byte) rwd[cnt++];
x2 = (byte) rwd[cnt++]; x2 = (byte) rwd[cnt++];
isbeg = ox <= (x1-1);
isend = mx >= (x2-1);
if (x1 <= mx && x2 >= ox) if (x1 <= mx && x2 >= ox)
{ {
x1 += (X_OFFSET -1) - ox; x1 += (X_OFFSET -1) - ox;
if (x1 < X_OFFSET) x1 = X_OFFSET; if (x1 < X_OFFSET) x1 = X_OFFSET;
x2 += (X_OFFSET -1) - ox; x2 += (X_OFFSET -1) - ox;
b.v = e.v = taby(2*row+1) / 2; b.v = e.v = taby(2*row+1) / 2;
b.h = tabx(2*x1+1) / 2; if (isbeg) b.h = tabx(2*x1+1) / 2;
e.h = tabx(2*x2+1) / 2; else b.h = tabx(x1);
xvt_dwin_draw_set_pos (win (), b); if (isend) e.h = tabx(2*x2+1) / 2;
xvt_dwin_draw_line (win (), e); else e.h = tabx(x2 +1);
xvt_dwin_draw_set_pos(win(), b);
xvt_dwin_draw_line(win(), e);
} }
break; break;
@ -875,7 +883,7 @@ void TViswin::paint_row (long j)
xvt_dwin_draw_rect (win (), &r); xvt_dwin_draw_rect (win (), &r);
} }
paint_background (j, row); paint_background(j, row);
set_opaque_text(FALSE); set_opaque_text(FALSE);
const char *cp; const char *cp;
@ -953,7 +961,7 @@ void TViswin::paint_column (
{ {
const long riga_txt = orig_y + l; const long riga_txt = orig_y + l;
const int riga_scr = (int)l+Y_OFFSET; const int riga_scr = (int)l+Y_OFFSET;
paint_background (riga_txt,riga_scr); paint_background (riga_txt, riga_scr);
#if XVT_OS == XVT_OS_WIN // paint page limits #if XVT_OS == XVT_OS_WIN // paint page limits
if ((riga_txt% _formlen) == (_formlen - 1) && _toplevel) if ((riga_txt% _formlen) == (_formlen - 1) && _toplevel)
{ {