|
|
|
@ -2979,16 +2979,37 @@ void ColoredPrintf(GTestColor color, const char* fmt, ...) { |
|
|
|
|
CONSOLE_SCREEN_BUFFER_INFO buffer_info; |
|
|
|
|
GetConsoleScreenBufferInfo(stdout_handle, &buffer_info); |
|
|
|
|
const WORD old_color_attrs = buffer_info.wAttributes; |
|
|
|
|
|
|
|
|
|
// Let's reuse the BG
|
|
|
|
|
const WORD background_mask = BACKGROUND_BLUE | BACKGROUND_GREEN | BACKGROUND_RED | BACKGROUND_INTENSITY; |
|
|
|
|
const WORD foreground_mask = FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_INTENSITY; |
|
|
|
|
|
|
|
|
|
const WORD existing_bg = old_color_attrs & background_mask; |
|
|
|
|
|
|
|
|
|
WORD new_color = GetColorAttribute(color) | existing_bg | FOREGROUND_INTENSITY; |
|
|
|
|
|
|
|
|
|
#if 1 // do we really need to waste these cpu cycles every time?
|
|
|
|
|
int bg_bitOffset = 0; |
|
|
|
|
WORD bg_mask = background_mask; |
|
|
|
|
while((bg_mask & 0x01) == 0x00) { |
|
|
|
|
bg_mask >>= 1; |
|
|
|
|
++bg_bitOffset; |
|
|
|
|
} |
|
|
|
|
#else |
|
|
|
|
const int bg_bitOffset = 4; |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
if (((new_color & background_mask) >> bg_bitOffset) == (new_color & foreground_mask)) { |
|
|
|
|
//revert intensity
|
|
|
|
|
new_color ^= FOREGROUND_INTENSITY; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// We need to flush the stream buffers into the console before each
|
|
|
|
|
// SetConsoleTextAttribute call lest it affect the text that is already
|
|
|
|
|
// printed but has not yet reached the console.
|
|
|
|
|
fflush(stdout); |
|
|
|
|
SetConsoleTextAttribute(stdout_handle, |
|
|
|
|
GetColorAttribute(color) | existing_bg | FOREGROUND_INTENSITY); |
|
|
|
|
SetConsoleTextAttribute(stdout_handle, new_color); |
|
|
|
|
|
|
|
|
|
vprintf(fmt, args); |
|
|
|
|
|
|
|
|
|
fflush(stdout); |
|
|
|
|