Fixed save/restore screen area bug. This bug showed up as a black rectangle on the vertical scrollbar in winhello test.

svn path=/trunk/; revision=4071
This commit is contained in:
Eugene Ingerman 2003-01-25 22:53:12 +00:00
parent 4bf9e37598
commit d4e882e816

View file

@ -16,7 +16,7 @@
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/ */
/* $Id: offscreen.c,v 1.1 2002/09/25 21:21:35 dwelch Exp $ /* $Id: offscreen.c,v 1.2 2003/01/25 22:53:12 ei Exp $
* *
* PROJECT: ReactOS VGA16 display driver * PROJECT: ReactOS VGA16 display driver
* FILE: drivers/dd/vga/display/objects/offscreen.c * FILE: drivers/dd/vga/display/objects/offscreen.c
@ -54,7 +54,8 @@ VGADDI_BltFromSavedScreenBits(ULONG DestX,
for (i = 0; i < SizeY; i++) for (i = 0; i < SizeY; i++)
{ {
DestOffset = (PUCHAR)vidmem + (i + DestY) * 80 + (DestX >> 3); DestOffset = (PUCHAR)vidmem + (i + DestY) * 80 + (DestX >> 3);
for (j = 0; j < SizeX; j++, SrcOffset++, DestOffset++) //FIXME: in the loop below we should treat the case when SizeX is not divisible by 8, i.e. partial bytes
for (j = 0; j < SizeX>>3; j++, SrcOffset++, DestOffset++)
{ {
(VOID)READ_REGISTER_UCHAR(SrcOffset); (VOID)READ_REGISTER_UCHAR(SrcOffset);
WRITE_REGISTER_UCHAR(DestOffset, 0); WRITE_REGISTER_UCHAR(DestOffset, 0);
@ -86,7 +87,8 @@ VGADDI_BltToSavedScreenBits(PSAVED_SCREEN_BITS Dest,
for (i = 0; i < SizeY; i++) for (i = 0; i < SizeY; i++)
{ {
SrcOffset = (PUCHAR)vidmem + (SourceY + i) * 80 + (SourceX >> 3); SrcOffset = (PUCHAR)vidmem + (SourceY + i) * 80 + (SourceX >> 3);
for (j = 0; j < SizeX; j++, SrcOffset++, DestOffset++) //FIXME: in the loop below we should treat the case when SizeX is not divisible by 8, i.e. partial bytes
for (j = 0; j < SizeX>>3; j++, SrcOffset++, DestOffset++)
{ {
(VOID)READ_REGISTER_UCHAR(SrcOffset); (VOID)READ_REGISTER_UCHAR(SrcOffset);
WRITE_REGISTER_UCHAR(DestOffset, 0); WRITE_REGISTER_UCHAR(DestOffset, 0);
@ -107,7 +109,7 @@ VGADDI_FreeSavedScreenBits(PSAVED_SCREEN_BITS SavedBits)
{ {
PSAVED_SCREEN_BITS Previous; PSAVED_SCREEN_BITS Previous;
Previous = CONTAINING_RECORD(SavedBits->ListEntry.Blink, Previous = CONTAINING_RECORD(SavedBits->ListEntry.Blink,
SAVED_SCREEN_BITS, ListEntry); SAVED_SCREEN_BITS, ListEntry);
if (Previous->Free) if (Previous->Free)
{ {
@ -121,7 +123,7 @@ VGADDI_FreeSavedScreenBits(PSAVED_SCREEN_BITS SavedBits)
{ {
PSAVED_SCREEN_BITS Next; PSAVED_SCREEN_BITS Next;
Next = CONTAINING_RECORD(SavedBits->ListEntry.Flink, SAVED_SCREEN_BITS, Next = CONTAINING_RECORD(SavedBits->ListEntry.Flink, SAVED_SCREEN_BITS,
ListEntry); ListEntry);
if (Next->Free) if (Next->Free)
{ {