From 25ae17b4905ed8e9f58f38a53197bb0c4b93405c Mon Sep 17 00:00:00 2001 From: kwkam Date: Fri, 12 Feb 2016 14:24:04 +0800 Subject: src/WinConsoleFile.cc: fix colour Set default foreground/background colour correctly --- src/WinConsoleFile.cc | 40 ++++++++++++++++++++++++---------------- 1 file changed, 24 insertions(+), 16 deletions(-) (limited to 'src') diff --git a/src/WinConsoleFile.cc b/src/WinConsoleFile.cc index 41ccd8ed..9300b105 100644 --- a/src/WinConsoleFile.cc +++ b/src/WinConsoleFile.cc @@ -62,6 +62,8 @@ const WORD kForeground[] = { FOREGROUND_WHITE // white }; +const int kForegroundSize = sizeof (kForeground) / sizeof (kForeground[0]); + const WORD kBackground[] = { BACKGROUND_BLACK, // black BACKGROUND_RED, // red @@ -73,6 +75,8 @@ const WORD kBackground[] = { BACKGROUND_WHITE // white }; +const int kBackgroundSize = sizeof (kBackground) / sizeof (kBackground[0]); + } // namespace namespace aria2 { @@ -82,30 +86,34 @@ WinConsoleFile::WinConsoleFile(DWORD stdHandle) bold_(false), underline_(false), reverse_(false), - fg_(FOREGROUND_WHITE), - bg_(BACKGROUND_BLACK) + deffg_(FOREGROUND_WHITE), + defbg_(BACKGROUND_BLACK) { if (supportsColor()) { CONSOLE_SCREEN_BUFFER_INFO info; GetConsoleScreenBufferInfo(handle(), &info); - info.wAttributes &= - ~(COMMON_LVB_LEADING_BYTE | COMMON_LVB_TRAILING_BYTE | - COMMON_LVB_GRID_HORIZONTAL | COMMON_LVB_GRID_LVERTICAL | - COMMON_LVB_GRID_RVERTICAL | COMMON_LVB_REVERSE_VIDEO | - COMMON_LVB_UNDERSCORE); - fg_ = info.wAttributes & - ~(BACKGROUND_BLUE | BACKGROUND_GREEN | BACKGROUND_RED | - BACKGROUND_INTENSITY); - bg_ = info.wAttributes & - ~(FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED | - FOREGROUND_INTENSITY); - bg_ = (bg_ >> 4) & 0x0F; + deffg_ = info.wAttributes & + (FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED); + defbg_ = info.wAttributes & + (BACKGROUND_BLUE | BACKGROUND_GREEN | BACKGROUND_RED); bold_ = info.wAttributes & FOREGROUND_INTENSITY; underline_ = info.wAttributes & BACKGROUND_INTENSITY; } - deffg_ = fg_; - defbg_ = bg_; + for (int i = 0; i < kForegroundSize; i++) { + if (deffg_ == kForeground[i]) { + deffg_ = i; + break; + } + } + for (int i = 0; i < kBackgroundSize; i++) { + if (defbg_ == kBackground[i]) { + defbg_ = i; + break; + } + } + fg_ = deffg_; + bg_ = defbg_; } bool WinConsoleFile::supportsColor() -- cgit From 1c573c970831c368942d9173eb27d944aa3faaf8 Mon Sep 17 00:00:00 2001 From: kwkam Date: Sat, 13 Feb 2016 16:01:41 +0800 Subject: src/WinConsoleFile.cc: fix colour Try to make it less confusing --- src/WinConsoleFile.cc | 37 ++++++++++++++++++------------------- 1 file changed, 18 insertions(+), 19 deletions(-) (limited to 'src') diff --git a/src/WinConsoleFile.cc b/src/WinConsoleFile.cc index 9300b105..327eca6a 100644 --- a/src/WinConsoleFile.cc +++ b/src/WinConsoleFile.cc @@ -86,34 +86,33 @@ WinConsoleFile::WinConsoleFile(DWORD stdHandle) bold_(false), underline_(false), reverse_(false), - deffg_(FOREGROUND_WHITE), - defbg_(BACKGROUND_BLACK) + fg_(7), + bg_(0) { if (supportsColor()) { CONSOLE_SCREEN_BUFFER_INFO info; GetConsoleScreenBufferInfo(handle(), &info); - deffg_ = info.wAttributes & - (FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED); - defbg_ = info.wAttributes & - (BACKGROUND_BLUE | BACKGROUND_GREEN | BACKGROUND_RED); bold_ = info.wAttributes & FOREGROUND_INTENSITY; underline_ = info.wAttributes & BACKGROUND_INTENSITY; - } - - for (int i = 0; i < kForegroundSize; i++) { - if (deffg_ == kForeground[i]) { - deffg_ = i; - break; + int fgcolor = info.wAttributes & + (FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED); + for (int fg = 0; fg < kForegroundSize; fg++) { + if (kForeground[fg] == fgcolor) { + fg_ = fg; + break; + } } - } - for (int i = 0; i < kBackgroundSize; i++) { - if (defbg_ == kBackground[i]) { - defbg_ = i; - break; + int bgcolor = info.wAttributes & + (BACKGROUND_BLUE | BACKGROUND_GREEN | BACKGROUND_RED); + for (int bg = 0; bg < kBackgroundSize; bg++) { + if (kBackground[bg] == bgcolor) { + bg_ = bg; + break; + } } } - fg_ = deffg_; - bg_ = defbg_; + deffg_ = fg_; + defbg_ = bg_; } bool WinConsoleFile::supportsColor() -- cgit From 04eacf05e71314dffafd4b83284aa5594596190b Mon Sep 17 00:00:00 2001 From: kwkam Date: Sat, 13 Feb 2016 16:03:41 +0800 Subject: Update WinConsoleFile.cc add blank line --- src/WinConsoleFile.cc | 1 + 1 file changed, 1 insertion(+) (limited to 'src') diff --git a/src/WinConsoleFile.cc b/src/WinConsoleFile.cc index 327eca6a..8f6b4ac7 100644 --- a/src/WinConsoleFile.cc +++ b/src/WinConsoleFile.cc @@ -111,6 +111,7 @@ WinConsoleFile::WinConsoleFile(DWORD stdHandle) } } } + deffg_ = fg_; defbg_ = bg_; } -- cgit