Screen bleed fix under rare circumstance
This commit is contained in:
parent
f8b8244ab1
commit
c7bc65c4a8
|
@ -52,6 +52,7 @@ Type
|
||||||
Procedure ClearScreen; Virtual;
|
Procedure ClearScreen; Virtual;
|
||||||
Procedure ScrollWindow; Virtual;
|
Procedure ScrollWindow; Virtual;
|
||||||
Procedure ClearEOL;
|
Procedure ClearEOL;
|
||||||
|
Procedure CursorXYRaw (X, Y: Byte);
|
||||||
Procedure CursorXY (X, Y: Byte);
|
Procedure CursorXY (X, Y: Byte);
|
||||||
Procedure SetWindow (X1, Y1, X2, Y2: Byte; Home: Boolean);
|
Procedure SetWindow (X1, Y1, X2, Y2: Byte; Home: Boolean);
|
||||||
Procedure SetScreenSize (Mode: Byte);
|
Procedure SetScreenSize (Mode: Byte);
|
||||||
|
@ -214,11 +215,24 @@ Begin
|
||||||
FTextAttr := Attr;
|
FTextAttr := Attr;
|
||||||
End;
|
End;
|
||||||
|
|
||||||
|
Procedure TOutputDarwin.CursorXYRaw (X, Y: Byte);
|
||||||
|
Begin
|
||||||
|
If (Y < 1) Then Y := 1 Else
|
||||||
|
If (Y > ScreenSize) Then Y := ScreenSize;
|
||||||
|
If (X < 1) Then X := 1 Else
|
||||||
|
If (X > 80) Then X := 80;
|
||||||
|
|
||||||
|
BufAddStr(#27 + '[' + strI2S(Y) + ';' + strI2S(X) + 'H');
|
||||||
|
BufFlush;
|
||||||
|
|
||||||
|
FCursorX := X;
|
||||||
|
FCursorY := Y;
|
||||||
|
End;
|
||||||
|
|
||||||
Procedure TOutputDarwin.CursorXY (X, Y: Byte);
|
Procedure TOutputDarwin.CursorXY (X, Y: Byte);
|
||||||
Begin
|
Begin
|
||||||
If (Y < 1) Then Y := 1 Else
|
If (Y < 1) Then Y := 1 Else
|
||||||
// If (Y > FWinBot) Then Y := FWinBot; {changed 109a4}
|
If (Y > FWinBot) Then Y := FWinBot; {changed 109a4}
|
||||||
If (Y > ScreenSize) Then Y := ScreenSize;
|
|
||||||
If (X < 1) Then X := 1 Else
|
If (X < 1) Then X := 1 Else
|
||||||
If (X > 80) Then X := 80;
|
If (X > 80) Then X := 80;
|
||||||
|
|
||||||
|
@ -452,7 +466,7 @@ Begin
|
||||||
OldX := FCursorX;
|
OldX := FCursorX;
|
||||||
OldY := FCursorY;
|
OldY := FCursorY;
|
||||||
|
|
||||||
CursorXY (X, Y);
|
CursorXYRaw (X, Y);
|
||||||
SetTextAttr (A);
|
SetTextAttr (A);
|
||||||
|
|
||||||
For Count := 1 to Length(Text) Do
|
For Count := 1 to Length(Text) Do
|
||||||
|
@ -466,8 +480,8 @@ Begin
|
||||||
End Else
|
End Else
|
||||||
Break;
|
Break;
|
||||||
|
|
||||||
SetTextAttr(OldAttr);
|
SetTextAttr (OldAttr);
|
||||||
CursorXY (OldX, OldY);
|
CursorXYRaw (OldX, OldY);
|
||||||
|
|
||||||
BufFlush;
|
BufFlush;
|
||||||
End;
|
End;
|
||||||
|
@ -498,7 +512,7 @@ Begin
|
||||||
OldX := FCursorX;
|
OldX := FCursorX;
|
||||||
OldY := FCursorY;
|
OldY := FCursorY;
|
||||||
|
|
||||||
CursorXY (X, Y);
|
CursorXYRaw (X, Y);
|
||||||
SetTextAttr (Attr);
|
SetTextAttr (Attr);
|
||||||
|
|
||||||
Count := 1;
|
Count := 1;
|
||||||
|
@ -533,8 +547,8 @@ Begin
|
||||||
Dec(Pad);
|
Dec(Pad);
|
||||||
End;
|
End;
|
||||||
|
|
||||||
SetTextAttr(OldAttr);
|
SetTextAttr (OldAttr);
|
||||||
CursorXY (OldX, OldY);
|
CursorXYRaw (OldX, OldY);
|
||||||
|
|
||||||
BufFlush;
|
BufFlush;
|
||||||
End;
|
End;
|
||||||
|
|
|
@ -52,6 +52,7 @@ Type
|
||||||
Procedure ClearScreen; Virtual;
|
Procedure ClearScreen; Virtual;
|
||||||
Procedure ScrollWindow; Virtual;
|
Procedure ScrollWindow; Virtual;
|
||||||
Procedure ClearEOL;
|
Procedure ClearEOL;
|
||||||
|
Procedure CursorXYRaw (X, Y: Byte);
|
||||||
Procedure CursorXY (X, Y: Byte);
|
Procedure CursorXY (X, Y: Byte);
|
||||||
Procedure SetWindow (X1, Y1, X2, Y2: Byte; Home: Boolean);
|
Procedure SetWindow (X1, Y1, X2, Y2: Byte; Home: Boolean);
|
||||||
Procedure SetScreenSize (Mode: Byte);
|
Procedure SetScreenSize (Mode: Byte);
|
||||||
|
@ -214,11 +215,25 @@ Begin
|
||||||
FTextAttr := Attr;
|
FTextAttr := Attr;
|
||||||
End;
|
End;
|
||||||
|
|
||||||
|
Procedure TOutputLinux.CursorXYRaw (X, Y: Byte);
|
||||||
|
Begin
|
||||||
|
If (Y < 1) Then Y := 1 Else
|
||||||
|
If (Y > ScreenSize) Then Y := ScreenSize;
|
||||||
|
If (X < 1) Then X := 1 Else
|
||||||
|
If (X > 80) Then X := 80;
|
||||||
|
|
||||||
|
BufAddStr(#27 + '[' + strI2S(Y) + ';' + strI2S(X) + 'H');
|
||||||
|
BufFlush;
|
||||||
|
|
||||||
|
FCursorX := X;
|
||||||
|
FCursorY := Y;
|
||||||
|
End;
|
||||||
|
|
||||||
Procedure TOutputLinux.CursorXY (X, Y: Byte);
|
Procedure TOutputLinux.CursorXY (X, Y: Byte);
|
||||||
Begin
|
Begin
|
||||||
If (Y < 1) Then Y := 1 Else
|
If (Y < 1) Then Y := 1 Else
|
||||||
// If (Y > FWinBot) Then Y := FWinBot; {changed 109a4}
|
If (Y > FWinBot) Then Y := FWinBot; {changed 109a4}
|
||||||
If (Y > ScreenSize) Then Y := ScreenSize;
|
// If (Y > ScreenSize) Then Y := ScreenSize;
|
||||||
If (X < 1) Then X := 1 Else
|
If (X < 1) Then X := 1 Else
|
||||||
If (X > 80) Then X := 80;
|
If (X > 80) Then X := 80;
|
||||||
|
|
||||||
|
@ -452,7 +467,7 @@ Begin
|
||||||
OldX := FCursorX;
|
OldX := FCursorX;
|
||||||
OldY := FCursorY;
|
OldY := FCursorY;
|
||||||
|
|
||||||
CursorXY (X, Y);
|
CursorXYRaw (X, Y);
|
||||||
SetTextAttr (A);
|
SetTextAttr (A);
|
||||||
|
|
||||||
For Count := 1 to Length(Text) Do
|
For Count := 1 to Length(Text) Do
|
||||||
|
@ -466,8 +481,8 @@ Begin
|
||||||
End Else
|
End Else
|
||||||
Break;
|
Break;
|
||||||
|
|
||||||
SetTextAttr(OldAttr);
|
SetTextAttr (OldAttr);
|
||||||
CursorXY (OldX, OldY);
|
CursorXYRaw (OldX, OldY);
|
||||||
|
|
||||||
BufFlush;
|
BufFlush;
|
||||||
End;
|
End;
|
||||||
|
@ -498,7 +513,7 @@ Begin
|
||||||
OldX := FCursorX;
|
OldX := FCursorX;
|
||||||
OldY := FCursorY;
|
OldY := FCursorY;
|
||||||
|
|
||||||
CursorXY (X, Y);
|
CursorXYRaw (X, Y);
|
||||||
SetTextAttr (Attr);
|
SetTextAttr (Attr);
|
||||||
|
|
||||||
Count := 1;
|
Count := 1;
|
||||||
|
@ -533,8 +548,8 @@ Begin
|
||||||
Dec(Pad);
|
Dec(Pad);
|
||||||
End;
|
End;
|
||||||
|
|
||||||
SetTextAttr(OldAttr);
|
SetTextAttr (OldAttr);
|
||||||
CursorXY (OldX, OldY);
|
CursorXYRaw (OldX, OldY);
|
||||||
|
|
||||||
BufFlush;
|
BufFlush;
|
||||||
End;
|
End;
|
||||||
|
|
Loading…
Reference in New Issue