From 9fe4a9b41faab50fcd7bbc63085ce964e083fed4 Mon Sep 17 00:00:00 2001 From: Ted John Date: Sun, 18 Sep 2016 13:42:54 +0100 Subject: [PATCH] Add support for Windows coloured console --- test/testpaint/main.cpp | 37 +++++++++++++++++++++++++++++++++++-- 1 file changed, 35 insertions(+), 2 deletions(-) diff --git a/test/testpaint/main.cpp b/test/testpaint/main.cpp index 06191c9d3e..02c053284b 100644 --- a/test/testpaint/main.cpp +++ b/test/testpaint/main.cpp @@ -83,13 +83,46 @@ static const char* GetAnsiColorCode(CLIColour color) { }; } +#ifdef __WINDOWS__ + +static WORD GetCurrentWindowsConsoleAttribute(HANDLE hConsoleOutput) +{ + CONSOLE_SCREEN_BUFFER_INFO csbi; + GetConsoleScreenBufferInfo(hConsoleOutput, &csbi); + return csbi.wAttributes; +} + +static WORD GetWindowsConsoleAttribute(CLIColour color, WORD defaultAttr) +{ + switch (color) { + case RED: return FOREGROUND_RED; + case GREEN: return FOREGROUND_GREEN; + default: return defaultAttr; + }; +} + +#endif + static void ColouredPrintF(CLIColour colour, const char* fmt, ...) { va_list args; va_start(args, fmt); if(!ShouldUseColor()) { - vprintf(fmt, args); - va_end(args); + if (gTestColor) { +#ifdef __WINDOWS__ + HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE); + WORD defaultAttr = GetCurrentWindowsConsoleAttribute(hStdOut); + SetConsoleTextAttribute(hStdOut, GetWindowsConsoleAttribute(colour, defaultAttr)); +#endif + vprintf(fmt, args); +#ifdef __WINDOWS__ + SetConsoleTextAttribute(hStdOut, defaultAttr); +#endif + va_end(args); + } else { + vprintf(fmt, args); + va_end(args); + } return; }