Переглянути джерело

Merge pull request #1058 from kwkam/patch-2

WinConsoleFile: fix colour properly
Tatsuhiro Tsujikawa 8 роки тому
батько
коміт
16f458c9a4
2 змінених файлів з 14 додано та 9 видалено
  1. 12 7
      src/WinConsoleFile.cc
  2. 2 2
      src/WinConsoleFile.h

+ 12 - 7
src/WinConsoleFile.cc

@@ -90,28 +90,31 @@ WinConsoleFile::WinConsoleFile(DWORD stdHandle)
       bg_(0)
 {
   if (supportsColor()) {
+    int color;
     CONSOLE_SCREEN_BUFFER_INFO info;
     GetConsoleScreenBufferInfo(handle(), &info);
     bold_ = info.wAttributes & FOREGROUND_INTENSITY;
     underline_ = info.wAttributes & BACKGROUND_INTENSITY;
-    int fgcolor = info.wAttributes &
-                  (FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED);
+    color = info.wAttributes &
+            (FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED);
     for (int fg = 0; fg < kForegroundSize; fg++) {
-      if (kForeground[fg] == fgcolor) {
+      if (kForeground[fg] == color) {
         fg_ = fg;
         break;
       }
     }
-    int bgcolor = info.wAttributes &
-                  (BACKGROUND_BLUE | BACKGROUND_GREEN | BACKGROUND_RED);
+    color = info.wAttributes &
+            (BACKGROUND_BLUE | BACKGROUND_GREEN | BACKGROUND_RED);
     for (int bg = 0; bg < kBackgroundSize; bg++) {
-      if (kBackground[bg] == bgcolor) {
+      if (kBackground[bg] == color) {
         bg_ = bg;
         break;
       }
     }
   }
 
+  defbold_ = bold_;
+  defunderline_ = underline_;
   deffg_ = fg_;
   defbg_ = bg_;
 }
@@ -216,9 +219,11 @@ size_t WinConsoleFile::writeColorful(const std::wstring& str)
       }
       for (const int a : args) {
         if (a == 0) {
+          bold_ = defbold_;
+          underline_ = defunderline_;
+          reverse_ = false;
           fg_ = deffg_;
           bg_ = defbg_;
-          bold_ = underline_ = reverse_ = false;
         }
         else if (30 <= a && a <= 37) {
           fg_ = a - 30;

+ 2 - 2
src/WinConsoleFile.h

@@ -55,8 +55,8 @@ public:
 
 private:
   DWORD stdHandle_;
-  bool bold_;
-  bool underline_;
+  bool bold_, defbold_;
+  bool underline_, defunderline_;
   bool reverse_;
   WORD fg_, deffg_;
   WORD bg_, defbg_;