[0.4.13][USETUP] Do a trick to avoid visual "blinking" during screen clearing (#3255)

CORE-17312

Hide everything under the same foreground & background colors, so that
the actual color and text blanking reset does not create a visual "blinking".
Then, blank the text and finally reset the actual foreground &
background colors.

We do this because we cannot do the screen scrolling trick that would
allow to change both the text and the colors at the same time (the
function is currently not available in our console "emulation" layer).

The issue was unhidden when we introduced the red progress bar in
0.4.11-dev-111-g e5c0bfacf1

Fix picked from 0.4.15-dev-1078-g 434fa562ce
This commit is contained in:
Joachim Henze 2021-01-15 16:07:30 +01:00
parent b97a2ae1ca
commit 3178252fa7

View file

@ -240,19 +240,32 @@ CONSOLE_ClearScreen(VOID)
coPos.X = 0;
coPos.Y = 0;
FillConsoleOutputAttribute(
StdOutput,
FOREGROUND_WHITE | BACKGROUND_BLUE,
xScreen * yScreen,
coPos,
&Written);
/*
* Hide everything under the same foreground & background colors, so that
* the actual color and text blanking reset does not create a visual "blinking".
* We do this because we cannot do the screen scrolling trick that would
* allow to change both the text and the colors at the same time (the
* function is currently not available in our console "emulation" layer).
*/
FillConsoleOutputAttribute(StdOutput,
FOREGROUND_BLUE | BACKGROUND_BLUE,
xScreen * yScreen,
coPos,
&Written);
FillConsoleOutputCharacterA(
StdOutput,
' ',
xScreen * yScreen,
coPos,
&Written);
/* Blank the text */
FillConsoleOutputCharacterA(StdOutput,
' ',
xScreen * yScreen,
coPos,
&Written);
/* Reset the actual foreground & background colors */
FillConsoleOutputAttribute(StdOutput,
FOREGROUND_WHITE | BACKGROUND_BLUE,
xScreen * yScreen,
coPos,
&Written);
}
VOID