Browse Source

* rtl-console: generalized the partial screen update feature which was added to Amiga. the function was renamed to UpdateScreenArea(). it's still an empty call on other platforms, that falls back to UpdateScreen() but the infrastructure is now there to support it.

Karoly Balogh 3 years ago
parent
commit
d3de4b5951

+ 3 - 3
packages/rtl-console/src/amicommon/video.pp

@@ -49,7 +49,6 @@ procedure GotInactiveWindow;
 function HasInactiveWindow: boolean;
 function HasInactiveWindow: boolean;
 procedure SetWindowTitle(const winTitle: AnsiString; const screenTitle: AnsiString);
 procedure SetWindowTitle(const winTitle: AnsiString; const screenTitle: AnsiString);
 procedure TranslateToCharXY(const X,Y: LongInt; var CX,CY: LongInt);
 procedure TranslateToCharXY(const X,Y: LongInt; var CX,CY: LongInt);
-procedure UpdateScreenPart(const X1,Y1,X2,Y2: Longint; Force: Boolean);
 
 
 var
 var
   VideoWindow: PWindow;
   VideoWindow: PWindow;
@@ -564,7 +563,7 @@ begin
 end;
 end;
 
 
 
 
-procedure UpdateScreenPart(const X1,Y1,X2,Y2: Longint; Force: Boolean);
+procedure SysUpdateScreenArea(const X1,Y1,X2,Y2: Word; Force: Boolean);
 var
 var
   SmallForce: Boolean;
   SmallForce: Boolean;
   CounterX, CounterY: LongInt;
   CounterX, CounterY: LongInt;
@@ -668,7 +667,7 @@ end;
 
 
 procedure SysUpdateScreen(Force: Boolean);
 procedure SysUpdateScreen(Force: Boolean);
 begin
 begin
-  UpdateScreenPart(0,0,ScreenWidth-1,ScreenHeight-1,Force);
+  SysUpdateScreenArea(0,0,ScreenWidth-1,ScreenHeight-1,Force);
 end;
 end;
 
 
 procedure SysSetCursorPos(NewCursorX, NewCursorY: Word);
 procedure SysSetCursorPos(NewCursorX, NewCursorY: Word);
@@ -874,6 +873,7 @@ const
     InitDriver : @SysInitVideo;
     InitDriver : @SysInitVideo;
     DoneDriver : @SysDoneVideo;
     DoneDriver : @SysDoneVideo;
     UpdateScreen : @SysUpdateScreen;
     UpdateScreen : @SysUpdateScreen;
+    UpdateScreenArea : @SysUpdateScreenArea;
     ClearScreen : @SysClearScreen;
     ClearScreen : @SysClearScreen;
     SetVideoMode : @SysSetVideoMode;
     SetVideoMode : @SysSetVideoMode;
     GetVideoModeCount : @SysGetVideoModeCount;
     GetVideoModeCount : @SysGetVideoModeCount;

+ 1 - 0
packages/rtl-console/src/go32v2/video.pp

@@ -308,6 +308,7 @@ Const
     InitDriver      : @SysInitVideo;
     InitDriver      : @SysInitVideo;
     DoneDriver      : @SysDoneVideo;
     DoneDriver      : @SysDoneVideo;
     UpdateScreen    : @SysUpdateScreen;
     UpdateScreen    : @SysUpdateScreen;
+    UpdateScreenArea : Nil;
     ClearScreen     : Nil;
     ClearScreen     : Nil;
     SetVideoMode    : @SysSetVideoMode;
     SetVideoMode    : @SysSetVideoMode;
     GetVideoModeCount : @SysGetVideoModeCount;
     GetVideoModeCount : @SysGetVideoModeCount;

+ 11 - 0
packages/rtl-console/src/inc/video.inc

@@ -186,6 +186,17 @@ begin
       CurrentVideoDriver.UpdateScreen(Force);
       CurrentVideoDriver.UpdateScreen(Force);
 end;
 end;
 
 
+Procedure UpdateScreenArea (const X1, Y1, X2, Y2: Word; Force: Boolean);
+
+begin
+  if (LockUpdateScreen<=0) then
+    if Assigned(CurrentVideoDriver.UpdateScreenArea) then
+      CurrentVideoDriver.UpdateScreenArea(X1,Y1,X2,Y2,Force);
+    else
+      UpdateScreen(Force);
+end;
+
+
 Procedure ClearScreen;
 Procedure ClearScreen;
 
 
 begin
 begin

+ 8 - 1
packages/rtl-console/src/inc/videoh.inc

@@ -29,6 +29,7 @@ type
     InitDriver        : Procedure;
     InitDriver        : Procedure;
     DoneDriver        : Procedure;
     DoneDriver        : Procedure;
     UpdateScreen      : Procedure(Force : Boolean);
     UpdateScreen      : Procedure(Force : Boolean);
+    UpdateScreenArea  : Procedure(const X1, Y1, X2, Y2: Word; Force : Boolean);
     ClearScreen       : Procedure;
     ClearScreen       : Procedure;
     SetVideoMode      : Function (Const Mode : TVideoMode) : Boolean;
     SetVideoMode      : Function (Const Mode : TVideoMode) : Boolean;
     GetVideoModeCount : Function : Word;
     GetVideoModeCount : Function : Word;
@@ -133,7 +134,13 @@ procedure ClearScreen;
 { Clears the screen }
 { Clears the screen }
 procedure UpdateScreen(Force: Boolean);
 procedure UpdateScreen(Force: Boolean);
 { Force specifies whether the whole screen has to be redrawn, or (if target
 { Force specifies whether the whole screen has to be redrawn, or (if target
-  platform supports it) its parts only }
+  platform supports it) only the changed parts }
+procedure UpdateScreenArea(const X1, Y1, X2, Y2: Word; Force: Boolean);
+{ Updates the screen in the area marked by coordinates X1, Y1 (top left) and
+  X2, Y2 (bottom right), coordinates inclusive. Force specifies whether the
+  whole area has to be redrawn, or (if target platform supports it) its changed
+  parts only. If the target doesn't implement it, UpdateScreen() will be called
+  instead. }
 procedure SetCursorPos(NewCursorX, NewCursorY: Word);
 procedure SetCursorPos(NewCursorX, NewCursorY: Word);
 { Position the cursor to the given position }
 { Position the cursor to the given position }
 function GetCursorType: Word;
 function GetCursorType: Word;

+ 1 - 0
packages/rtl-console/src/msdos/video.pp

@@ -281,6 +281,7 @@ Const
     InitDriver      : @SysInitVideo;
     InitDriver      : @SysInitVideo;
     DoneDriver      : @SysDoneVideo;
     DoneDriver      : @SysDoneVideo;
     UpdateScreen    : @SysUpdateScreen;
     UpdateScreen    : @SysUpdateScreen;
+    UpdateScreenArea : Nil;
     ClearScreen     : Nil;
     ClearScreen     : Nil;
     SetVideoMode    : @SysSetVideoMode;
     SetVideoMode    : @SysSetVideoMode;
     GetVideoModeCount : @SysGetVideoModeCount;
     GetVideoModeCount : @SysGetVideoModeCount;

+ 1 - 0
packages/rtl-console/src/netware/video.pp

@@ -176,6 +176,7 @@ Const
   InitDriver        : @SysInitVideo;
   InitDriver        : @SysInitVideo;
   DoneDriver        : @SysDoneVideo;
   DoneDriver        : @SysDoneVideo;
   UpdateScreen      : @SysUpdateScreen;
   UpdateScreen      : @SysUpdateScreen;
+  UpdateScreenArea  : Nil;
   ClearScreen       : Nil;
   ClearScreen       : Nil;
   SetVideoMode      : @SysSetVideoMode;
   SetVideoMode      : @SysSetVideoMode;
   GetVideoModeCount : @SysGetVideoModeCount;
   GetVideoModeCount : @SysGetVideoModeCount;

+ 1 - 0
packages/rtl-console/src/netwlibc/video.pp

@@ -165,6 +165,7 @@ Const
   InitDriver        : @SysInitVideo;
   InitDriver        : @SysInitVideo;
   DoneDriver        : @SysDoneVideo;
   DoneDriver        : @SysDoneVideo;
   UpdateScreen      : @SysUpdateScreen;
   UpdateScreen      : @SysUpdateScreen;
+  UpdateScreenArea  : Nil;
   ClearScreen       : Nil;
   ClearScreen       : Nil;
   SetVideoMode      : @SysSetVideoMode;
   SetVideoMode      : @SysSetVideoMode;
   GetVideoModeCount : @SysGetVideoModeCount;
   GetVideoModeCount : @SysGetVideoModeCount;

+ 1 - 0
packages/rtl-console/src/os2commn/video.pp

@@ -430,6 +430,7 @@ Const
     InitDriver        : @SysInitVideo;
     InitDriver        : @SysInitVideo;
     DoneDriver        : @SysDoneVideo;
     DoneDriver        : @SysDoneVideo;
     UpdateScreen      : @SysUpdateScreen;
     UpdateScreen      : @SysUpdateScreen;
+    UpdateScreenArea  : nil;
     ClearScreen       : @SysClearScreen;
     ClearScreen       : @SysClearScreen;
     SetVideoMode      : @SysSetVideoMode;
     SetVideoMode      : @SysSetVideoMode;
     GetVideoModeCount : @SysGetVideoModeCount;
     GetVideoModeCount : @SysGetVideoModeCount;

+ 1 - 0
packages/rtl-console/src/unix/video.pp

@@ -1367,6 +1367,7 @@ Const
     InitDriver : @SysInitVideo;
     InitDriver : @SysInitVideo;
     DoneDriver : @SysDoneVideo;
     DoneDriver : @SysDoneVideo;
     UpdateScreen : @SysUpdateScreen;
     UpdateScreen : @SysUpdateScreen;
+    UpdateScreenArea : Nil;
     ClearScreen : @SysClearScreen;
     ClearScreen : @SysClearScreen;
     SetVideoMode : @SysSetVideoMode;
     SetVideoMode : @SysSetVideoMode;
     GetVideoModeCount : Nil;
     GetVideoModeCount : Nil;

+ 1 - 0
packages/rtl-console/src/win/video.pp

@@ -756,6 +756,7 @@ Const
     InitDriver : @SysInitVideo;
     InitDriver : @SysInitVideo;
     DoneDriver : @SysDoneVideo;
     DoneDriver : @SysDoneVideo;
     UpdateScreen : @SysUpdateScreen;
     UpdateScreen : @SysUpdateScreen;
+    UpdateScreenArea: nil;
     ClearScreen : @SysClearScreen;
     ClearScreen : @SysClearScreen;
     SetVideoMode : @SysSetVideoMode;
     SetVideoMode : @SysSetVideoMode;
     GetVideoModeCount : @SysGetVideoModeCount;
     GetVideoModeCount : @SysGetVideoModeCount;

+ 1 - 0
packages/rtl-console/src/win16/video.pp

@@ -258,6 +258,7 @@ const
     InitDriver: @SysInitVideo;
     InitDriver: @SysInitVideo;
     DoneDriver: @SysDoneVideo;
     DoneDriver: @SysDoneVideo;
     UpdateScreen: @SysUpdateScreen;
     UpdateScreen: @SysUpdateScreen;
+    UpdateScreenArea: nil;
     ClearScreen: nil;
     ClearScreen: nil;
     SetVideoMode: @SysSetVideoMode;
     SetVideoMode: @SysSetVideoMode;
     GetVideoModeCount: nil;
     GetVideoModeCount: nil;