mirror of
https://github.com/reactos/reactos.git
synced 2024-11-07 23:22:36 +00:00
- implement screenbuffer resizing(required for console scrolling support)
- still quite buggy :) svn path=/trunk/; revision=28779
This commit is contained in:
parent
b2454a486f
commit
1f4fc15d27
1 changed files with 43 additions and 5 deletions
|
@ -1627,13 +1627,51 @@ GuiApplyUserSettings(PCSRSS_CONSOLE Console, PGUI_CONSOLE_DATA GuiData, PConsole
|
||||||
|
|
||||||
if (windx != Console->ActiveBuffer->MaxX || windy != Console->ActiveBuffer->MaxY)
|
if (windx != Console->ActiveBuffer->MaxX || windy != Console->ActiveBuffer->MaxY)
|
||||||
{
|
{
|
||||||
//
|
BYTE * Buffer = HeapAlloc(Win32CsrApiHeap, 0, windx * windy * 2);
|
||||||
// TODO
|
if (Buffer)
|
||||||
// resize screen buffer
|
{
|
||||||
|
DWORD Offset = 0;
|
||||||
|
DWORD BufferOffset = 0;
|
||||||
|
USHORT CurrentY;
|
||||||
|
BYTE * OldBuffer;
|
||||||
|
DWORD diff;
|
||||||
|
DWORD value = ((((DWORD)Console->ActiveBuffer->DefaultAttrib) << 16) | 0x20);
|
||||||
|
|
||||||
|
OldBuffer = Console->ActiveBuffer->Buffer;
|
||||||
|
|
||||||
// Console->ActiveBuffer->MaxX = windx;
|
for (CurrentY = 0; CurrentY < min(Console->ActiveBuffer->MaxY, windy); CurrentY++)
|
||||||
// Console->ActiveBuffer->MaxY = windy;
|
{
|
||||||
|
if (windx < Console->ActiveBuffer->MaxX)
|
||||||
|
{
|
||||||
|
/* reduce size */
|
||||||
|
RtlCopyMemory(&Buffer[Offset], &OldBuffer[BufferOffset], windx * 2);
|
||||||
|
Offset += (windx * 2);
|
||||||
|
BufferOffset += (Console->ActiveBuffer->MaxX * 2);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* enlarge size */
|
||||||
|
diff = windx - Console->ActiveBuffer->MaxX;
|
||||||
|
|
||||||
|
RtlCopyMemory(&Buffer[Offset], &OldBuffer[BufferOffset], Console->ActiveBuffer->MaxX * 2);
|
||||||
|
Offset += (Console->ActiveBuffer->MaxX * 2);
|
||||||
|
/* zero new part of it */
|
||||||
|
memset(&Buffer[Offset], value, (diff * 2));
|
||||||
|
Offset += (diff * 2);
|
||||||
|
BufferOffset += (Console->ActiveBuffer->MaxX * 2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (windy > Console->ActiveBuffer->MaxY)
|
||||||
|
{
|
||||||
|
diff = windy - Console->ActiveBuffer->MaxX;
|
||||||
|
memset(&Buffer[Offset], value, diff * 2 * windx);
|
||||||
|
}
|
||||||
|
(void)InterlockedExchangePointer((PVOID volatile *)Console->ActiveBuffer->Buffer, Buffer);
|
||||||
|
HeapFree(Win32CsrApiHeap, 0, OldBuffer);
|
||||||
|
Console->ActiveBuffer->MaxX = windx;
|
||||||
|
Console->ActiveBuffer->MaxY = windy;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
windx = LOWORD(pConInfo->WindowSize);
|
windx = LOWORD(pConInfo->WindowSize);
|
||||||
|
|
Loading…
Reference in a new issue